Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 17 additions & 5 deletions deploy/deploy_forge.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ EXPECTED_COMMIT_SHA="${CERTFORGE_EXPECTED_COMMIT_SHA:-}"
RELEASE_ROOT="${CERTFORGE_RELEASE_ROOT:-/home/forge/echo-certification-forge-releases}"
CURRENT_LINK="${CERTFORGE_CURRENT_LINK:-/home/forge/echo-certification-forge-current}"
STATE_ROOT="${CERTFORGE_STATE_ROOT:-/home/forge/echo-certification-forge/var}"
# Readiness waits poll /healthz every 0.5s and return on the first healthy probe.
# 20s proved too short for a cold uvicorn boot on a loaded FORGE (staging abort,
# false rollback-restore failure, needless production rollback).
READY_TIMEOUT_S="${CERTFORGE_READY_TIMEOUT_S:-90}"
READY_POLLS=$(( READY_TIMEOUT_S * 2 ))
ADAPTER_DIR="${ECHO_CERTFORGE_PROD_ADAPTER_DIR:-$STATE_ROOT/p5}"
ADAPTER_MODE="${CERTFORGE_ADAPTER_MODE:-required}"
TRUSTED_MANIFEST_SHA256="${ECHO_CERTFORGE_TRUSTED_MANIFEST_SHA256:-7dc98e0e95e6dd2c000ec069a8c46c4d1d49a4fe869ad4eae25e059d103644f4}"
Expand Down Expand Up @@ -221,10 +226,12 @@ ECHO_CERTFORGE_API_KEY_PEPPER="$STAGING_PEPPER" \
STAGING_PID=$!

ready=0
for _ in $(seq 1 40); do
for _ in $(seq 1 "$READY_POLLS"); do
kill -0 "$STAGING_PID" 2>/dev/null || {
echo "!! staging process exited before readiness"
tail -20 "$STAGING_ROOT/service.log"
mkdir -p "$STATE_ROOT/deploy-logs" &&
cp -f "$STAGING_ROOT/service.log" "$STATE_ROOT/deploy-logs/staging-$RELEASE_ID.log" 2>/dev/null || true
tail -40 "$STAGING_ROOT/service.log"
exit 1
}
curl -sf "http://127.0.0.1:$STAGING_PORT/healthz" >/dev/null 2>&1 && {
Expand All @@ -240,7 +247,12 @@ for _ in $(seq 1 40); do
done
if [ "$ready" != 1 ]; then
echo "!! staging never became healthy"
tail -20 "$STAGING_ROOT/service.log"
echo " waited ${READY_TIMEOUT_S}s; set CERTFORGE_READY_TIMEOUT_S to adjust"
curl -sS -m 5 -o /dev/null -w " /healthz probe: HTTP %{http_code}\n" \
"http://127.0.0.1:$STAGING_PORT/healthz" 2>&1 || true
mkdir -p "$STATE_ROOT/deploy-logs" &&
cp -f "$STAGING_ROOT/service.log" "$STATE_ROOT/deploy-logs/staging-$RELEASE_ID.log" 2>/dev/null || true
tail -40 "$STAGING_ROOT/service.log"
exit 1
fi

Expand Down Expand Up @@ -383,7 +395,7 @@ rollback_production() {
if [ "$PREV_ACTIVE" = "active" ]; then
sudo systemctl start "$SERVICE.service" || rollback_status=1
restored=0
for _ in $(seq 1 40); do
for _ in $(seq 1 "$READY_POLLS"); do
service_owns_port "$PROD_PORT" &&
curl -sf "http://127.0.0.1:$PROD_PORT/healthz" >/dev/null 2>&1 && {
restored=1
Expand Down Expand Up @@ -585,7 +597,7 @@ sudo systemctl enable "$DISPATCH_SERVICE.service"

echo "== [8/9] production health + live-smoke =="
ready=0
for _ in $(seq 1 40); do
for _ in $(seq 1 "$READY_POLLS"); do
service_owns_port "$PROD_PORT" &&
curl -sf "http://127.0.0.1:$PROD_PORT/healthz" >/dev/null 2>&1 && {
ready=1
Expand Down
Loading