☆ 1
CodeIssuesPull RequestsActionsSecurityInsights
✨ AI
More
Settings

Verify deploy to production#419 success

push·main·de11da6·queued 1d ago·duration 2.3s
verify-deploysuccess1.4s
Wait for production to serve this commit
$ SHA=$(git rev-parse HEAD) echo "verifying deploy of $SHA" for i in $(seq 1 36); do LIVE=$(wget -qO- --timeout=10 https://gluecron.com/api/version 2>/dev/null | sed -n 's/.*"shaFull":"\([a-f0-9]*\)".*/\1/p' || true) if [ "$LIVE" = "$SHA" ]; then echo "deploy verified: production serves $SHA (after ~$((i * 10))s)" exit 0 fi echo "attempt $i/36 — production serves ${LIVE:-unknown}, waiting..." sleep 10 done echo "DEPLOY NOT VERIFIED after 6 minutes — the gluecron-update timer may be stuck." echo "On the host: systemctl list-timers 'gluecron-*' && journalctl -u gluecron-update" exit 1
230ms
Readiness gates against the live build
$ set +e bun scripts/production-readiness.mjs --base https://gluecron.com --no-browser CODE=$? set -e if [ "$CODE" = "1" ]; then echo "READINESS FAILED — a hard gate broke on the build now serving production." exit 1 fi if [ "$CODE" = "3" ]; then echo "Readiness INCONCLUSIVE — every gate this runner can execute passed;" echo "the browser and credentialed gates need 'bun run readiness:full' from a workstation." exit 0 fi if [ "$CODE" != "0" ]; then echo "READINESS CRASHED (exit $CODE)" exit 1 fi
1.2s
==> Wait for production to serve this commit
$ SHA=$(git rev-parse HEAD)
echo "verifying deploy of $SHA"
for i in $(seq 1 36); do
  LIVE=$(wget -qO- --timeout=10 https://gluecron.com/api/version 2>/dev/null | sed -n 's/.*"shaFull":"\([a-f0-9]*\)".*/\1/p' || true)
  if [ "$LIVE" = "$SHA" ]; then
    echo "deploy verified: production serves $SHA (after ~$((i * 10))s)"
    exit 0
  fi
  echo "attempt $i/36 — production serves ${LIVE:-unknown}, waiting..."
  sleep 10
done
echo "DEPLOY NOT VERIFIED after 6 minutes — the gluecron-update timer may be stuck."
echo "On the host: systemctl list-timers 'gluecron-*' && journalctl -u gluecron-update"
exit 1
verifying deploy of de11da6dc0a28c7ddd009773d6a276721f529594
deploy verified: production serves de11da6dc0a28c7ddd009773d6a276721f529594 (after ~10s)

[exit 0 in 230ms]

==> Readiness gates against the live build
$ set +e
bun scripts/production-readiness.mjs --base https://gluecron.com --no-browser
CODE=$?
set -e
if [ "$CODE" = "1" ]; then
  echo "READINESS FAILED — a hard gate broke on the build now serving production."
  exit 1
fi
if [ "$CODE" = "3" ]; then
  echo "Readiness INCONCLUSIVE — every gate this runner can execute passed;"
  echo "the browser and credentialed gates need 'bun run readiness:full' from a workstation."
  exit 0
fi
if [ "$CODE" != "0" ]; then
  echo "READINESS CRASHED (exit $CODE)"
  exit 1
fi
[readiness] target: https://gluecron.com

GATE          KIND   RESULT      DETAIL
--------------------------------------------------------------------------------------------------------------
provenance    HARD   PASS        sha=de11da6 builtAt=2026-08-31T16:07:38.476Z
api-json      HARD   PASS        unknown /api/* path returned 404 as application/json
privacy       HARD   UNVERIFIED  no --private-repo owner/name given — anonymous disclosure of a private repo was NOT tested
authz-matrix  HARD   UNVERIFIED  needs --private-repo AND --public-repo — the gate that catches leaks across every repo-scoped route did not run
auth-gate     HARD   PASS        98 guarded paths correctly gated (98 derived from source)
onboarding    HARD   PASS        8 onboarding destinations all resolve
render        HARD   UNVERIFIED  ran with --no-browser — needs a working Chromium for the full verdict
overflow      HARD   UNVERIFIED  ran with --no-browser — needs a working Chromium for the full verdict
images        soft   UNVERIFIED  ran with --no-browser — needs a working Chromium for the full verdict
headings      soft   UNVERIFIED  ran with --no-browser — needs a working Chromium for the full verdict
perf          soft   UNVERIFIED  ran with --no-browser — needs a working Chromium for the full verdict

[readiness] HARD 4/8 verified passing · 4 unverified · soft warnings: 0
Readiness INCONCLUSIVE — every gate this runner can execute passed;
the browser and credentialed gates need 'bun run readiness:full' from a workstation.

[stderr]

[readiness] COVERAGE GAP — 4 hard gate(s) never ran:
  - privacy: no --private-repo owner/name given — anonymous disclosure of a private repo was NOT tested
  - authz-matrix: needs --private-repo AND --public-repo — the gate that catches leaks across every repo-scoped route did not run
  - render: ran with --no-browser — needs a working Chromium for the full verdict
  - overflow: ran with --no-browser — needs a working Chromium for the full verdict

[exit 0 in 1185ms]