mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-28 10:41:12 +00:00
The extant logic for deriving the value of SCYLLA_RELEASE from the source tree has those assumptions: * The tree being built includes Git metadata. * The value of `date` is trustworthy and interesting. * There are no uncommitted changes (those relevant to building, anyway). The above assumptions are either irrelevant or problematic in pure build environments (such as the sandbox set up by `nix-build`): * Pure builds use cleaned-up sources with all timestamps reset to Unix time 0. Those cleaned-up sources are saved (in the Nix store, for example) and content-hashed, so leaving the (possibly huge) Git metadata increases the time to copy the sources and wastes disk space (in fact, Nix in flake mode strips `.git` unconditionally). * Pure builds run in a sandbox where time is, likewise, reset to Unix time 0, so the output of `date` is neither informative nor useful. Now, the only build step that uses Git metadata in the first place is the SCYLLA_RELEASE value derivation logic. So, essentially, answering the question "is the Git metadata needed to build Scylla" is a matter of definition, and is up to us. If we elect to ignore Git metadata and current time, we can derive SCYLLA_RELEASE value from the content hash of the cleaned-up tree, regardless of the way that tree was arrived at. This change makes it possible to skip the derivation of SCYLLA_RELEASE value from Git metadata and current time by way of setting SCYLLA_RELEASE in the environment. Signed-off-by: Michael Livshin <michael.livshin@scylladb.com>
110 lines
2.7 KiB
Bash
Executable File
110 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
USAGE=$(cat <<-END
|
|
Usage: $(basename "$0") [-h|--help] [-o|--output-dir PATH] [--date-stamp DATE] -- generate Scylla version and build information files.
|
|
|
|
Options:
|
|
-h|--help show this help message.
|
|
-o|--output-dir PATH specify destination path at which the version files are to be created.
|
|
-d|--date-stamp DATE manually set date for release parameter
|
|
|
|
By default, the script will attempt to parse 'version' file
|
|
in the current directory, which should contain a string of
|
|
'\$version-\$release' form.
|
|
|
|
Otherwise, it will call 'git log' on the source tree (the
|
|
directory, which contains the script) to obtain current
|
|
commit hash and use it for building the version and release
|
|
strings.
|
|
|
|
The script assumes that it's called from the Scylla source
|
|
tree.
|
|
|
|
The files created are:
|
|
SCYLLA-VERSION-FILE
|
|
SCYLLA-RELEASE-FILE
|
|
SCYLLA-PRODUCT-FILE
|
|
|
|
By default, these files are created in the 'build'
|
|
subdirectory under the directory containing the script.
|
|
The destination directory can be overriden by
|
|
using '-o PATH' option.
|
|
END
|
|
)
|
|
|
|
DATE=""
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
opt="$1"
|
|
case $opt in
|
|
-h|--help)
|
|
echo "$USAGE"
|
|
exit 0
|
|
;;
|
|
-o|--output-dir)
|
|
OUTPUT_DIR="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
--date-stamp)
|
|
DATE="$2"
|
|
shift
|
|
shift
|
|
;;
|
|
*)
|
|
echo "Unexpected argument found: $1"
|
|
echo
|
|
echo "$USAGE"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
SCRIPT_DIR="$(dirname "$0")"
|
|
|
|
if [ -z "$OUTPUT_DIR" ]; then
|
|
OUTPUT_DIR="$SCRIPT_DIR/build"
|
|
fi
|
|
|
|
if [ -z "$DATE" ]; then
|
|
DATE=$(date --utc +%Y%m%d)
|
|
fi
|
|
|
|
# Default scylla product/version tags
|
|
PRODUCT=scylla
|
|
VERSION=5.2.0-dev
|
|
|
|
if test -f version
|
|
then
|
|
SCYLLA_VERSION=$(cat version | awk -F'-' '{print $1}')
|
|
SCYLLA_RELEASE=$(cat version | awk -F'-' '{print $2}')
|
|
else
|
|
SCYLLA_VERSION=$VERSION
|
|
if [ -z "$SCYLLA_RELEASE" ]; then
|
|
DATE=$(date --utc +%Y%m%d)
|
|
GIT_COMMIT=$(git -C "$SCRIPT_DIR" log --pretty=format:'%h' -n 1 --abbrev=12)
|
|
# For custom package builds, replace "0" with "counter.your_name",
|
|
# where counter starts at 1 and increments for successive versions.
|
|
# This ensures that the package manager will select your custom
|
|
# package over the standard release.
|
|
SCYLLA_BUILD=0
|
|
SCYLLA_RELEASE=$SCYLLA_BUILD.$DATE.$GIT_COMMIT
|
|
elif [ -f "$OUTPUT_DIR/SCYLLA-RELEASE-FILE" ]; then
|
|
echo "setting SCYLLA_RELEASE only makes sense in clean builds" 1>&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ -f "$OUTPUT_DIR/SCYLLA-RELEASE-FILE" ]; then
|
|
GIT_COMMIT_FILE=$(cat "$OUTPUT_DIR/SCYLLA-RELEASE-FILE" |cut -d . -f 3)
|
|
if [ "$GIT_COMMIT" = "$GIT_COMMIT_FILE" ]; then
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
echo "$SCYLLA_VERSION-$SCYLLA_RELEASE"
|
|
mkdir -p "$OUTPUT_DIR"
|
|
echo "$SCYLLA_VERSION" > "$OUTPUT_DIR/SCYLLA-VERSION-FILE"
|
|
echo "$SCYLLA_RELEASE" > "$OUTPUT_DIR/SCYLLA-RELEASE-FILE"
|
|
echo "$PRODUCT" > "$OUTPUT_DIR/SCYLLA-PRODUCT-FILE"
|