From 02bac43f913469cf07d90c0f32338e0c45d18756 Mon Sep 17 00:00:00 2001 From: Devin Foley Date: Fri, 11 Sep 2026 06:51:23 -0700 Subject: [PATCH] ci: spread cloud server verification across ten runners Keep the same tests and one worker per job while reducing the longest verification lane. Preserve the separate chat partition and normal PR test grouping. Co-Authored-By: Paperclip --- .github/workflows/release-verify.yml | 42 ++++++++++++++----- doc/cloud-build-readiness.md | 6 +++ .../run-vitest-stable-shard.test.mjs | 4 +- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/.github/workflows/release-verify.yml b/.github/workflows/release-verify.yml index 79adee9229..cf6dba8319 100644 --- a/.github/workflows/release-verify.yml +++ b/.github/workflows/release-verify.yml @@ -59,28 +59,48 @@ jobs: matrix: include: # Split the long chat file by collected test locations, and balance - # the remaining server files across five runners. Normal PR/local + # the remaining server files across ten runners. Normal PR/local # invocations retain their complete general-server group. - group: general-server-without-chat - group_label: server (1/5) + group_label: server (1/10) shard_index: 0 - shard_count: 5 + shard_count: 10 - group: general-server-without-chat - group_label: server (2/5) + group_label: server (2/10) shard_index: 1 - shard_count: 5 + shard_count: 10 - group: general-server-without-chat - group_label: server (3/5) + group_label: server (3/10) shard_index: 2 - shard_count: 5 + shard_count: 10 - group: general-server-without-chat - group_label: server (4/5) + group_label: server (4/10) shard_index: 3 - shard_count: 5 + shard_count: 10 - group: general-server-without-chat - group_label: server (5/5) + group_label: server (5/10) shard_index: 4 - shard_count: 5 + shard_count: 10 + - group: general-server-without-chat + group_label: server (6/10) + shard_index: 5 + shard_count: 10 + - group: general-server-without-chat + group_label: server (7/10) + shard_index: 6 + shard_count: 10 + - group: general-server-without-chat + group_label: server (8/10) + shard_index: 7 + shard_count: 10 + - group: general-server-without-chat + group_label: server (9/10) + shard_index: 8 + shard_count: 10 + - group: general-server-without-chat + group_label: server (10/10) + shard_index: 9 + shard_count: 10 - group: general-chat group_label: chat (1/3) shard_index: 0 diff --git a/doc/cloud-build-readiness.md b/doc/cloud-build-readiness.md index e5c45c1586..1e33170162 100644 --- a/doc/cloud-build-readiness.md +++ b/doc/cloud-build-readiness.md @@ -32,6 +32,12 @@ runner capacity to avoid waiting behind an older release. No verification gate i removed from npm publication. Watch organization-wide runner queues when measuring the result. +Release verification spreads the general server suites across ten standard hosted +runners, with the long chat suite split separately across three jobs. Each server +job still runs one test worker. The partition covers every suite exactly once; +normal PR and local test groups keep their existing shape. More jobs increase +concurrent runner demand, so compare queue time as well as test duration. + The artifact wait runs for up to 30 minutes and reports what is missing. Only an HTTP 404 means publication is pending; authorization errors, upstream outages, and identity mismatches fail the job. A failed, cancelled, or skipped prerequisite diff --git a/scripts/__tests__/run-vitest-stable-shard.test.mjs b/scripts/__tests__/run-vitest-stable-shard.test.mjs index 441657d173..3d5a329eb8 100644 --- a/scripts/__tests__/run-vitest-stable-shard.test.mjs +++ b/scripts/__tests__/run-vitest-stable-shard.test.mjs @@ -270,9 +270,9 @@ test("the real shard partition is duration-balanced", () => { test("release server shards plus the dedicated chat file cover the original server group exactly", () => { const full = dryRunJson(["--mode", "general", "--group", "general-server", "--shard-index", "0", "--shard-count", "1"]); - const shards = Array.from({ length: 5 }, (_, index) => dryRunJson([ + const shards = Array.from({ length: 10 }, (_, index) => dryRunJson([ "--mode", "general", "--group", "general-server-without-chat", - "--shard-index", String(index), "--shard-count", "5", + "--shard-index", String(index), "--shard-count", "10", ])); const files = shards.flatMap((shard) => shard.selectedGeneralServerSuites); const chat = "server/src/__tests__/chat-channels.integration.test.ts";