From fc057a63143d535e86e3a03581e78eae01cf0465 Mon Sep 17 00:00:00 2001 From: Rafael Richards Date: Sat, 9 May 2026 11:14:38 -0400 Subject: [PATCH] Drop macos x86_64 from prebuilds matrix Apple Silicon is the modern macOS target; GitHub's free macos-13 Intel runner queue is unreliable enough to indefinitely stall the release-upload job, blocking the entire workflow. Removing the leg from both the Node prebuilds and Python wheel matrices keeps the remaining four platforms (linux x64/arm64, macos arm64, windows x64) unblocked. Tested via the v0.1.0 run (25603802939): all 4 wheel + 4 prebuild legs that aren't macos x86_64 finished in 30s-3m; macos-13 jobs stayed queued for >20 min before being cancelled. RELEASE.md updated to match. Co-Authored-By: Claude Opus 4.7 (1M context) --- .github/workflows/prebuilds.yml | 14 ++++++-------- RELEASE.md | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/.github/workflows/prebuilds.yml b/.github/workflows/prebuilds.yml index 5837977..68ba3e1 100644 --- a/.github/workflows/prebuilds.yml +++ b/.github/workflows/prebuilds.yml @@ -4,15 +4,19 @@ name: Prebuilds # Release for the pushed tag. Runs on `v*` tag push. Two parallel tracks: # # 1. Node N-API binaries (via `prebuildify`) for linux x64/arm64, -# macos x64/arm64, windows x64. Consumed by `node-gyp-build` at +# macos arm64, windows x64. Consumed by `node-gyp-build` at # npm-install time so end users don't need a C toolchain. # -# 2. Python wheels (via `cibuildwheel`) for the same five (os, arch) +# 2. Python wheels (via `cibuildwheel`) for the same four (os, arch) # pairs. Built once per platform with `cp310-abi3` (forward-compat # with cp310+) so a single wheel covers Python 3.10 through 3.13+. # Downstream Python consumers (notably `m-cli`) URL-pin to the # release artifact instead of cloning a sibling checkout. # +# macOS x86_64 (Intel) is intentionally NOT in the matrix — Apple Silicon +# is the modern macOS target, and GitHub's free `macos-13` Intel queue +# is unreliable enough to block release uploads when it stalls. +# # To consume Node prebuilds locally before `npm publish` (RELEASE.md §3): # gh release download "v$NEW" -p 'prebuilds-*.tar.gz' -D /tmp/ts-m-prebuilds # for f in /tmp/ts-m-prebuilds/prebuilds-*.tar.gz; do tar -xzf "$f"; done @@ -52,9 +56,6 @@ jobs: - os: linux arch: arm64 runner: ubuntu-22.04-arm - - os: macos - arch: x64 - runner: macos-13 - os: macos arch: arm64 runner: macos-14 @@ -105,9 +106,6 @@ jobs: - os: linux arch: aarch64 runner: ubuntu-22.04-arm - - os: macos - arch: x86_64 - runner: macos-13 - os: macos arch: arm64 runner: macos-14 diff --git a/RELEASE.md b/RELEASE.md index 5bcbf7c..8ffc4a7 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -6,12 +6,15 @@ checklist; do not skip steps. > **Python binding.** The Python binding is **not** published to > PyPI. Instead, `cibuildwheel` builds prebuilt wheels for linux -> x64/arm64, macos x64/arm64, and windows x64 on every `v*` tag -> push (`.github/workflows/prebuilds.yml`), and attaches them to -> the GitHub Release. Python consumers (notably `m-cli`) URL-pin -> to those release assets — no PyPI account, no `twine`, no -> sibling clone required. See §5.5 below for the wheel-pinning -> pattern downstream consumers use. +> x64/arm64, macos arm64, and windows x64 on every `v*` tag push +> (`.github/workflows/prebuilds.yml`), and attaches them to the +> GitHub Release. Python consumers (notably `m-cli`) URL-pin to +> those release assets — no PyPI account, no `twine`, no sibling +> clone required. See §5.5 below for the wheel-pinning pattern +> downstream consumers use. **macOS Intel (x86_64) is not in the +> matrix** — Apple Silicon is the modern target and GitHub's +> `macos-13` Intel queue is unreliable enough to stall release +> uploads. > **First-publish note.** The initial public release is **0.1.0** > — all four binding scaffolds work locally and across the CI @@ -121,7 +124,7 @@ node -e "const P=require('tree-sitter'); const M=require('tree-sitter-m'); **Prebuilds** (now wired): `.github/workflows/prebuilds.yml` runs on `v*` tag push and produces two parallel artifact tracks for the -same five (os, arch) pairs (linux-x64/arm64, macos-x64/arm64, +same four (os, arch) pairs (linux-x64/arm64, macos-arm64, windows-x64): - **Node N-API binaries** — one `prebuilds--.tar.gz` per @@ -221,14 +224,13 @@ go run main.go ## 5.5. Python wheels — verify, then update consumer pins The `prebuilds.yml` workflow (triggered by step 5's tag push) builds -five wheels via `cibuildwheel`. After the workflow's +four wheels via `cibuildwheel`. After the workflow's `attach-to-release` job finishes, the GitHub Release for `v$NEW` will carry: ``` tree_sitter_m-$NEW-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl tree_sitter_m-$NEW-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -tree_sitter_m-$NEW-cp310-abi3-macosx_10_9_x86_64.whl tree_sitter_m-$NEW-cp310-abi3-macosx_11_0_arm64.whl tree_sitter_m-$NEW-cp310-abi3-win_amd64.whl ``` @@ -258,8 +260,6 @@ tree-sitter-m = [ marker = "sys_platform == 'linux' and platform_machine == 'x86_64'" }, { url = "https://github.com/m-dev-tools/tree-sitter-m/releases/download/v$NEW/tree_sitter_m-$NEW-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", marker = "sys_platform == 'linux' and platform_machine == 'aarch64'" }, - { url = "https://github.com/m-dev-tools/tree-sitter-m/releases/download/v$NEW/tree_sitter_m-$NEW-cp310-abi3-macosx_10_9_x86_64.whl", - marker = "sys_platform == 'darwin' and platform_machine == 'x86_64'" }, { url = "https://github.com/m-dev-tools/tree-sitter-m/releases/download/v$NEW/tree_sitter_m-$NEW-cp310-abi3-macosx_11_0_arm64.whl", marker = "sys_platform == 'darwin' and platform_machine == 'arm64'" }, { url = "https://github.com/m-dev-tools/tree-sitter-m/releases/download/v$NEW/tree_sitter_m-$NEW-cp310-abi3-win_amd64.whl", @@ -291,7 +291,7 @@ gh release create "v$NEW" \ - crates.io: https://crates.io/crates/tree-sitter-m/$NEW - Go: `go get github.com/m-dev-tools/tree-sitter-m@v$NEW` - Python wheels: attached to this release (linux x64/arm64, - macos x64/arm64, windows x64). cp310-abi3 — one wheel covers + macos arm64, windows x64). cp310-abi3 — one wheel covers Python 3.10 through the latest stable. ## Status