gradle plugin that defines automatically project version using jgitver
gradle plugin to define project version using jgitver.
In order to find the latest version published of gradle-jgitver-plugin, go to the gradle plugin portal.
see the project build.gradle.kts to see how the project is using itself to manage its own versions.
Find latest version of the plugin: click here
plugins {
id "fr.brouillard.oss.gradle.jgitver" version "0.9.1"
}
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.fr.brouillard.oss.gradle:gradle-jgitver-plugin:0.9.1"
}
}
apply plugin: 'fr.brouillard.oss.gradle.jgitver'
See jgitver for a full understanding of the possibilities and usage.
You can also have a look at the maven equivalent: jgitver-maven-plugin.
Finally have a look at the configuration paragraph to have full control on the plugin.
Since 0.2.0 the plugin automatically registers a task version
which you can call to print out the calculated version of your project:
$ ./gradlew version
:version
Version: 0.0.2-4
BUILD SUCCESSFUL
Total time: 5.769 secs
Before 0.2.0, in order to know the current version of your project, just print out the version in a task looking like the following:
task version {
doLast {
println 'Version: ' + version
}
}
then just call the task
$ ./gradlew version
:version
Version: 0.0.2-4
BUILD SUCCESSFUL
Total time: 5.769 secs
Starting from 0.2.0
it is possible to configure the plugin inside the build.gradle
.
jgitver {
strategy MAVEN | CONFIGURABLE | PATTERN
mavenLike true/false (deprecated, use strategy instead)
policy MAX | LATEST | NEAREST
autoIncrementPatch true/false
useDistance true/false
useDirty true/false
useSnapshot true/false
failIfDirty true/false
useGitCommitTimestamp true/false
useGitCommitID true/false
gitCommitIDLength integer
maxDepth integer ( >= 0.7.0)
nonQualifierBranches string (comma separated list of branches)
versionPattern string (only for PATTERN strategy, >= 0.6.0)
tagVersionPattern string (only for PATTERN strategy >= 0.6.0)
policy { repeatable closure
pattern string (regexp with capturing group)
transformations array (array of string)
}
distanceCalculatorKind FIRST_PARENT | LOG | DEPTH
}
If you do not provide such a configuration (or fill only partial configuration) the following defaults will be used
CONFIGURABLE
false
MAX
true
true
false
false
false
false
false
8
Integer.MAX_VALUE
'master'
'Java regexp pattern'
FIRST_PARENT
Before 0.2.0
no configuration was possible.
The plugin used jgitver with the following settings:
false
true
'master'
true
false
Given the following configuration
jgitver {
policy {
pattern = 'feature_(.*)'
transformations = ['REMOVE_UNEXPECTED_CHARS', 'UPPERCASE']
}
policy {
pattern = '(master)'
transformations = ['IGNORE']
}
}
when on branch feature_login-page
, 3 commits after tag 1.0.0
then version resolution will be 1.0.1-3-LOGINPAGE
$ gradlew version
> Task :version
Version: 1.0.1-3-LOGINPAGE
Since 0.3.0
, jgitver Metadatas are exposed via gradle extension properties using the Metadata name in lower case.
For example, one could enhance it's jar Manifest with the git commit id using:
apply plugin: 'java'
apply plugin: 'fr.brouillard.oss.gradle.jgitver'
jar {
doFirst {
manifest {
manifest.attributes 'X-GIT-SHA1': "$project.ext.git_sha1_full"
}
}
}
When working on a detached HEAD, as often on CI environments behind a SCM webhook, no branch information exists anymore from git.
Since 0.4.1
it now possible to provide externally the branch information via a system property or an environment variable.
gradlew version -Djgitver.branch=mybranch
JGITVER_BRANCH=mybranch && gradlew version
export JGITVER_BRANCH=mybranch
gradlew version
SET JGITVER_BRANCH=mybranch
gradlew version
$ ./gradlew install version
will install the current version inside the local maven repository and will print the published versionbuild.gradle
file
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath "fr.brouillard.oss.gradle:gradle-jgitver-plugin:0.3.2"
}
}
apply plugin: 'fr.brouillard.oss.gradle.jgitver'
build.gradle
file with Maven like versioning
buildscript {
repositories {
mavenLocal()
}
dependencies {
classpath "fr.brouillard.oss.gradle:gradle-jgitver-plugin:0.3.2"
}
}
apply plugin: 'fr.brouillard.oss.gradle.jgitver'
jgitver {
mavenLike true
}
Some integration tests are available to make some manual trials/verifications of the plugin.
./gradlew install version
cd src/test/integration/test
./build.sh CONTEXT JGITVER_GRADLE_VERSION EXPECTED_COMPUTED_VERSION
# example ./build.sh tag-regexp 0.5.1-2 2.0.1-1
The easiest way to get started from Windows is to launch a docker container:
docker -v run --rm -it -v %CD%:/project -w /project adoptopenjdk/openjdk8 /bin/bash
$ apt-get update && apt-get install -y git
git tag -a -s -m "release X.Y.Z, additionnal reason" X.Y.Z
: tag the current HEAD with the given tag name. The tag is signed by the author of the release. Adapt with gpg key of maintainer.
git tag -a -s -u 2AB5F258 -m "release X.Y.Z, additionnal reason" X.Y.Z
./gradlew publishPlugins
git push --follow-tags origin master