wrapper-upgrade-gradle-plugin
[!IMPORTANT] This project is no longer maintained and this repository is archived.
Both mainstream dependency bots now upgrade wrappers, so this plugin is no longer needed:
- Renovate upgrades the Gradle wrapper and the Maven wrapper. Enable the
gradle-wrapperandmaven-wrappermanagers.- Dependabot upgrades the Gradle wrapper through the
gradleecosystem. As of 7 August 2026, it does not upgrade the Maven wrapper. See dependabot-core#13183.Version 0.12 stays available on the Gradle Plugin Portal, but it receives no further changes.
The Wrapper Upgrade Gradle Plugin creates tasks to upgrade the Gradle Wrapper for target projects hosted on GitHub.
Prerequisites
To run the upgrade tasks, you'll need:
Java 8 or later.
Git. The plugin uses Git commands to commit, create branches, and push changes.
Git author identity: Make sure your Git author identity is configured. You can set this with:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"Using GPG Signing (Optional): If you use GitHub Actions and want to sign your commits with GPG, you can use the crazy-max/ghaction-import-gpg action. This action imports your GPG key and configures the Git author identity.
- name: Import GPG key uses: crazy-max/ghaction-import-gpg@cb9bde2e2525e640591a934b1fd28eef1dcaf5e5 with: gpg_private_key: ${{ secrets.MY_GPG_PRIVATE_KEY }} passphrase: ${{ secrets.MY_GPG_PASSPHRASE }} git_user_signingkey: true git_commit_gpgsign: true git_config_global: trueGit credentials: If you use GitHub Actions, you can configure your Git credentials from a GitHub token with this trick:
- name: Set up Git credentials env: TOKEN: ${{ secrets.GITHUB_TOKEN }} run: git config --global url."https://unused-username:${TOKEN}@github.com/".insteadOf "https://github.com/"
GitHub Personal Access Token (PAT) with write permission: The plugin creates pull requests on GitHub. To do this, you need a GitHub personal access token (PAT) with the
reposcope or read-write permissions for "Pull requests" on the relevant repositories. Set this token in theWRAPPER_UPGRADE_GIT_TOKENenvironment variable.Example usage for GitHub Actions:
- name: Upgrade Wrappers run: ./gradlew clean upgradeGradleWrapperAll env: WRAPPER_UPGRADE_GIT_TOKEN: ${{ secrets.<<your PAT with write permission>> }}
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.12"
}
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_TOKENenvironment variable. This token is used to get the existing PRs on the repo and create one if needed, hence it requires:- the
reposcope for a classic PAT - read-write permissions for "Pull requests" on the relevant repos for a fine-grained PAT
- the
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']
assignees = ['alextu']
reviewers = ['StefMa']
recreateClosedPullRequest = 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.assignees |
Optional list of GitHub usernames that will be added as assignees to the pull request. |
options.reviewers |
Optional list of GitHub usernames that will be added as reviewers to the pull request. |
options.recreateClosedPullRequest |
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.
