Files
Franklin Yu ff7e56438b Track version number for next release in file
Only major and minor version numbers. Patch numbers remains calculated.

The trick to get current directory only works in Bash or Zsh. See:
https://stackoverflow.com/questions/9901210/bash-source0-equivalent-in-zsh#54755784

Note that "$0" won't work since the script is sourced, not executed.
2020-02-20 22:33:16 -08:00

54 lines
2.2 KiB
Bash

# First, check for git in $PATH
hash git 2>/dev/null || { echo >&2 "Git required, not installed. Aborting build number update script."; exit 0; }
# Build version (closest-tag-or-branch "-" commits-since-tag "-" short-hash dirty-flag)
function get_build_version() {
echo $(git describe --tags --always --dirty=+)
}
# Use the latest tag for short version (expected tag format "vn[.n[.n]]")
# or if there are no tags, we make up version 0.0.<commit count>
function get_short_version() {
LATEST_TAG=$(git describe --tags --match 'v*' --abbrev=0 2>/dev/null) || LATEST_TAG="HEAD"
if [ $LATEST_TAG = "HEAD" ]; then
COMMIT_COUNT=$(git rev-list --count HEAD)
LATEST_TAG="0.0.$COMMIT_COUNT"
COMMIT_COUNT_SINCE_TAG=0
else
COMMIT_COUNT_SINCE_TAG=$(git rev-list --count ${LATEST_TAG}..)
LATEST_TAG=${LATEST_TAG##v} # Remove the "v" from the front of the tag
fi
if [ $COMMIT_COUNT_SINCE_TAG = 0 ]; then
SHORT_VERSION="$LATEST_TAG"
else
local tools_dir=$(dirname "${BASH_SOURCE[0]:-${(%):-%x}}")
local next_version=$(cat "$tools_dir/version.txt")
SHORT_VERSION="${next_version}d${COMMIT_COUNT_SINCE_TAG}"
fi
echo $SHORT_VERSION
}
# Bundle version (commits-on-master[-until-branch "." commits-on-branch])
# Assumes that two release branches will not diverge from the same commit on master.
function get_bundle_version() {
if [ $(git rev-parse --abbrev-ref HEAD) = "master" ]; then
MASTER_COMMIT_COUNT=$(git rev-list --count HEAD)
BRANCH_COMMIT_COUNT=0
BUNDLE_VERSION="$MASTER_COMMIT_COUNT"
else
if [ $(git rev-list --count master..) = 0 ]; then # The branch is attached to master. Just count master.
MASTER_COMMIT_COUNT=$(git rev-list --count HEAD)
else
MASTER_COMMIT_COUNT=$(git rev-list --count $(git rev-list master.. | tail -n 1)^)
fi
BRANCH_COMMIT_COUNT=$(git rev-list --count master..)
if [ $BRANCH_COMMIT_COUNT = 0 ]; then
BUNDLE_VERSION="$MASTER_COMMIT_COUNT"
else
BUNDLE_VERSION="${MASTER_COMMIT_COUNT}.${BRANCH_COMMIT_COUNT}"
fi
fi
echo $BUNDLE_VERSION
}