Giter Club home page Giter Club logo

build-tool-roadmap's People

Contributors

bamboo avatar ljacomet avatar pioterj avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

build-tool-roadmap's Issues

Update embedded Groovy and Groovy DSL Language to 4.0

The current plan is to upgrade to Groovy 4 in the next major release (8.0).

However an alternative path could be to stick with Groovy 3.x a bit longer. This is however tied to the evolution of Java Language version support planned for Groovy 3.
In short, Gradle would require Groovy 3 to still be compatible with Java 21 (September 2023 release)

Automated plugin approval process

Automate most of the approval checks as part of the plugin publication to the Plugin Portal to decrease the risk of human errors (and therefore increase security) and decrease wait time for plugin authors.

Provider API migration

As of this writing there are 1,396 public types with 6,275 public methods available in Gradle’s public API to compile Java code against. Kotlin DSL and Groovy DSL each add some syntactic sugar on top of these. Some inconsistencies are bound to manifest over the years in such a large API.

One of the most significant inconsistencies is about our redundant configuration model. Historically, Gradle’s build model was configured using the JavaBeans model, i.e. properties defined via getters and setters. In 2017 we introduced the provider API as an alternative configuration model with a number of benefits, like lazy configuration, tracking build dependencies and lifecycle management on a fine-grained level.

The plan was to eventually convert the entirety of the Gradle API to the provider API, but it was never fully implemented. At present about 12% of public properties use provider API semantics. The rest is mostly exposed as JavaBean properties, but there is also a significant number of methods that conform to neither standard.

The inconsistency of our configuration model is the cause for some of the most reported problems, and the largest culprit for accidental complexity in Gradle builds. Full conversion would mean a lazy-only configuration model that would make some mistakes impossible to make that currently cause performance issues like cache misses, but can even result in incorrect builds. A lazy-only API also means we could track the origin of the value of a property, e.g. we can tell if a JavaCompile task is configured for Java 8 source compatibility because of a convention plugin, dictated by the JDK being used, or set from a build script. Some future features like coarse-grained execution, sandboxing and remote execution depend on a fully lazy API, or would be significantly simpler to implement with.

In Gradle 9.0 we are planning to migrate a large part of the remaining public API to use providers.

A demo of the upgrade experience can be tried here: https://github.com/gradle/provider-api-migration-testbed

GitHub Dependabot alerts and dependency graph support

The GitHub Dependency Graph is central to all aspects of GitHub supply chain security, including Dependency Review on PRs and Dependabot Security Alerts. The goal is to make it easy to enable the GitHub Dependency Graph for any project built with Gradle.

The Gradle dependency-graph support will consist of 2 parts:

  1. The gradle/actions/dependency-submission action:

    • Provides a convenient mechanism to generate and submit a dependency gradle from a GitHub Actions workflow
    • Provides options to include/exclude particular projects and configurations from the dependency graph
    • Leverages the GitHub Dependency Graph Gradle Plugin
  2. The GitHub Dependency Graph Gradle Plugin:

    • Collects all resolved dependencies for a Gradle execution, and export these in GitHub Dependency Graph format
    • Provides a custom task designed to resolve all possible dependencies for a build.
    • Could be used in other CI environments to generate a dependency-graph for submission to GitHub

Kotlin lazy property assignment as a stable feature

In 8.1 we added an option to opt-in to Kotlin lazy property assignment, see #38.

We plan to enable it by default in 8.2 and stabilize it we switch to Kotlin 1.9.0 which has the last fixes - probably in 8.3.

Main reasons why it was not enabled by default before:

  1. Kotlin assignment plugin with Kotlin 1.8.10 emits a warning that plugin is experimental. That might break some builds that use "all warnings are errors" flag for compilation
  2. There are some important bugs with IDE integration in Kotlin 1.8.10, that were fixed in Kotlin 1.8.20: KT-56941, KT-56221

Relates to:
Concise and statically-typed Property<T> assignment

Experimental opt-in Kotlin lazy property assignment

Kotlin DSL currently doesn't support an assignment for type Property as Groovy, but .set(T) have to be used. The goal is, that for types with inputs of type Property<T> we support =. This will ease the migration to Provider API for existing scripts and make the use of Provider API for new scripts more compelling.

Example
Types:

public interface Extension {
    Property<String> getDescription();
}
public interface OtherExtension {
    Property<String> getDescription();
}

Current DSL:

extension {
    description.set("value")
    description.set(otherExtension.description)
}

New DSL (.set(T) will still work):

extension {
    description = "value"
    description = otherExtension.description
}

In 8.1. we will introduce opt-in Kotlin lazy property assignment.

Related issue:

Declarative test suites

Make it easier to add additional test groups like integration and functional tests.

To be released in Gradle 7.3.

Plugin Publish plugin 1.0

Simplify the Plugin Publish plugin by:

  • removing the multiple ways of generating publication metadata and always relying on the Maven Publish plugin for it (plugin will be auto-applied)
  • simplify the internals by using the Maven publications for everything (from artifacts to pom files)
  • simplify the documentation
  • address various issues reported in the past, in particular the insights of Daniel Lacasse

Kotlin DSL by default for new Gradle builds

Resolve the outstanding issues with Kotlin DSL, mostly about usability so it can be the default for new builds.

  • Kotlin DSL can become the default in Android and other ecosystems

Kotlin DSL recommended for all Gradle builds

Resolve the outstanding issues with Kotlin DSL, especially around script compilation performance, so that:

  • Kotlin DSL can be fully recommended for all types of projects including large ones

Scala 3 support

Provide the ability to compile Scala 3 code in the Scala plugin.

API for untracked tasks

Add ability to declare that Gradle should not track the state of a task. This means that no optimizations are performed when running the task. For example, such a task will always be out of date and never come from the build cache.

It replaces Task.outputs.upToDateWhen { false }.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.