Skip to content

ci: take the build-fleet host lock for nightly mini builds - #14233

Merged
teamleaderleo merged 2 commits into
mainfrom
ci/nightly-mini-host-lock
Sep 24, 2026
Merged

teamleaderleo merged 2 commits into
mainfrom
ci/nightly-mini-host-lock

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 24, 2026 •

Copy link
Copy Markdown
Collaborator

The nightly lane's runner is now on cmux15, a 48 GB M4 Pro (cmux15-nightly in cmux-nightly-mini). cmux15 is also a worker for the build-fleet controller, which can start a dev build while a nightly is compiling. Both would then run at once and split the machine.

The controller serializes its own builds with /Users/Shared/cmux-build-fleet/bin/with-host-lock (a flock on /Users/Shared/cmux-build-fleet/host.lock). The producer now runs its xcodebuild under that same lock when the tool exists, so a nightly and a dev build take turns.

  • Hosted and fork runs: no lock tool, so they build exactly as before.
  • Lock path: uses bin/with-host-lock, not recipes/apfs-with-host-lock. recipes is a symlink, and its lock path doesn't resolve.
  • Exit 75: the lock refuses a job when free disk is below its floor (250 GiB on 48 GB hosts) and exits 75. The producer fails with a clear error, the router reports producer_failure, and the nightly compiles on Blacksmith.
  • Waiting: time spent waiting for the lock counts against NIGHTLY_MAC_MINI_EXECUTION_SECONDS. docs/ci/mac-fleet.md says so.
  • Bash 3.2: the macOS runner shell is bash 3.2, so the optional wrapper is expanded as ${lock[@]+"${lock[@]}"}, which is safe under set -u. Checked with /bin/bash.

Lock details come from the fleet manifest session, which checked the live workers (cmux15, cmux13s) read-only.

Tests: tests/test_ci_self_hosted_guard.sh, tests/test_nightly_mini_route.py, actionlint.

🤖 Generated with Claude Code


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Nightly mini builds now take the build-fleet host lock, so a nightly and a dev build take turns on the shared 48 GB runner instead of splitting it. Hosted and fork runs have no lock tool and build exactly as before, and a lock refusal (exit 75, free-disk floor) fails the producer with a clear error so the nightly falls back to Blacksmith.

  • Runs the producer's xcodebuild under /Users/Shared/cmux-build-fleet/bin/with-host-lock when the tool exists, using bin/ not the recipes/ symlink, whose lock path doesn't resolve.
  • Counts lock wait against NIGHTLY_MAC_MINI_EXECUTION_SECONDS; it falls back only when the wait overruns the budget, and reported build seconds include the wait.

Written for commit 8622dd2. Summary will update on new commits.

Review in cubic

A std mini that runs the nightly producer is also a build-fleet controller
worker. Build under /Users/Shared/cmux-build-fleet/bin/with-host-lock when it
exists, so a nightly and a dev build take turns instead of splitting one
48 GB machine. Hosted and fork runs have no lock tool and build as before.
A lock refusal (exit 75, free-disk floor) fails the producer with a clear
error and the router falls back to Blacksmith.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Sep 24, 2026 •

Copy link
Copy Markdown

Warning

Review limit reached

Next included review available in 4 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 7551b74a-9d64-4609-9783-47625c229d01

📥 Commits

Reviewing files that changed from the base of the PR and between 59fa5b9 and 8622dd2.

📒 Files selected for processing (2)
  • .github/workflows/nightly-mini-build.yml
  • docs/ci/mac-fleet.md

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

Say that the build seconds include any lock wait, word the exit 75 error
for what it is, and say a lock wait falls back only when it overruns the
execution budget.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo merged commit dddffea into main Sep 24, 2026
49 checks passed
@teamleaderleo
teamleaderleo deleted the ci/nightly-mini-host-lock branch September 24, 2026 14:21
rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 24, 2026
cd7a4cf Prepare iOS 1.0.6 beta compatibility release (manaflow-ai#14112)
2d9b4e8 test: skip dead persistent-SSH restore tests and fix relay-less legacy fixtures after manaflow-ai#14216 (manaflow-ai#14222)
df44058 ci: run focused cmuxTests against products CI already compiled (manaflow-ai#14229)
06ec6cb Stop unrelated defaults writes and pane geometry changes from re-evaluating chrome-heavy views (manaflow-ai#14058)
185d99e chore(cli): remove dead persistent SSH PTY startup path (manaflow-ai#14231)
dddffea ci: take the build-fleet host lock for nightly mini builds (manaflow-ai#14233)
f2106e5 test(cli): expect the client-side workspace ref resolution manaflow-ai#13964 added (manaflow-ai#14230)
59fa5b9 docs(ci): fix persistent-compile pilot runbook drift (manaflow-ai#14206)

# Conflicts:
#	.github/workflows/app-host-test-rerun.yml
#	.github/workflows/nightly-mini-build.yml
teamleaderleo added a commit that referenced this pull request Sep 24, 2026
…14243)

Reverts the owned-Mac nightly route (#14208, #14223, #14233). There is
no separate nightly lane or fallback: nightlies build on Blacksmith until
Glaeda routing (glaeda#1174) sends every job std > light > Blacksmith >
GitHub-hosted.

nightly.yml is back to its pre-lane Blacksmith path, keeping the later
nightly Sparkle key change (#14215). Signing, notarization and
publication are unchanged.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant