build: defer macOS release builds explicitly (#59) #60

Open
buildagent wants to merge 1 commit from docs/defer-macos-build into master
Member

Closes nothing; documents a deferral and files the debt as #59.

macOS artifacts have not shipped since v0.8.4, but release.yml told two contradictory stories: the header listed macos-x86_64/macos-aarch64 as attempted "best-effort" targets, while the matrix entries themselves were commented out. This makes the deferral the documented position rather than an implicit gap.

Changes

  • release.yml header — split SHIPPED (4 artifacts) from DEFERRED (both macOS targets + windows-aarch64).
  • Recorded why commenting out is the correct mechanism, because it reads like something to tidy up: a matrix entry whose runs-on label has no registered runner does not fail — it queues forever and hangs the whole run. continue-on-error tolerates failures, never never-scheduled jobs. Converting these to optional: true would break releases.
  • Release notes now state plainly that macOS is not built and link #59, replacing "macOS builds are added once a macOS runner is registered", which read as an imminent promise. Also dropped "the table lists all attempted targets" — every listed platform is actually published.
  • README — lists the musl archive (it ships and was omitted) and points macOS users at building from source.

The debt this surfaces

Not the missing binaries — the untested code. Windows has the windows-check cross-compile gate; macOS has no equivalent, so the #[cfg(target_os = "macos")] paths in watcher.rs (FSEvents recursive watch) and lifecycle.rs (flock / stale-PID) are compiled by nothing in CI and can bit-rot green.

A check-only gate is not a cheap substitute: cargo check still runs build scripts, and the seven tree-sitter-* grammar crates each compile C via cc, so even checking needs a darwin C toolchain (osxcross + Apple SDK). #59 lays out the three options.

Verification

No behaviour change intended, and checked rather than assumed:

  • YAML parsed — the enabled matrix is the same 4 entries (linux-x86_64, linux-x86_64-musl optional, linux-aarch64, windows-x86_64).
  • The release-notes BODY construction was executed with TAG/SERVER_URL/REPO set, and the rendered markdown inspected — shell string concatenation across ~15 BODY+= lines is easy to get subtly wrong.
  • Confirmed no stale "best-effort"/"attempted targets" wording remains.

The macos-* case arms in the packaging and README steps are deliberately kept so re-enabling is a pure uncomment.

🤖 Generated with Claude Code

https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy

Closes nothing; documents a deferral and files the debt as #59. macOS artifacts have not shipped since v0.8.4, but `release.yml` told two contradictory stories: the header listed `macos-x86_64`/`macos-aarch64` as attempted "best-effort" targets, while the matrix entries themselves were commented out. This makes the deferral the documented position rather than an implicit gap. ## Changes - **`release.yml` header** — split SHIPPED (4 artifacts) from DEFERRED (both macOS targets + `windows-aarch64`). - **Recorded why commenting out is the correct mechanism**, because it reads like something to tidy up: a matrix entry whose `runs-on` label has no registered runner does *not* fail — it queues forever and hangs the whole run. `continue-on-error` tolerates *failures*, never *never-scheduled* jobs. Converting these to `optional: true` would break releases. - **Release notes** now state plainly that macOS is not built and link #59, replacing _"macOS builds are added once a macOS runner is registered"_, which read as an imminent promise. Also dropped "the table lists all attempted targets" — every listed platform is actually published. - **README** — lists the musl archive (it ships and was omitted) and points macOS users at building from source. ## The debt this surfaces Not the missing binaries — the untested code. Windows has the `windows-check` cross-compile gate; macOS has no equivalent, so the `#[cfg(target_os = "macos")]` paths in `watcher.rs` (FSEvents recursive watch) and `lifecycle.rs` (flock / stale-PID) are compiled by **nothing** in CI and can bit-rot green. A check-only gate is not a cheap substitute: `cargo check` still runs build scripts, and the seven `tree-sitter-*` grammar crates each compile C via `cc`, so even checking needs a darwin C toolchain (osxcross + Apple SDK). #59 lays out the three options. ## Verification No behaviour change intended, and checked rather than assumed: - YAML parsed — the enabled matrix is the same 4 entries (`linux-x86_64`, `linux-x86_64-musl` optional, `linux-aarch64`, `windows-x86_64`). - The release-notes `BODY` construction was **executed** with `TAG`/`SERVER_URL`/`REPO` set, and the rendered markdown inspected — shell string concatenation across ~15 `BODY+=` lines is easy to get subtly wrong. - Confirmed no stale "best-effort"/"attempted targets" wording remains. The `macos-*` `case` arms in the packaging and README steps are deliberately **kept** so re-enabling is a pure uncomment. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy
build: defer macOS release builds explicitly (#59)
All checks were successful
CI / cargo fmt (pull_request) Successful in 21s
CI / OSS corpus (nightly) (pull_request) Has been skipped
CI / OSS corpus tier-3 scale (weekly) (pull_request) Has been skipped
CI / cargo clippy (pull_request) Successful in 49s
CI / cargo check (MSRV 1.88) (pull_request) Successful in 1m49s
CI / cargo check (windows-gnu) (pull_request) Successful in 1m51s
CI / cargo deny (pull_request) Successful in 3m11s
CI / cargo test (pull_request) Successful in 2m33s
98fe85c84d
macOS artifacts have not shipped since v0.8.4, but the workflow told two
contradictory stories: the header listed macos-x86_64/macos-aarch64 as
attempted "best-effort" targets while the matrix entries themselves were
commented out. Make the deferral the documented position.

- release.yml header: split SHIPPED (4 artifacts) from DEFERRED (both
  macOS targets + windows-aarch64), and record WHY commenting out is the
  right mechanism — a matrix entry whose runner label has no registered
  runner never fails, it queues forever and hangs the run, and
  continue-on-error tolerates failures rather than never-scheduled jobs.
  Someone will otherwise "simplify" this back into `optional: true`.
- Record the real debt: unlike Windows, which has the `windows-check`
  cross-compile gate, the #[cfg(target_os = "macos")] paths in watcher.rs
  (FSEvents recursive watch) and lifecycle.rs (flock / stale-PID) are
  compiled by nothing in CI and can bit-rot green. A check-only gate is
  not a cheap fix: `cargo check` runs build scripts, and the seven
  tree-sitter-* grammars compile C via `cc`, so even checking needs a
  darwin C toolchain.
- Release notes: state plainly that macOS is not built and point at #59,
  instead of "added once a macOS runner is registered", which read as an
  imminent promise. Also stop calling the table "all attempted targets" —
  every listed platform is actually published.
- README: list the musl archive (it ships and was omitted) and tell macOS
  users to build from source.

No behaviour change: the enabled matrix is the same 4 entries, verified
by parsing the YAML, and the rendered notes body was checked by
executing the BODY construction.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012MHQAsEFs3eLYoSKygkmzy
All checks were successful
CI / cargo fmt (pull_request) Successful in 21s
CI / OSS corpus (nightly) (pull_request) Has been skipped
CI / OSS corpus tier-3 scale (weekly) (pull_request) Has been skipped
CI / cargo clippy (pull_request) Successful in 49s
CI / cargo check (MSRV 1.88) (pull_request) Successful in 1m49s
CI / cargo check (windows-gnu) (pull_request) Successful in 1m51s
CI / cargo deny (pull_request) Successful in 3m11s
CI / cargo test (pull_request) Successful in 2m33s
This pull request has changes conflicting with the target branch.
  • .forgejo/workflows/release.yml
View command line instructions

Manual merge helper

Use this merge commit message when completing the merge manually.

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin docs/defer-macos-build:docs/defer-macos-build
git switch docs/defer-macos-build

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch master
git merge --no-ff docs/defer-macos-build
git switch docs/defer-macos-build
git rebase master
git switch master
git merge --ff-only docs/defer-macos-build
git switch docs/defer-macos-build
git rebase master
git switch master
git merge --no-ff docs/defer-macos-build
git switch master
git merge --squash docs/defer-macos-build
git switch master
git merge --ff-only docs/defer-macos-build
git switch master
git merge docs/defer-macos-build
git push origin master
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
h-dv/code-index!60
No description provided.