Skip to content

Gradle plugin that detects and updates Gradle and Maven wrappers to the latest Gradle and Maven version.

License

Notifications You must be signed in to change notification settings

gradle/wrapper-upgrade-gradle-plugin

Wrapper Upgrade Gradle Plugin

Verify Build Plugin Portal Revved up by Gradle Enterprise

The Wrapper Upgrade Gradle Plugin creates tasks to upgrade the Gradle Wrapper for target projects hosted on GitHub.

Usage

Apply the plugin to a dedicated project and configure which project needs to be upgraded. Example:

Kotlin DSL
plugins {
    id("base")
    id("org.gradle.wrapper-upgrade") version "0.11.1"
}

wrapperUpgrade {
    gradle {
        register("some-gradle-project") {
            repo.set("my-org/some-gradle-project")
            baseBranch.set("release")
        }
        register("some-samples-gradle-project") {
            repo.set("my-org/some-samples-gradle-project")
            dir.set("samples")
        }
    }

    maven {
        register("some-maven-project") {
            repo.set("my-org/some-maven-project")
            baseBranch.set("release")
        }
        register("some-samples-maven-project") {
            repo.set("my-org/some-samples-maven-project")
            baseBranch.set("samples")
        }
    }
}
Groovy DSL
plugins {
    id 'base'
    id 'org.gradle.wrapper-upgrade' version '0.11.4'
}

wrapperUpgrade {
    gradle {
        'some-gradle-project' {
            repo = 'my-org/some-gradle-project'
            baseBranch = 'release'
        }
        'some-samples-gradle-project' {
            repo = 'my-org/some-samples-gradle-project'
            dir = 'samples'
        }
    }

    maven {
        'some-maven-project' {
            repo = 'my-org/some-maven-project'
            baseBranch = 'release'
        }
        'some-samples-maven-project' {
            repo = 'my-org/some-samples-maven-project'
            dir = 'samples'
        }
    }
}

This will create one task per configured project and 2 aggregating tasks: upgradeGradleWrapperAll and upgradeMavenWrapperAll that will run all the specific tasks.

Running ./gradlew upgradeGradleWrapperXXX will:

  • clone the project XXX in build/git-clones
  • run in the cloned project ./gradlew wrapper --gradle-version=<latest_gradle_version>
  • run a second time ./gradlew wrapper --gradle-version=<latest_gradle_version>
  • If changes occurred
    • create a specific branch
    • commit and push the branch
    • create a pull request on GitHub, it requires a GitHub personal access token (PAT), passed with WRAPPER_UPGRADE_GIT_TOKEN environment variable. This token is used to get the existing PRs on the repo and create one if needed, hence it requires:
      • the repo scope for a classic PAT
      • read-write permissions for "Pull requests" on the relevant repos for a fine-grained PAT

Note that a check is done first to make sure the branch does not exist yet. That way you can run upgradeGradleWrapperAll and upgradeMavenWrapperAll periodically with a cron, CI job... a bit like dependabot does for upgrading libs.

Running upgradeMavenWrapperXXX will do the same, executing ./mvnw wrapper:wrapper -Dmaven=<latest_maven_version> instead.

Configuration

wrapperUpgrade {
    <gradle|maven> {
        name {
            repo = ...
            baseBranch = ...
            dir = ...
            options {
                gitCommitExtraArgs = [...]
                allowPreRelease = true
                labels = ['dependencies']
                recreateClosedPullRequests = true
            }
        }
    }
}
Field description
name A name identifying the upgrade, it can be different from the project name, for example when you need to upgrade multiple gradle projects in the same git project
repo The GitHub repository to clone, format 'organization/project`
dir The directory inside the project base directory to run the gradle or maven upgrade in
baseBranch The git branch to checkout and that the pull request will target
options.gitCommitExtraArgs List of additional git commit arguments
options.allowPreRelease Boolean: true will get the latest Maven/Gradle version even if it's a pre-release. Default is false.
options.labels Optional list of label (names) that will be added to the pull request.
options.recreateClosedPullRequests Boolean: true will recreate the pull request if a closed pull request with the same branch name exists. false will not recreate the pull request. Default is false.

License

The Wrapper Upgrade Gradle Plugin is open-source software released under the Apache 2.0 License.