From 3a12c6c3b39794afefaebd0d01af70c2fba655b2 Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Tue, 30 Jun 2026 16:16:32 +0000 Subject: [PATCH 1/2] ci: cross-compile darwin-x86_64 release on macos-14 GitHub retired its last Intel hosted runner (macos-13), so the darwin-x86_64 release leg sat 24h "awaiting a runner" and never built, blocking the whole release (run 28265340973) and shipping 8.6.0-figma2 without the macOS Intel asset. Build darwin-x86_64 on macos-14 (Apple silicon) via --cpu=darwin_x86_64 --macos_cpus=x86_64, using the arm64 bootstrap Bazelisk for the host. This is exactly the cross-compile fallback the prior code comment anticipated. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/figma-release.yml | 36 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/.github/workflows/figma-release.yml b/.github/workflows/figma-release.yml index 2451f8946adde2..041856bea6bb3b 100644 --- a/.github/workflows/figma-release.yml +++ b/.github/workflows/figma-release.yml @@ -260,17 +260,21 @@ jobs: path: dist/* if-no-files-found: error - # macOS has no glibc, so the darwin binaries are built natively on the runner - # for each architecture: arm64 on Apple-silicon macos-14, x86_64 on Intel - # macos-13. Bazelisk's darwin assets use the `amd64` arch token for x86_64 - # (matching the linux convention), so we download per `bazelisk_arch` while the - # published asset name keeps Bazelisk's `-` form (`darwin-x86_64`). + # macOS has no glibc, so the darwin binaries are built on Apple-silicon + # macos-14 runners. arm64 builds natively; x86_64 cross-compiles via + # `--cpu=darwin_x86_64` / `--macos_cpus=x86_64`. Both legs therefore run the + # arm64 bootstrap Bazelisk (host arch), while the published asset name keeps + # Bazelisk's `-` form (`darwin-x86_64`). # - # NOTE: macos-13 is GitHub's last Intel-based hosted runner and is on a - # deprecation track. It works today, but once GitHub retires it the - # darwin-x86_64 leg will have to cross-compile from an Apple-silicon runner - # (e.g. macos-14 with `--cpu=darwin_x86_64` / `--macos_cpus=x86_64`) instead of - # building natively. + # Root cause: GitHub retired its last Intel-based hosted runner (`macos-13`), + # so the darwin-x86_64 leg can no longer build natively — a job pinned to + # `macos-13` sits "awaiting a runner" until GitHub's 24h queue ceiling kills + # it, which previously blocked the whole release (see run 28265340973). We + # cross-compile from macos-14 instead, exactly as the prior NOTE anticipated. + # See GitHub's macOS-13 runner removal: https://github.com/actions/runner-images/issues/13046 + # TODO(aeagle): Revisit if GitHub ever restores Intel macOS runners (unlikely) + # or once we drop darwin-x86_64 support entirely; then this leg can build + # natively again or be removed. build-darwin: name: build ${{ matrix.platform }} needs: setup @@ -284,10 +288,14 @@ jobs: runner: macos-14 arch: arm64 bazelisk_arch: arm64 + bazel_cpu_flags: "" - platform: darwin-x86_64 - runner: macos-13 + runner: macos-14 arch: x86_64 - bazelisk_arch: amd64 + # Bootstrap Bazelisk runs on the host (macos-14 = arm64), so we + # fetch the arm64 download even though the target is x86_64. + bazelisk_arch: arm64 + bazel_cpu_flags: "--cpu=darwin_x86_64 --macos_cpus=x86_64" steps: - name: Checkout ${{ needs.setup.outputs.sha }} uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -309,11 +317,15 @@ jobs: env: USE_BAZEL_VERSION: ${{ needs.setup.outputs.base_version }} VERSION: ${{ needs.setup.outputs.version }} + # Empty for the arm64 (native) leg; the x86_64 leg cross-compiles. + # Intentionally unquoted below so the two flags word-split. + BAZEL_CPU_FLAGS: ${{ matrix.bazel_cpu_flags }} run: | set -euo pipefail bazel build -c opt --stamp \ --embed_label "$VERSION" \ --incompatible_strict_action_env=true \ + ${BAZEL_CPU_FLAGS} \ //src:bazel //src:bazel_nojdk - name: Package artifacts From 4a4aebfe6df0f9b44ce6e86ea3eefaadc81ea202 Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Tue, 30 Jun 2026 17:33:40 +0000 Subject: [PATCH 2/2] ci: build darwin-x86_64 natively on macos-15-intel Supersedes the --cpu cross-compile attempt, which failed: cross-compiling darwin-x86_64 from an arm64 runner makes abseil's randen_hwaes apply -maes/-msse4.1 to the arm64 exec-config tools (bazelbuild/bazel#14803). Upstream Bazel avoids this by building each arch natively on dedicated macOS machines (bazelci.py macos vs macos_arm64 queues); we do the same using GitHub's native Intel image. macos-13 was retired 2025-12-04, which is why the leg starved for a runner and blocked the release (run 28265340973). macos-15-intel is GitHub's replacement native x86_64 image (available until ~Aug 2027). Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/figma-release.yml | 49 +++++++++++++++-------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/workflows/figma-release.yml b/.github/workflows/figma-release.yml index 041856bea6bb3b..e7176230e6f153 100644 --- a/.github/workflows/figma-release.yml +++ b/.github/workflows/figma-release.yml @@ -260,21 +260,30 @@ jobs: path: dist/* if-no-files-found: error - # macOS has no glibc, so the darwin binaries are built on Apple-silicon - # macos-14 runners. arm64 builds natively; x86_64 cross-compiles via - # `--cpu=darwin_x86_64` / `--macos_cpus=x86_64`. Both legs therefore run the - # arm64 bootstrap Bazelisk (host arch), while the published asset name keeps - # Bazelisk's `-` form (`darwin-x86_64`). + # macOS has no glibc, so the darwin binaries are built natively on the runner + # for each architecture: arm64 on Apple-silicon macos-14, x86_64 on the native + # Intel macos-15-intel runner. Bazelisk's darwin assets use the `amd64` arch + # token for x86_64 (matching the linux convention), so we download per + # `bazelisk_arch` while the published asset name keeps Bazelisk's + # `-` form (`darwin-x86_64`). # - # Root cause: GitHub retired its last Intel-based hosted runner (`macos-13`), - # so the darwin-x86_64 leg can no longer build natively — a job pinned to - # `macos-13` sits "awaiting a runner" until GitHub's 24h queue ceiling kills - # it, which previously blocked the whole release (see run 28265340973). We - # cross-compile from macos-14 instead, exactly as the prior NOTE anticipated. - # See GitHub's macOS-13 runner removal: https://github.com/actions/runner-images/issues/13046 - # TODO(aeagle): Revisit if GitHub ever restores Intel macOS runners (unlikely) - # or once we drop darwin-x86_64 support entirely; then this leg can build - # natively again or be removed. + # We deliberately build each arch NATIVELY rather than cross-compiling, the + # same way upstream Bazel does (its release CI uses separate native `macos` + # and `macos_arm64` Buildkite queues — see bazelbuild/continuous-integration + # buildkite/bazelci.py). Cross-compiling darwin-x86_64 from an arm64 runner + # via `--cpu=darwin_x86_64` fails: abseil's randen_hwaes applies `-maes`/ + # `-msse4.1` to the arm64 exec-config tools (bazelbuild/bazel#14803), and + # Rosetta builds are slow/fragile. + # + # Root cause for the macos-15-intel pin: GitHub retired its previous Intel + # runner `macos-13` on 2025-12-04, so jobs pinned to it sit "awaiting a + # runner" until the 24h queue ceiling kills them, blocking the whole release + # (see figma/bazel run 28265340973). `macos-15-intel` is GitHub's replacement + # native x86_64 image: https://github.com/actions/runner-images/issues/13045 + # TODO(aeagle): GitHub is sunsetting hosted x86_64 macOS around Aug 2027 + # (https://github.com/actions/runner-images/issues/13046). Before then, either + # move this leg to a self-hosted Intel Mac (as upstream does) or drop + # darwin-x86_64 support. build-darwin: name: build ${{ matrix.platform }} needs: setup @@ -288,14 +297,10 @@ jobs: runner: macos-14 arch: arm64 bazelisk_arch: arm64 - bazel_cpu_flags: "" - platform: darwin-x86_64 - runner: macos-14 + runner: macos-15-intel arch: x86_64 - # Bootstrap Bazelisk runs on the host (macos-14 = arm64), so we - # fetch the arm64 download even though the target is x86_64. - bazelisk_arch: arm64 - bazel_cpu_flags: "--cpu=darwin_x86_64 --macos_cpus=x86_64" + bazelisk_arch: amd64 steps: - name: Checkout ${{ needs.setup.outputs.sha }} uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 @@ -317,15 +322,11 @@ jobs: env: USE_BAZEL_VERSION: ${{ needs.setup.outputs.base_version }} VERSION: ${{ needs.setup.outputs.version }} - # Empty for the arm64 (native) leg; the x86_64 leg cross-compiles. - # Intentionally unquoted below so the two flags word-split. - BAZEL_CPU_FLAGS: ${{ matrix.bazel_cpu_flags }} run: | set -euo pipefail bazel build -c opt --stamp \ --embed_label "$VERSION" \ --incompatible_strict_action_env=true \ - ${BAZEL_CPU_FLAGS} \ //src:bazel //src:bazel_nojdk - name: Package artifacts