Skip to content

Instantly share code, notes, and snippets.

@StefanHeimberg
Last active September 18, 2021 22:08
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save StefanHeimberg/c19d7665e8df087845c036fe8b88c4f2 to your computer and use it in GitHub Desktop.
Script to generate semver version.txt from maven and git. Can be used in CI such as Bamboo or Jenkins
#!/usr/bin/env bash
# author: Stefan Heimberg <kontakt@stefanheimberg.ch>
# download url: https://gist.github.com/StefanHeimberg/c19d7665e8df087845c036fe8b88c4f2
# version: 0.7
# usage:
# for maven based projects:
# - ./generate_version_txt.sh
# - ./generate_version_txt.sh <BUILD_NR_FROM_CI>
#
# for other projects:
# - ./generate_version_txt.sh <MAJOR.MINOR.PATCH> <BUILD_NR_FROM_CI>
set -e
# Das Script nimmt einen Parameter entgegen. Die Build nummer des CI Builds.
# Diese Buildnummer füge ich in diesem Script nicht wie auf semver.org in den build metadaten ein (separiert mit '+'),
# sondern als label (separiert mit '-'). Grund hierfür ist dass ich die build nummer auch im docker tag verwenden möchte.
# und dort ist '+' nicht erlaubt. (https://github.com/docker/distribution/issues/1201)
version_file="version.txt"
if [ -f ${version_file} ]; then
rm ${version_file}
fi
if [ -f pom.xml ]; then
# verify that mvn executable exists.
if [ -f ./mvnw ]; then
# use maven wrapper
mvn_exec=./mvnw
else
# use maven without wrapper
mvn_exec=mvn
fi
temp_file=$(mktemp)
${mvn_exec} -N org.apache.maven.plugins:maven-help-plugin:3.0.1:evaluate -Dexpression=project.version -Doutput=${temp_file}
temp_version=`cat ${temp_file}`
temp_version=${temp_version%-SNAPSHOT}
rm ${temp_file}
else
temp_version=$1
fi
major_version=`echo $temp_version | cut -d. -f1`
if [ -z "$major_version" ]; then
major_version=0
fi
minor_version=`echo $temp_version | cut -d. -f2`
if [ -z "$minor_version" ]; then
minor_version=0
fi
patch_version=`echo $temp_version | cut -d. -f3`
if [ -z "$patch_version" ]; then
patch_version=0
fi
if [ -f pom.xml ]; then
build_number=$1
else
build_number=$2
fi
label=""
if [ ! -z "$build_number" ]; then
label="b$build_number"
fi
build_metadata=""
if [ -d .git ]; then
git_sha_short=$(git rev-parse --short HEAD)
if [ ! -z "$build_metadata" ]; then
build_metadata="$build_metadata."
fi
build_metadata="$build_metadata$git_sha_short"
fi
version="$major_version.$minor_version.$patch_version"
if [ ! -z "$label" ]; then
version="$version-$label"
fi
long_version="$version"
if [ ! -z "$build_metadata" ]; then
long_version="$long_version+$build_metadata"
fi
if [ -f $version_file ]; then
rm $version_file
fi
echo "major_version=$major_version" >> $version_file
echo "minor_version=$minor_version" >> $version_file
echo "patch_version=$patch_version" >> $version_file
echo "build_number=$build_number" >> $version_file
echo "build_metadata=$build_metadata" >> $version_file
echo "version=$version" >> $version_file
echo "long_version=$long_version" >> $version_file
cat $version_file
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment