From 2d24e82c613b7a46748bb30f067f56300acddc3e Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Sun, 9 Aug 2026 18:36:46 -0300 Subject: [PATCH] fix(ci): allow test-masking to finish in release preflight --- ...se-v3850-validator-test-masking-timeout.md | 1 + scripts/quality/validate-release-green.mjs | 19 +++++++++++++++++-- tests/unit/validate-release-green.test.ts | 12 ++++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 changelog.d/fixes/release-v3850-validator-test-masking-timeout.md diff --git a/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md b/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md new file mode 100644 index 0000000000..4b7c777092 --- /dev/null +++ b/changelog.d/fixes/release-v3850-validator-test-masking-timeout.md @@ -0,0 +1 @@ +- Let the release-green validator finish the test-masking gate on loaded runners while preserving the existing timeout for every other full-CI gate, and report Node.js `ETIMEDOUT` errors as explicit timeout failures. diff --git a/scripts/quality/validate-release-green.mjs b/scripts/quality/validate-release-green.mjs index 05690e1eac..aa1082fef5 100644 --- a/scripts/quality/validate-release-green.mjs +++ b/scripts/quality/validate-release-green.mjs @@ -221,6 +221,17 @@ export const FULL_CI_SKIP = new Set(["check:pr-evidence", "check:codeql-ratchet" // Gates that need a specific env to behave like CI (else they compare against the wrong base). export const FULL_CI_ENV = { "check:test-masking": { GITHUB_BASE_REF: "main" } }; +const FULL_CI_DEFAULT_TIMEOUT_MS = 10 * 60 * 1000; +const FULL_CI_TIMEOUT_OVERRIDES_MS = { + // Measured at 19m38s on the loaded release-v3.8.50 devbox. The former generic + // 10m ceiling killed a green scan before it could report its result. + "check:test-masking": 30 * 60 * 1000, +}; + +export function fullCiTimeoutFor(gateId) { + return FULL_CI_TIMEOUT_OVERRIDES_MS[gateId] ?? FULL_CI_DEFAULT_TIMEOUT_MS; +} + /** * Parse a ci.yml text and return the ordered, de-duplicated list of gate commands to run. * Each entry: { id, job, args:["run",