spiegel-keyman/resources/build/increment-version.sh
2021-03-22 15:42:39 +11:00

181 lines
4.8 KiB
Bash
Executable file

#!/bin/bash
set -e
set -u
#
# Usage: increment-version.sh [-f] [commit base]
#
# Increments the patch version on VERSION.md
#
# If -f is specified, triggers a build even with
# no detected changes.
#
# If commit is specified, pushes the new version
# to the repository. base snould be either
# master or beta.
#
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null || readlink -f "${BASH_SOURCE[0]}")"
. "$(dirname "$THIS_SCRIPT")/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE
. "$(dirname "$THIS_SCRIPT")/trigger-definitions.inc.sh"
. "$(dirname "$THIS_SCRIPT")/trigger-builds.inc.sh"
. "$(dirname "$THIS_SCRIPT")/sentry-control.inc.sh"
gitbranch=`git branch --show-current`
FORCE=0
HISTORY_FORCE=
if [[ "$1" == "-f" ]]; then
FORCE=1
HISTORY_FORCE=--force
shift
fi
if [[ $# -gt 0 ]]; then
# We want the action to specify the branch as a consistency check
# for now at least.
action=$1
if [[ $# -gt 1 ]]; then
base=$2
else
action=help
fi
if [[ $action == commit ]]; then
if [ "$base" != "master" ] && [ "$base" != "beta" ] && [[ ! "$base" =~ ^stable-[0-9]+\.[0-9]+$ ]]; then
echo "Invalid branch $base specified: must be master, beta, or stable-x.y."
exit 1
fi
if [ "$base" != "$gitbranch" ]; then
echo "Branch doesn't match currently checked out branch."
exit 2
fi
fi
else
action="increment"
base="$gitbranch"
fi
if [[ $action == help ]]; then
echo "Usage: increment-version.sh [-f] [commit base]"
echo " -f forces a build even with no changes"
echo " base must be either master, beta or stable-x.y."
echo " base must be equal to currently checked-out"
echo " branch (this may not be required in future)"
exit 1
fi
# Let's ensure our base is up to date with GitHub to
# avoid transient errors
git pull origin $base
#
# Run the increment + history refresh
#
pushd "$KEYMAN_ROOT/resources/build/version" > /dev/null
npm install
npm run build:ts
popd > /dev/null
pushd "$KEYMAN_ROOT" > /dev/null
ABORT=0
node resources/build/version/lib/index.js history version -t "$GITHUB_TOKEN" -b "$base" $HISTORY_FORCE || ABORT=$?
if [[ $ABORT = 1 ]]; then
if [[ $FORCE = 0 ]]; then
echo "Skipping version increment from $VERSION: no recently merged pull requests were found"
if [ ! -z "${TEAMCITY_VERSION-}" ]; then
# Send TeamCity a build status
echo "##teamcity[buildStatus status='SUCCESS' text='Skipping version increment from $VERSION: no recently merged pull requests were found']"
fi
exit 0
else
echo "Force specified; building even though no changes were detected"
fi
elif [[ $ABORT != 0 ]]; then
echo "Failed to complete version history check"
exit $ABORT
fi
popd > /dev/null
#
# Push the result
#
if [ "$action" == "commit" ]; then
VERSION_MD="$KEYMAN_ROOT/VERSION.md"
NEWVERSION=`cat $VERSION_MD | tr -d "[:space:]"`
pushd "$KEYMAN_ROOT" > /dev/null
message="auto: increment $base version to $NEWVERSION"
branch="auto/version-$base-$NEWVERSION"
git tag -a "release-$VERSION_WITH_TAG" -m "Keyman release $VERSION_WITH_TAG"
git checkout -b "$branch"
git add VERSION.md HISTORY.md
# Also updates package versions, committing those changes
# Uses the 'version' run script defined in the base package.json.
npm install
npm run version -- "$NEWVERSION"
# Version info will be updated in lerna.json and all the lerna-managed package.json files.
git add lerna.json
# Iterates through all lerna-managed packages in serial mode (--concurrency 1),
# git-adding only the updated package.json and package-lock.json files.
npm run lerna -- exec --concurrency 1 -- git add package.json package-lock.json
# Now that all version-related changes are ready and git-added, it's time to commit.
git commit -m "$message"
git push --tags origin "$branch"
git checkout $base
#
# Tell Sentry about this (previous version)
#
makeSentryRelease
popd > /dev/null
#
# Trigger builds for the previous version on TeamCity and Jenkins
#
triggerBuilds
#
# Now, create the PR on GitHub which will be merged when ready
#
cd "$KEYMAN_ROOT"
git checkout "$branch"
hub pull-request -f --no-edit -b $base -l auto
#
# Done
#
echo "Version was incremented and pull request was created, and builds were triggered"
if [ ! -z "${TEAMCITY_VERSION-}" ]; then
# Send TeamCity a build status
echo "##teamcity[buildStatus status='SUCCESS' text='Version was incremented from $VERSION to $NEWVERSION and pull request was created']"
fi
#
# After this script finishes in CI, we will be pushing the new history to
# downloads.keyman.com, so we need to finish with the branch here that has the
# latest history in it. We don't need to cleanup the branch because the CI will
# do that for us.
#
fi
exit 0