dd8b2ace02
gates / gates (push) Successful in 31s
An unreachable registry (000) or a server error passed the existing-version check as new. Test: scripts/test_release_push_once.sh, red-proved. No agent release. Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
51 lines
2.7 KiB
Bash
51 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
# test_release_push_once.sh — release-agent.sh releases a version only when the registry says it is NEW (R-1098).
|
|
#
|
|
# The REAL release-agent.sh runs from a copy inside a scratch git repo (so its tag check reads scratch tags), with
|
|
# RELEASE_ALLOW_DIRTY=1 (the clean-tree gate has its own history) and a fake `curl` and `go` first on PATH: curl answers
|
|
# the package probe as FAKE_MODE says, and `go` stops the run right after the check, so nothing is built or published.
|
|
# published (200) -> refused, "ALREADY PUBLISHED"
|
|
# absent (404) -> passes the check, reaches the build
|
|
# unreachable (000) -> refused, "could not establish"
|
|
# server error (500) -> refused, "could not establish"
|
|
# the tag already exists -> refused, "already exists"
|
|
# Run: bash scripts/test_release_push_once.sh (exit 0 all cases right · 1 a case wrong)
|
|
set -uo pipefail
|
|
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
WS="$(mktemp -d)"; trap 'rm -rf "${WS:?}"' EXIT
|
|
fails=0; ran=0
|
|
mkdir -p "$WS/bin" "$WS/repo/scripts"
|
|
cp "$HERE/release-agent.sh" "$WS/repo/scripts/release-agent.sh"
|
|
(cd "$WS/repo" && git init -q -b main && git -c user.name=t -c user.email=t@t commit -q --allow-empty -m init)
|
|
cat > "$WS/bin/curl" <<'FAKE'
|
|
#!/bin/bash
|
|
case "${FAKE_MODE}" in
|
|
published) printf 200; exit 0 ;;
|
|
absent) printf 404; exit 22 ;;
|
|
down) printf 000; exit 7 ;;
|
|
error) printf 500; exit 22 ;;
|
|
esac
|
|
FAKE
|
|
printf '#!/bin/sh\necho "FAKE-GO-REACHED $*"; exit 1\n' > "$WS/bin/go"
|
|
chmod +x "$WS/bin/curl" "$WS/bin/go"
|
|
run() { # name, mode, expected rc, required fragment, forbidden fragment
|
|
local out rc
|
|
out=$(cd "$WS/repo" && FAKE_MODE="$2" RELEASE_ALLOW_DIRTY=1 GITEA_USER=u GITEA_TOKEN=t PATH="$WS/bin:$PATH" \
|
|
bash scripts/release-agent.sh 9.9.9 2>&1); rc=$?
|
|
ran=$((ran+1))
|
|
if [[ "$rc" != "$3" ]] || ! grep -qi -- "$4" <<<"$out" || { [[ -n "$5" ]] && grep -qi -- "$5" <<<"$out"; }; then
|
|
fails=$((fails+1)); echo " FAIL $1 (exit $rc)"; echo "$out" | tail -4 | sed 's/^/ /'; return
|
|
fi
|
|
echo " ok $1"
|
|
}
|
|
echo "release-agent.sh — a version is released once, and only when the registry says it is new"
|
|
run "published (200) -> refused" published 1 "ALREADY PUBLISHED" "FAKE-GO-REACHED"
|
|
run "absent (404) -> proceeds" absent 1 "FAKE-GO-REACHED" "could not establish"
|
|
run "unreachable (000) -> refused" down 1 "could not establish" "FAKE-GO-REACHED"
|
|
run "server error (500) -> refused" error 1 "could not establish" "FAKE-GO-REACHED"
|
|
(cd "$WS/repo" && git tag v9.9.9)
|
|
run "the tag exists -> refused" absent 1 "already exists" "FAKE-GO-REACHED"
|
|
echo
|
|
if [[ $fails -eq 0 ]]; then echo "all $ran cases behaved"; exit 0; fi
|
|
echo "$fails of $ran cases FAILED"; exit 1
|