mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
CICD: Improve Workflows.
Make multiple improvements to the existing workflows: - create a shared custom action to deal with version number tracking and generation; - use this action to add the branch name to the version for pull request builds; - create a shared workflow for all debian-ish builds to avoid re-use by copy / paste; - remove potential security risks by eliminating the use of pre-evaluated expressions (`${{ ... }}`) inside scripts; - update outdated GitHub action versions; - improve the consistency by renaming scripts acording to have a `.sh` extension; - improve naming of generated artefacts for pull requests to include the correct version. @dirkh: Unfortunately this is potentially going to break builds when it is merged, as there is no good way to 'test' a merge build short of merging. We'll just have to deal with the fallout of it in a follow-up pull request. Signed-off-by: Michael Keller <github@ike.ch>
This commit is contained in:
parent
e20ec9248c
commit
6fc8310705
32 changed files with 399 additions and 536 deletions
|
@ -9,7 +9,7 @@
|
|||
# To validate relevant files are up to date, you would run the script
|
||||
# from command line before tagging:
|
||||
#
|
||||
# $ scripts/check-version -cr <tag>
|
||||
# $ scripts/check-version.sh -cr <tag>
|
||||
|
||||
set -eu
|
||||
#set -x
|
|
@ -4,7 +4,7 @@
|
|||
# consistently name all builds, regardless of OS or desktop/mobile
|
||||
#
|
||||
# we do need to be able to create three digit (M.m.p) and four digit (M.m.p.c) version strings
|
||||
# default is VERSION_EXTENSION version - an argument of '4' or '3' gets you a digits only version string
|
||||
# default is VERSION_EXTENSION version - an argument of '1', '3', or '4' gets you a digits only version string
|
||||
#
|
||||
# we hardcode a base version - this will rarely change
|
||||
# (we actually haven't discussed a situation where it would change...)
|
||||
|
@ -16,19 +16,21 @@ croak() {
|
|||
exit 1
|
||||
}
|
||||
croak_usage() {
|
||||
croak "Usage: $0 [3|4]"
|
||||
croak "Usage: $0 [1|3|4]"
|
||||
}
|
||||
|
||||
if [[ $# -gt 1 ]] ; then croak_usage ; fi
|
||||
if [[ $# -eq 1 ]] ; then
|
||||
if [[ $1 != "4" && $1 != "3" ]] ; then croak_usage ; fi
|
||||
if [[ $1 != "1" && $1 != "3" && $1 != "4" ]] ; then croak_usage ; fi
|
||||
DIGITS="$1"
|
||||
fi
|
||||
|
||||
# figure out where we are in the file system
|
||||
cd "$(dirname "$0")/../"
|
||||
pushd "$(dirname "$0")/../" &> /dev/null
|
||||
export SUBSURFACE_SOURCE=$PWD
|
||||
|
||||
VERSION_EXTENSION="-"
|
||||
|
||||
# add the build number to this as 'patch' component
|
||||
# if we run in an environment where we are given a build number (e.g. CICD builds)
|
||||
# we just grab that - otherwise we have to figure it out on the fly
|
||||
|
@ -38,12 +40,12 @@ if [ ! -f latest-subsurface-buildnumber ] ; then
|
|||
# (b) we have the ability to check out another git repo
|
||||
# in situations where either of these isn't true, it's the caller's
|
||||
# responsibility to ensure that the latest-subsurface-buildnumber file exists
|
||||
if [ ! -d "$SUBSURFACE_SOURCE/nightly-builds" ] ; then
|
||||
if [ ! -d "nightly-builds" ] ; then
|
||||
git clone https://github.com/subsurface/nightly-builds &> /dev/null || croak "failed to clone nightly-builds repo"
|
||||
fi
|
||||
cd nightly-builds
|
||||
pushd nightly-builds &> /dev/null
|
||||
git fetch &> /dev/null
|
||||
LAST_BUILD_BRANCHES=$(git branch -a --sort=-committerdate --list | grep remotes/origin/branch-for | head -50 | cut -d/ -f3)
|
||||
LAST_BUILD_BRANCHES=$(git branch -a --sort=-committerdate --list | grep remotes/origin/branch-for | cut -d/ -f3)
|
||||
for LAST_BUILD_BRANCH in $LAST_BUILD_BRANCHES "not-found" ; do
|
||||
LAST_BUILD_SHA=$(cut -d- -f 3 <<< "$LAST_BUILD_BRANCH")
|
||||
git -C "$SUBSURFACE_SOURCE" merge-base --is-ancestor "$LAST_BUILD_SHA" HEAD && break
|
||||
|
@ -51,30 +53,33 @@ if [ ! -f latest-subsurface-buildnumber ] ; then
|
|||
[ "not-found" = "$LAST_BUILD_BRANCH" ] && croak "can't find a build number for the current working tree"
|
||||
git checkout "$LAST_BUILD_BRANCH" &> /dev/null || croak "failed to check out $LAST_BUILD_BRANCH in nightly-builds"
|
||||
BUILDNR=$(<./latest-subsurface-buildnumber)
|
||||
cd "$SUBSURFACE_SOURCE"
|
||||
VERSION_EXTENSION="-"
|
||||
popd &> /dev/null
|
||||
VERSION_EXTENSION+=$(git log --pretty="oneline" "${LAST_BUILD_SHA}...HEAD" | wc -l | tr -d '[:space:]')
|
||||
VERSION_EXTENSION+="-"
|
||||
[ "$VERSION_EXTENSION" = "-0-" ] && VERSION_EXTENSION="-"
|
||||
VERSION_EXTENSION+="local"
|
||||
else
|
||||
# use the files included with the sources
|
||||
BUILDNR=$(<"$SUBSURFACE_SOURCE/latest-subsurface-buildnumber")
|
||||
VERSION_EXTENSION=""
|
||||
if [ -f "$SUBSURFACE_SOURCE/latest-subsurface-buildnumber-extension" ] ; then
|
||||
VERSION_EXTENSION="-"
|
||||
VERSION_EXTENSION+=$(<"$SUBSURFACE_SOURCE/latest-subsurface-buildnumber-extension")
|
||||
fi
|
||||
BUILDNR=$(<"latest-subsurface-buildnumber")
|
||||
fi
|
||||
|
||||
if [ -f "latest-subsurface-buildnumber-extension" ] ; then
|
||||
VERSION_EXTENSION+=$(<"latest-subsurface-buildnumber-extension")
|
||||
else
|
||||
VERSION_EXTENSION+="local"
|
||||
fi
|
||||
|
||||
COMMITS_SINCE=$(tr -cd "[:digit:]" <<<"$VERSION_EXTENSION")
|
||||
[[ -z $COMMITS_SINCE ]] && COMMITS_SINCE="0"
|
||||
|
||||
if [[ $DIGITS == "3" ]] ; then
|
||||
if [[ $DIGITS == "1" ]] ; then
|
||||
VERSION="${BUILDNR}"
|
||||
elif [[ $DIGITS == "3" ]] ; then
|
||||
VERSION="${SUBSURFACE_BASE_VERSION}.${BUILDNR}"
|
||||
elif [[ $DIGITS == "4" ]] ; then
|
||||
VERSION="${SUBSURFACE_BASE_VERSION}.${BUILDNR}.${COMMITS_SINCE}"
|
||||
else
|
||||
VERSION="${SUBSURFACE_BASE_VERSION}.${BUILDNR}${VERSION_EXTENSION}"
|
||||
fi
|
||||
|
||||
printf '%s' "$VERSION"
|
||||
|
||||
popd &> /dev/null
|
Loading…
Add table
Add a link
Reference in a new issue