From c02226cb661f2f26ee4d5a11e2fcf76199836b2f Mon Sep 17 00:00:00 2001 From: codex-bot-andresmgsl <244098813+codex-bot-andresmgsl@users.noreply.github.com> Date: Fri, 24 Jul 2026 00:39:24 +0000 Subject: [PATCH] fix: propagate pinned box ref --- commands/bootstrap.sh | 4 ++-- test/cli.sh | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/commands/bootstrap.sh b/commands/bootstrap.sh index f4a7013..e310b2f 100755 --- a/commands/bootstrap.sh +++ b/commands/bootstrap.sh @@ -690,7 +690,7 @@ if [ "$HOST" = "yes" ]; then BOX_REPO="${BOX_REPO:-heavy-duty/box}" BOX_REF="${BOX_REF:-$BOX_RELEASE}" BOX_INSTALL_URL="https://raw.githubusercontent.com/${BOX_REPO}/${BOX_REF}/install.sh" - BOX_MANUAL="curl -fsSL ${BOX_INSTALL_URL} | BOX_YES=1 bash" + BOX_MANUAL="curl -fsSL ${BOX_INSTALL_URL} | BOX_YES=1 BOX_REF=${BOX_REF} bash" if [ "${RIG_SKIP_BOX_INSTALL:-}" = "1" ]; then log "RIG_SKIP_BOX_INSTALL=1 — skipping box install; to prepare Incus by hand later: ${BOX_MANUAL}" elif ! command -v curl >/dev/null 2>&1; then @@ -704,7 +704,7 @@ if [ "$HOST" = "yes" ]; then # A curl failure (no network) fails the pipe under pipefail and lands in the # else — a warning, never an abort: box is the host extra, the OS+tailnet core # is already done. - if curl -fsSL "$BOX_INSTALL_URL" | BOX_YES=1 bash; then + if curl -fsSL "$BOX_INSTALL_URL" | BOX_YES=1 BOX_REF="$BOX_REF" bash; then # Don't trust the exit code — prove the effective state (issue #12). An # installer can exit 0 having done less than it claims: box's setup-host # is written for a sudo-capable user, and one of its paths exits 0 after diff --git a/test/cli.sh b/test/cli.sh index 1c2a5e6..5c61692 100644 --- a/test/cli.sh +++ b/test/cli.sh @@ -165,8 +165,9 @@ check "bootstrap: box install is guarded on host=yes" 0 "" \ grep -qxE 'if \[ "\$HOST" = "yes" \]; then' "$ROOT/commands/bootstrap.sh" # It runs box's OWN global installer with BOX_YES=1 (non-interactive AND keeps # setup-host, so box builds Incus rather than only dropping the CLI on PATH). +# shellcheck disable=SC2016 check "bootstrap: box install runs box's installer non-interactively" 0 "" \ - grep -q "BOX_YES=1 bash" "$ROOT/commands/bootstrap.sh" + grep -q 'BOX_YES=1 BOX_REF="$BOX_REF" bash' "$ROOT/commands/bootstrap.sh" # The default is a released semver pin carried in rig's tree, never a moving # branch. BOX_REF remains an override so explicit main and release-branch refs # still work for development and pre-release drills. @@ -176,6 +177,15 @@ check "bootstrap: box default is a released semver pin, not a moving ref" 0 "" \ # shellcheck disable=SC2016 check "bootstrap: BOX_REF overrides the released default" 0 "" \ grep -qF 'BOX_REF="${BOX_REF:-$BOX_RELEASE}"' "$ROOT/commands/bootstrap.sh" +# Fetching the installer at BOX_REF is only the first pin: box's installer +# independently resolves what it installs, so the ref must cross the pipe too. +# shellcheck disable=SC2016 +check "bootstrap: box install passes BOX_REF through the installer pipe" 0 "" \ + grep -qF 'BOX_YES=1 BOX_REF="$BOX_REF" bash' "$ROOT/commands/bootstrap.sh" +# The same pinned command is operators' recovery path on every skip/failure. +# shellcheck disable=SC2016 +check "bootstrap: manual box install carries the pinned ref" 0 "" \ + grep -qF 'BOX_YES=1 BOX_REF=${BOX_REF} bash' "$ROOT/commands/bootstrap.sh" check "bootstrap: box repository remains pinnable" 0 "" \ grep -qF 'BOX_REPO:-heavy-duty/box' "$ROOT/commands/bootstrap.sh" # Opt-out for rehearsals / offline / hand-managed hosts. @@ -195,7 +205,8 @@ check "bootstrap: rig never apt-installs incus (box owns the daemon)" 1 "" \ # $MARKER_TMP is a literal we grep for in the script — single quotes intended. # shellcheck disable=SC2016 box_marker_at="$(grep -n 'install -m 0644 "$MARKER_TMP"' "$ROOT/commands/bootstrap.sh" | head -n1 | cut -d: -f1)" -box_install_at="$(grep -n 'BOX_YES=1 bash' "$ROOT/commands/bootstrap.sh" | grep -v 'BOX_MANUAL=' | tail -n1 | cut -d: -f1)" +# shellcheck disable=SC2016 +box_install_at="$(grep -n 'BOX_YES=1 BOX_REF="$BOX_REF" bash' "$ROOT/commands/bootstrap.sh" | tail -n1 | cut -d: -f1)" check "bootstrap: box install runs after the role marker write" \ 0 "" test "${box_marker_at:-999999}" -lt "${box_install_at:-0}" # On the skip/failure paths, keep pointing operators at the manual command so a