Gradle is an awesome build tool, and I am always looking forward to new versions to enjoy the latest features, performance improvements and bug fixes. Actually, forget what I’ve said about bugfixes: Gradle works like a charm.
I could just check Gradle’s distributions page periodically, or subscribe to their releases on GitHub to get notified about new versions faster. And I actually do that from time to time when I need to know the latest available version. But how can I keep Gradle up-to-date in the existing codebases?
I suppose, the easiest solution that does not involve using third-party services like Snyk (BTW, I am not sure they can track version of the build tool) is to automate the check in your CI pipeline. Here is an example for GitLab:
gradle-version: stage: Test # (1) image: openjdk:12 # (2) dependencies:  # (3) script: - gradle_version=$(./gradlew --version | sed -rn 's/^Gradle (.+)$/\1/p') # (4) - latest_gradle_version=$(curl https://services.gradle.org/versions/current | python2 -c 'import json,sys;print json.load(sys.stdin)["version"]') # (5) - echo $gradle_version - echo $latest_gradle_version # (6) - '[[ $gradle_version == $latest_gradle_version ]]' # (7) allow_failure: true # (8)
Defines a job named
gradle-versionto be run during
Specifies Docker image to be used for this job.
Disables artifact passing (it’s just another way to say “speeds up the build and saves some money”).
./gradlew --versionoutput and extracts Gradle’s version, like
I believe that println is one of the best ways to debug.
Compares the versions. Quotes are needed for YML to be valid.
Allows the check above to fail without failing the whole build.
That’s it! This way I’m automatically checking Gradle’s version on every build and see a warning when the version is not equal to the latest published stable release.
Thanks for reading to the end. May you builds be green!