subsurface/scripts/check-version.sh
=Michael Keller 6fc8310705 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>
2024-05-13 10:19:59 +12:00

95 lines
1.4 KiB
Bash
Executable file

#!/bin/sh
# $1 - version string
# options:
# -c colored grep (implies -d)
# -d debug
# -r release (exit status error; when called from Makefile)
# To validate relevant files are up to date, you would run the script
# from command line before tagging:
#
# $ scripts/check-version.sh -cr <tag>
set -eu
#set -x
# You would typically add/remove files to/from the list
files="Documentation/user-manual.txt Makefile README.md ReleaseNotes/ReleaseNotes.txt"
whine() {
echo "$0: $*" >&2
}
croak() {
whine "$*"
exit 1
}
color=n
debug=n
release=n
while getopts cdr opt; do
case $opt in
c)
color=y
debug=y
;;
d)
debug=y
;;
r)
release=y
;;
*)
croak "invalid option"
;;
esac
done
shift $(($OPTIND - 1))
if [ $debug = y ]; then
opts=-n
else
opts=-q
fi
[ $color = n ] || opts="${opts:+$opts }--color"
v=${1:-}
v=${v#v}
case $v in
*-*)
# Ignore development versions
if [ $release = y ]; then
croak "'$v' not a release tag"
else
exit 0
fi
;;
''|*[!.0-9]*)
croak "invalid version string '$v'"
;;
esac
whine "checking for version $v"
saveIFS=$IFS
IFS=.
set -- $v
IFS=$saveIFS
v=
while [ $# -gt 0 ]; do
v=${v:+$v\\.}$1
shift
done
sts=0
for f in $files; do
grep -EH $opts \
-e "(VERSION=|[Ss]ubsurface[[:blank:]]+)?\<v?$v[.0-9]*\>" \
$f || {
[ $release != y ] || sts=1
whine "'$f' may need updating"
}
done
exit $sts