From 473820bba77792efc01d64cfc2fed21f547fe768 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Sat, 15 Aug 2026 11:51:58 -0700 Subject: [PATCH] ci: give PR builds one darwin aarch64 test lane that any mac agent can take PRs lost darwin tests entirely in #39191 because the version-specific lanes queue for hours. Capacity is not actually short, it is fragmented: the 26 lane's agents sit idle on PR-heavy days while the 14 lane backs up. So PR builds now get a single untiered aarch64 lane (no release-tier selector) that every arm64 mac agent serves; main, manual and [macos tests] builds keep the 26 / 14 / x64 lanes for version coverage. No-Verification-Needed: pipeline generator only; checked with --dry-run --- .buildkite/ci.mjs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/.buildkite/ci.mjs b/.buildkite/ci.mjs index 224642f86f29..aba15736e6bf 100755 --- a/.buildkite/ci.mjs +++ b/.buildkite/ci.mjs @@ -186,8 +186,9 @@ const testPlatforms = [ // The darwin test suite runs on real macOS agents against the Linux-built // artifacts from the `darwin--build-bun` steps (the only darwin build // lanes — see buildPlatforms). - // All three darwin test lanes run on main and on opt-in only for now (see - // darwinTestsEnabled): the mac agent pool cannot keep up with PR volume. + // These three version-specific lanes run on main and on opt-in (see + // darwinTestsEnabled). PR builds instead get one aarch64 lane that any mac + // agent can take (prDarwinTestPlatforms), so the whole arm64 pool serves PRs. { os: "darwin", arch: "aarch64", release: "26", tier: "latest" }, { os: "darwin", arch: "aarch64", release: "14", tier: "previous" }, { os: "darwin", arch: "x64", release: "14", tier: "latest" }, @@ -409,7 +410,7 @@ function getTestAgent(platform, options) { queue: `test-${os}`, os, arch, - ...(arch === "aarch64" ? { "release-tier": tier } : {}), + ...(arch === "aarch64" && tier ? { "release-tier": tier } : {}), }; } @@ -1543,11 +1544,16 @@ async function getPipeline(options = {}) { // Tests run on main too so the canary release step below can gate on them. // ASAN is PR-only (see includeASAN above), so the asan test lane is dropped // on main along with its build. + // Untiered: any arm64 mac agent, whatever macOS it runs, can take it. + /** @type {Platform[]} */ + const prDarwinTestPlatforms = [{ os: "darwin", arch: "aarch64", release: "any" }]; const darwinTestsEnabled = isMainBranch() || isBuildManual() || /\[(macos|darwin) tests?\]/i.test(getCommitMessage()); const relevantTestPlatforms = ( includeASAN ? testPlatforms : testPlatforms.filter(({ profile }) => profile !== "asan") - ).filter(({ os }) => os !== "darwin" || darwinTestsEnabled); + ) + .filter(({ os }) => os !== "darwin" || darwinTestsEnabled) + .concat(darwinTestsEnabled ? [] : prDarwinTestPlatforms); /** @type {string[]} */ const testStepKeys = []; {