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
- strategy:
CONFIGURABLE
- mavenLike:
false
- policy:
MAX
- autoIncrementPatch:
true
- useDistance:
true
- useDirty:
false
- useSnapshot:
false
- failIfDirty:
false
- useGitCommitTimestamp:
false
- useGitCommitID:
false
- gitCommitIDLength:
8
- maxDepth:
Integer.MAX_VALUE
- nonQualifierBranches:
'master'
- versionPattern: no default value
- tagVersionPattern: no default value
- regexVersionTag:
'Java regexp pattern'
- distanceCalculatorKind:
FIRST_PARENT
Before 0.2.0
no configuration was possible.
The plugin used jgitver with the following settings:
- mavenLike:
false
- autoIncrementPatch:
true
- nonQualifierBranches:
'master'
- useDistance:
true
- useGitCommitId:
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.
- all operating systems/shells:
gradlew version -Djgitver.branch=mybranch
- bash only (zsh?) one line:
JGITVER_BRANCH=mybranch && gradlew version
- *nix shell:
export JGITVER_BRANCH=mybranch
gradlew version
- windows:
SET JGITVER_BRANCH=mybranch
gradlew version
$ ./gradlew install version
will install the current version inside the local maven repository and will print the published version- minimal test project
build.gradle
filebuildscript { repositories { mavenLocal() } dependencies { classpath "fr.brouillard.oss.gradle:gradle-jgitver-plugin:0.3.2" } } apply plugin: 'fr.brouillard.oss.gradle.jgitver'
- test project
build.gradle
file with Maven like versioningbuildscript { 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.- Matthieu Brouillard command:
git tag -a -s -u 2AB5F258 -m "release X.Y.Z, additionnal reason" X.Y.Z
- Matthieu Brouillard public key
- Matthieu Brouillard command:
./gradlew publishPlugins
git push --follow-tags origin master