diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7604be6293..2b952a976a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -224,12 +224,14 @@ jobs: # --------------------------------------------------------------------------- build-darwin-arm64: name: Build macOS ARM64 - # The shipped-profile library compile peaks near 12 GB and swaps on this - # free 7 GB runner (0.63.1's ARM64 build ran past a shorter limit twice), - # so the limit leaves only the tag canceller's 10 minutes below GitHub's - # 360-minute maximum. - runs-on: macos-26 - timeout-minutes: 350 + # The macOS release jobs run on CortexKit's rented Mac (12 cores, 16 GB, + # one job at a time, checkouts kept warm between jobs) until the rental + # ends on 21 November 2026; then they move back to `macos-26`. GitHub's + # free 7 GB runner swaps on the shipped-profile library compile, which + # peaks near 12 GB, and needed close to its 360-minute maximum. The rented + # Mac has no Rust or Bun on its PATH, so every job installs its toolchains. + runs-on: [self-hosted, rented-mac] + timeout-minutes: 150 outputs: rust_version: ${{ steps.bundle.outputs.rust_version }} permissions: @@ -306,8 +308,8 @@ jobs: build-darwin-x64: name: Build macOS x64 # Same runner and limit as the ARM64 build; see the note there. - runs-on: macos-26 - timeout-minutes: 350 + runs-on: [self-hosted, rented-mac] + timeout-minutes: 150 env: SCCACHE_GHA_ENABLED: "true" RUSTC_WRAPPER: sccache @@ -590,6 +592,9 @@ jobs: e2e-darwin-arm64: name: Shipped E2E (macOS ARM64) needs: build-darwin-arm64 + # Stays on GitHub's runner: the rented Mac downloads the 135 MB tested + # bundle at about 160 KB/s (14 minutes), while the suite itself takes a + # few minutes here. runs-on: macos-26 # v0.62.0/v0.63.3/v0.63.4: 2.4/3.0/3.4 min; 10 min covers cold setup. timeout-minutes: 10 diff --git a/benchmarks/aft-search/slice-descriptors/land-release-macos-rented-mac.json b/benchmarks/aft-search/slice-descriptors/land-release-macos-rented-mac.json new file mode 100644 index 0000000000..ebd574711e --- /dev/null +++ b/benchmarks/aft-search/slice-descriptors/land-release-macos-rented-mac.json @@ -0,0 +1,8 @@ +{ + "targeted_mechanism": "none", + "kind": "harness", + "slice_class": "non_ranking", + "fixtures": [ + "harness-goldens" + ] +} diff --git a/scripts/lib/test_workflow_gates.py b/scripts/lib/test_workflow_gates.py index df0a6eb7f2..afcc024700 100644 --- a/scripts/lib/test_workflow_gates.py +++ b/scripts/lib/test_workflow_gates.py @@ -741,7 +741,9 @@ def test_libtest_codegen_is_split_without_rebuilding_dependencies(self) -> None: def test_macos_jobs_use_free_github_runners(self) -> None: # AFT's repository is public, where GitHub's macOS runners are free; - # no job may name a paid runner provider. + # no job may name a paid runner provider. The macOS release jobs run + # on CortexKit's rented Mac until its rental ends on 21 November 2026 + # (see the note on build-darwin-arm64 in release.yml). suite = workflow_gates.parse_workflow(str(REPO_ROOT / ".github/workflows/_unit-suite.yml")) release = workflow_gates.parse_workflow(str(REPO_ROOT / ".github/workflows/release.yml")) jobs = suite["jobs"] @@ -750,7 +752,8 @@ def test_macos_jobs_use_free_github_runners(self) -> None: for name in ("unit-macos-libtest-archive", "unit-macos-libtest-shard", "unit-macos-bin-archive", "unit-macos-nextest-archive", "unit-macos-inventory-proof"): self.assertEqual(jobs[name]["runs-on"], "macos-26", name) for name in ("build-darwin-arm64", "build-darwin-x64"): - self.assertEqual(release["jobs"][name]["runs-on"], "macos-26", name) + self.assertEqual(release["jobs"][name]["runs-on"], ["self-hosted", "rented-mac"], name) + self.assertEqual(release["jobs"]["e2e-darwin-arm64"]["runs-on"], "macos-26") for workflow in (suite, release): self.assertEqual( [name for name, job in workflow["jobs"].items() if "blacksmith" in str(job.get("runs-on", "")).lower()],