#!/usr/bin/env sh set -e get_changes_hash() { # We use this to determine if there are any new additions local GIT_STATUS="$(git status --porcelain)" # To determine if there are any changes local GIT_DIFF_INDEX="$(git diff-index -p HEAD --)" # Whether anything changed in the repo export GIT_DIRTY="$GIT_STATUS$GIT_DIFF_INDEX" if [ -n "$GIT_DIRTY" ]; then DIRTY_HASH_SHORT="$(echo $GIT_DIRTY | sha256sum | awk '{print $1}' | tail -c 9)" echo -dirty-$DIRTY_HASH_SHORT else echo '' fi } get_main_version() { # Get the branch name local GIT_BRANCH="$(git rev-parse --abbrev-ref HEAD)" # Get the current commit id local COMMIT_HASH_SHORT="$(git rev-parse --short HEAD)" case "$GIT_BRANCH" in # The master branch 'master') echo $COMMIT_HASH_SHORT;; # The release branches release-*) local RELEASE_VER="$(git describe --match "v[0-9]*" HEAD 2>/dev/null)" test -n "$RELEASE_VER" || RELEASE_VER="$(expr "$GIT_BRANCH" : release-*'\(.*\)')"-$COMMIT_HASH_SHORT echo $RELEASE_VER;; # Everything else *) echo $GIT_BRANCH-$COMMIT_HASH_SHORT;; esac } echo "$(get_main_version)$(get_changes_hash)"