58 lines
2.1 KiB
Bash
Executable File
58 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Do the standalone scripts still install what rig pins?
|
|
#
|
|
# standalone/rigdeps.sh carries its toolchain pins inline, because it exists for
|
|
# a machine that will never have ctrl/versions.env. That makes two copies of the
|
|
# same versions and checksums, and two copies drift the day one is edited and
|
|
# the other forgotten. This is the check that notices.
|
|
#
|
|
# ctrl/versions.env is the source of truth. Only the keys rigdeps.sh itself
|
|
# defines are compared: versions.env also pins addon images (cert-manager,
|
|
# metallb, metrics-server) that rigdeps.sh never installs, and demanding those
|
|
# would make this fail forever for no reason.
|
|
#
|
|
# Exits non-zero on any mismatch — unlike the host checks, this one is a test.
|
|
#
|
|
# Usage: pins.sh
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")"
|
|
|
|
SOURCE=./versions.env
|
|
COPY=../standalone/rigdeps.sh
|
|
|
|
[ -r "$COPY" ] || { echo "no $COPY to compare" >&2; exit 1; }
|
|
|
|
# KEY=value for the pin keys a file defines, quotes stripped. awk rather than a
|
|
# grep regex, which is not the same program everywhere.
|
|
pins() {
|
|
awk -F= '/^[A-Z_]+_(VERSION|SHA256)=/ {
|
|
v = substr($0, index($0, "=") + 1); gsub(/^["\x27]|["\x27]$/, "", v)
|
|
print $1 "=" v }' "$1"
|
|
}
|
|
|
|
echo "pins: standalone/rigdeps.sh against ctrl/versions.env"
|
|
bad=0
|
|
while IFS='=' read -r key copy_val; do
|
|
[ -n "$key" ] || continue
|
|
src_val=$(pins "$SOURCE" | sed -n "s/^${key}=//p" | head -1)
|
|
if [ -z "$src_val" ]; then
|
|
printf " ! %-16s in rigdeps.sh but not in versions.env\n" "$key"
|
|
bad=1
|
|
elif [ "$src_val" = "$copy_val" ]; then
|
|
printf " %-16s %s\n" "$key" "$( [ ${#src_val} -gt 20 ] && echo "${src_val:0:12}…" || echo "$src_val" )"
|
|
else
|
|
printf " ! %-16s versions.env %s\n" "$key" "$src_val"
|
|
printf " %-16s rigdeps.sh %s\n" "" "$copy_val"
|
|
bad=1
|
|
fi
|
|
done < <(pins "$COPY")
|
|
|
|
echo
|
|
if [ "$bad" -eq 0 ]; then
|
|
echo "in step — rigdeps.sh installs exactly what rig pins."
|
|
else
|
|
echo "DRIFT. versions.env is the source of truth: copy the differing lines from it"
|
|
echo "into standalone/rigdeps.sh, taking checksums from the publisher's release list."
|
|
exit 1
|
|
fi
|