fix(staging): await public release identity
Staging Backend Quality Gate / validate (pull_request) Successful in 13m57s
Staging Backend Quality Gate / publish (pull_request) Has been skipped

This commit is contained in:
Jesse
2026-08-07 01:07:08 +08:00
parent 8dc61e3135
commit 3221b6a9a4
4 changed files with 75 additions and 27 deletions
+46 -23
View File
@@ -198,31 +198,54 @@ verify_container_image rectification-v4-worker "$WEB_IMAGE"
-e EXPECTED_SHA="$DEPLOY_SHA" -e STAGING_URL="$STAGING_URL" \
web node --input-type=module <<'NODE'
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
let login;
for (let attempt = 0; attempt < 12; attempt += 1) {
let observed = {};
for (let attempt = 1; attempt <= 12; attempt += 1) {
try {
login = await fetch(`${process.env.STAGING_URL}/login`);
if (login.ok) break;
} catch {}
await delay(5_000);
}
if (!login?.ok) process.exit(1);
const adminPage = await fetch(`${process.env.STAGING_URL}/admin`, { redirect: "manual" });
if (adminPage.status !== 307 || adminPage.headers.get("location") !== "/login") process.exit(1);
const adminApi = await fetch(`${process.env.STAGING_URL}/api/admin/session`);
if (adminApi.status !== 401) process.exit(1);
const account = await fetch(`${process.env.STAGING_URL}/api/account`);
if (account.status !== 401) process.exit(1);
const publicHealth = await fetch(`${process.env.STAGING_URL}/api/health`);
const publicBody = await publicHealth.json();
if (!publicHealth.ok || publicBody.deployment?.gitCommit !== process.env.EXPECTED_SHA) {
process.exit(1);
}
const privateHealth = await fetch("http://api:5200/api/health");
const privateBody = await privateHealth.json();
if (!privateHealth.ok || privateBody.status !== "ok" || privateBody.swisseph_available !== true) {
process.exit(1);
const login = await fetch(`${process.env.STAGING_URL}/login`);
const adminPage = await fetch(`${process.env.STAGING_URL}/admin`, { redirect: "manual" });
const adminApi = await fetch(`${process.env.STAGING_URL}/api/admin/session`);
const account = await fetch(`${process.env.STAGING_URL}/api/account`);
const publicHealth = await fetch(`${process.env.STAGING_URL}/api/health`);
const publicBody = await publicHealth.json();
const privateHealth = await fetch("http://api:5200/api/health");
const privateBody = await privateHealth.json();
observed = {
attempt,
login: login.status,
adminPage: adminPage.status,
adminLocation: adminPage.headers.get("location"),
adminApi: adminApi.status,
account: account.status,
publicHealth: publicHealth.status,
publicSha: publicBody.deployment?.gitCommit ?? "missing",
privateHealth: privateHealth.status,
privateStatus: privateBody.status ?? "missing",
swissephAvailable: privateBody.swisseph_available === true,
};
if (
login.ok
&& adminPage.status === 307
&& adminPage.headers.get("location") === "/login"
&& adminApi.status === 401
&& account.status === 401
&& publicHealth.ok
&& publicBody.deployment?.gitCommit === process.env.EXPECTED_SHA
&& privateHealth.ok
&& privateBody.status === "ok"
&& privateBody.swisseph_available === true
) {
process.exit(0);
}
} catch (error) {
observed = {
attempt,
error: error instanceof Error ? error.name : "verification_error",
};
}
if (attempt < 12) await delay(5_000);
}
console.error("staging verification predicates did not converge", JSON.stringify(observed));
process.exit(1);
NODE
revision_file="$state_directory/deployed-revision.tmp.$$"