77 lines
3.2 KiB
Bash
Executable File
77 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Refreshes deploy/game-stack.lock to upstream's newest builds, hashed.
|
|
#
|
|
# bash deploy/update-game-stack-lock.sh # rewrite the lock in place
|
|
# bash deploy/update-game-stack-lock.sh --check # exit 1 if upstream moved on
|
|
#
|
|
# It runs the same resolver bootstrap.sh uses for FELIS_GAME_STACK=latest (the functions are
|
|
# lifted out of bootstrap.sh, so the two cannot drift), then pins Velocity's newest build of
|
|
# VELOCITY_LATEST_MINOR. Limbo and LuckPerms publish no digest, so their jars are downloaded
|
|
# and hashed here; Paper and Velocity come from Fill's content-addressed URLs.
|
|
#
|
|
# Review the diff before committing: MC_VERSION moves the login gate's protocol, and the
|
|
# lobby, plain-Paper image and every client follow it. The plugins compile against these
|
|
# same builds (paper-api, the Limbo API, velocity-api) with their checksums pinned in
|
|
# plugins/*/gradle/verification-metadata.xml, so a moved build also moves those; go test .
|
|
# names what is left to bring along.
|
|
set -Eeuo pipefail
|
|
|
|
here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
BS="${here}/bootstrap.sh"
|
|
LOCK="${here}/game-stack.lock"
|
|
check=0
|
|
case "${1:-}" in
|
|
--check) check=1 ;;
|
|
"") ;;
|
|
*) printf 'usage: %s [--check]\n' "$0" >&2; exit 2 ;;
|
|
esac
|
|
|
|
log() { printf '[lock] %s\n' "$*" >&2; }
|
|
ok() { printf '[ ok ] %s\n' "$*" >&2; }
|
|
warn() { :; }
|
|
die() { printf '[fail] %s\n' "$*" >&2; exit 1; }
|
|
|
|
lift() { # function-name
|
|
local body
|
|
body="$(awk -v f="$1" '$0 ~ "^" f "\\(\\) \\{" {on=1} on {print} on && /^}/ {exit}' "$BS")"
|
|
[ -n "$body" ] || die "bootstrap.sh no longer defines $1"
|
|
eval "$body"
|
|
}
|
|
for fn in meta_get papermc_latest_jar luckperms_latest_jar url_sha256 resolve_latest_game_jars; do
|
|
lift "$fn"
|
|
done
|
|
eval "$(grep '^VELOCITY_LATEST_MINOR=' "$BS")"
|
|
[ -n "${VELOCITY_LATEST_MINOR:-}" ] || die "bootstrap.sh no longer sets VELOCITY_LATEST_MINOR"
|
|
|
|
resolve_latest_game_jars
|
|
log "resolving the newest Velocity ${VELOCITY_LATEST_MINOR} build"
|
|
velocity="$(papermc_latest_jar velocity "$VELOCITY_LATEST_MINOR")" \
|
|
|| die "no Velocity build for ${VELOCITY_LATEST_MINOR}"
|
|
# shellcheck disable=SC2034 # read back through ${!key} below
|
|
VELOCITY_VERSION="$VELOCITY_LATEST_MINOR"
|
|
# shellcheck disable=SC2034
|
|
VELOCITY_JAR_URL="${velocity% *}"
|
|
# shellcheck disable=SC2034
|
|
VELOCITY_JAR_SHA256="${velocity##* }"
|
|
|
|
tmp="$(mktemp)"
|
|
trap 'rm -f "$tmp"' EXIT
|
|
# The comment header is kept as it is; only the KEY=value lines are regenerated.
|
|
sed -n '/^#/p;/^#/!q' "$LOCK" > "$tmp"
|
|
for key in MC_VERSION LIMBO_VERSION LIMBO_JAR_URL LIMBO_JAR_SHA256 LIMBO_SCHEM_URL LIMBO_SCHEM_SHA256 \
|
|
PAPER_JAR_URL PAPER_JAR_SHA256 LUCKPERMS_JAR_URL LUCKPERMS_JAR_SHA256 \
|
|
VELOCITY_VERSION VELOCITY_JAR_URL VELOCITY_JAR_SHA256; do
|
|
printf '%s=%s\n' "$key" "${!key}" >> "$tmp"
|
|
done
|
|
|
|
if cmp -s "$tmp" "$LOCK"; then
|
|
ok "game-stack.lock already pins upstream's newest builds"
|
|
exit 0
|
|
fi
|
|
diff -u "$LOCK" "$tmp" >&2 || true
|
|
if [ "$check" = 1 ]; then
|
|
die "upstream has newer builds than game-stack.lock"
|
|
fi
|
|
cp "$tmp" "$LOCK"
|
|
ok "game-stack.lock updated; move plugins/paper's paper-api pin to the new Paper build and regenerate the plugins' gradle/verification-metadata.xml (plugins/README.md \"Dependency verification\"), run go test . and the bootstrap tests, then commit"
|