The plugin is not bundled / part of Gradle core, but available here:
https://github.com/researchgate/gradle-release
Configuration
To use it, set a snapshot version in your gradle.properties file, like:
version=1.1-SNAPSHOT
You build.gradle file config should be as follows:
plugins { id 'java' id 'net.researchgate.release' version '2.8.1' id 'maven-publish' } group 'com.something' repositories { mavenLocal() mavenCentral() maven { url = uri('http://your-maven-repo:8080/repository/your-repo-url/') } } java { withSourcesJar() } publishing { publications { maven(MavenPublication) { from components.java } } repositories { // define our repo for publishing. // Note that you do not need to include maven local here to enable publishing of snapshots // to the local repo maven { name = "myRepo" def releasesRepoUrl = "http://myRepoURL:8080/repository/releases" def snapshotsRepoUrl = "http://myRepoURL:8080/repository/snapshots" url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl allowInsecureProtocol = true // credentials are not stored in the project, put them in gradle.properties on your build server credentials(PasswordCredentials) } } } // publish every build to local maven, to enable local testing publishToMavenLocal.dependsOn(check) build.dependsOn(publishToMavenLocal) // publish release builds to remote repo afterReleaseBuild.dependsOn publish
Diasabling git repo caching on Bamboo
If you use the Bamboo CI server, you can get this problem. By default, Bamboo will create a cached version of a git repository on a build agent. This seems to cause a release to fail as the cache appears to be created as a non-bare git repo. (Why!?) You will get an error like this:build 12-Jul-2023 21:25:01 > Task :CPA-GJAP-JOB1:preTagCommit FAILED build 12-Jul-2023 21:25:01 Running [git, push, --porcelain, origin, master] produced an error: [remote: error: refusing to update checked out branch: refs/heads/master build 12-Jul-2023 21:25:01 remote: error: By default, updating the current branch in a non-bare repository build 12-Jul-2023 21:25:01 remote: is denied, because it will make the index and work tree inconsistent build 12-Jul-2023 21:25:01 remote: with what you pushed, and will require 'git reset --hard' to match build 12-Jul-2023 21:25:01 remote: the work tree to HEAD. build 12-Jul-2023 21:25:01 remote: build 12-Jul-2023 21:25:01 remote: You can set the 'receive.denyCurrentBranch' configuration variable build 12-Jul-2023 21:25:01 remote: to 'ignore' or 'warn' in the remote repository to allow pushing into build 12-Jul-2023 21:25:01 remote: its current branch; however, this is not recommended unless you build 12-Jul-2023 21:25:01 remote: arranged to update its work tree to match what you pushed in some build 12-Jul-2023 21:25:01 remote: other way. build 12-Jul-2023 21:25:01 remote: build 12-Jul-2023 21:25:01 remote: To squelch this message and still keep the default behaviour, set build 12-Jul-2023 21:25:01 remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'. build 12-Jul-2023 21:25:01 error: failed to push some refs to 'file:///opt/atlassian/bamboo_home/local-working-dir/_git-repositories-cache/75a29889fc2f629c383438079d8c939799ad3383']
You need to go into the Bamboo admin settings for that repository (not the build plan) and deselect “Enable repository caching on agents”.
Avoiding an infinite build loop with Bamboo
A second gotcha when using Bamboo! Bamboo is hard coded to understand and ignore Maven release plugin commits. This is not the case with the Gradle release plugin! Hence without additional configuration you will get an infinite loop. You can fix this by configuring the repository settings to ignore Gradle release plugin commits.
You need to update the Bamboo admin settings for the repository, not to trigger builds when the commit message matches:
.*?Gradle Release Plugin.*?
initScmAdapter FAILED :Current Git branch is master not main
From v3 of the plugin onwards, the default git branch has changed from master to main. If you are still using master, you can configure this:release { git { requireBranch.set('master') } }For other Gradle posts, see:
Dependencies and Configurations in Gradle
Using test fixtures in Gradle and Maven
Code coverage with Gradle and Jacoco