From 5cd1bc3969b6d76be4b4ba4853e13a927752d747 Mon Sep 17 00:00:00 2001 From: Antonio Viggiano Date: Tue, 22 Sep 2026 21:56:58 +0000 Subject: [PATCH] Allow complete integration and CLI checks two hours --- scripts/ci/release-validation-lanes.mjs | 13 ++++++++----- scripts/ci/release-validation-lanes.test.ts | 9 ++++++--- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/scripts/ci/release-validation-lanes.mjs b/scripts/ci/release-validation-lanes.mjs index 9072616fa..de1f5ffb5 100644 --- a/scripts/ci/release-validation-lanes.mjs +++ b/scripts/ci/release-validation-lanes.mjs @@ -43,7 +43,9 @@ export const RELEASE_VALIDATION_LANES = Object.freeze([ lane: "runtime-1", description: "Node.js 24 runtime integration tests, shard 1/4", gates: "runtime-1", - timeout_minutes: 75, + // A slow hosted runner passed 59 of shard 4's 67 tests before the old + // 75-minute cutoff. Give every shard the same bounded completion budget. + timeout_minutes: 120, pull_request: true, build_modal_dependencies: true }, @@ -51,7 +53,7 @@ export const RELEASE_VALIDATION_LANES = Object.freeze([ lane: "runtime-2", description: "Node.js 24 runtime integration tests, shard 2/4", gates: "runtime-2", - timeout_minutes: 75, + timeout_minutes: 120, pull_request: true, build_modal_dependencies: true }, @@ -59,7 +61,7 @@ export const RELEASE_VALIDATION_LANES = Object.freeze([ lane: "runtime-3", description: "Node.js 24 runtime integration tests, shard 3/4", gates: "runtime-3", - timeout_minutes: 75, + timeout_minutes: 120, pull_request: true, build_modal_dependencies: true }, @@ -67,7 +69,7 @@ export const RELEASE_VALIDATION_LANES = Object.freeze([ lane: "runtime-4", description: "Node.js 24 runtime integration tests, shard 4/4", gates: "runtime-4", - timeout_minutes: 75, + timeout_minutes: 120, pull_request: true, build_modal_dependencies: true }, @@ -75,7 +77,8 @@ export const RELEASE_VALIDATION_LANES = Object.freeze([ lane: "cli", description: "CLI package tests", gates: "cli", - timeout_minutes: 75, + // The complete local CLI suite took 76 minutes before job setup overhead. + timeout_minutes: 120, pull_request: false, build_release_reporter: true }, diff --git a/scripts/ci/release-validation-lanes.test.ts b/scripts/ci/release-validation-lanes.test.ts index 4ea611762..0ebb6049b 100644 --- a/scripts/ci/release-validation-lanes.test.ts +++ b/scripts/ci/release-validation-lanes.test.ts @@ -47,9 +47,11 @@ describe("release validation lane policy", () => { expect([...gates].sort()).toEqual([...PULL_REQUEST_REQUIRED_GATES].sort()); }); - it("gives the complete supporting runtime suite its proven shared-runner budget", () => { - const supporting = RELEASE_VALIDATION_LANES.find((lane) => lane.lane === "runtime-supporting"); - expect(supporting?.timeout_minutes).toBe(120); + it("gives complete runtime and CLI suites a bounded budget beyond observed 75-minute runs", () => { + for (const name of [...PULL_REQUEST_REQUIRED_GATES, "cli"]) { + const lane = RELEASE_VALIDATION_LANES.find((candidate) => candidate.lane === name); + expect(lane?.timeout_minutes).toBe(120); + } }); it("covers every runtime test file on pull requests", () => { @@ -85,6 +87,7 @@ describe("release validation lane policy", () => { const job = releaseValidation.slice(0, releaseValidation.indexOf("\n release-gates:")); expect(job).not.toContain("if: github.event_name != 'pull_request'"); expect(job).toContain("fromJSON(needs.release-validation-lanes.outputs.lanes)"); + expect(job).toContain("timeout-minutes: ${{ matrix.timeout_minutes }}"); }); it("requires the release validation lanes on pull requests", () => {