Skip to content

ci: evict parked pull request builds oldest first instead of a free-disk floor - #15039

Merged
teamleaderleo merged 2 commits into
mainfrom
ci/evict-parked
Sep 27, 2026
Merged

teamleaderleo merged 2 commits into
mainfrom
ci/evict-parked

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 27, 2026 •

Copy link
Copy Markdown
Collaborator

#15020 parked a pull request's build only while the volume had 140 GiB free. That is a fixed floor like the one glaeda#1322 removed from idle warming, so it's gone.

  • Parking is bounded only by its cap: 2 parked builds per root, 6 h each.
  • When space runs out, parked builds go first. keep that hits ENOSPC (from cp -c or copytree's text error) evicts every parked build on the mini, across all canonical roots, oldest first, then retries the clone once. With nothing to evict the error stands, as before.
  • owned_build_state.py evict-parked STORE [COUNT] evicts the COUNT oldest parked builds (all by default) so disk tooling such as glaeda-disk can reclaim them before anything else.
  • Main builds are never parked, so eviction never removes one.

Tests: tests/test_ci_owned_build_state.py covers the ENOSPC evict-and-retry and the oldest-first evict-parked CLI. The parking tests no longer mock free disk. A targeted -k run passes locally; CI runs the file.

🤖 Generated with Claude Code


Summary by cubic

Parks pull request builds without the previous 140 GiB free-disk floor; parking is now bounded only by the existing 2-per-root, 6-hour cap.

  • keep that hits ENOSPC evicts every parked build on the mini across all canonical roots (oldest first) and retries the clone once, removing the partial clone if it fails so its space isn't held until the next keep.
  • owned_build_state.py evict-parked STORE [COUNT] evicts parked builds oldest-first (all by default) so disk tooling can reclaim space.
  • Main builds are never parked, so eviction never removes one.

Written for commit cca806e. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • New Features
    • Pull-request builds can now be parked without requiring a fixed amount of free disk space.
    • When cloning DerivedData runs out of space, the system removes the oldest parked pull-request build and retries once. Main builds are not removed.
  • Documentation
    • Updated guidance to describe oldest-first eviction when space is needed.

…isk floor

#15020 parked a pull request's build only with 140 GiB free. There is no
floor now: parking is bounded by 2 per root and 6 h, and when space runs
out parked builds go first. `keep` that hits ENOSPC evicts every parked
build on the mini, oldest first, and retries the clone once;
`owned_build_state.py evict-parked STORE [COUNT]` does the same for disk
tooling. Main builds are never parked, so eviction never touches one.

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

cursor Bot commented Sep 27, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@github-actions

Copy link
Copy Markdown
Contributor

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

@coderabbitai

coderabbitai Bot commented Sep 27, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

Warning

Review limit reached

Next included review available in 3 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: 644e15e1-38c3-48bc-9cbd-92cd4eebba3a

📥 Commits

Reviewing files that changed from the base of the PR and between 756847a and cca806e.

📒 Files selected for processing (3)
  • docs/ci-runners.md
  • scripts/ci/owned_build_state.py
  • tests/test_ci_owned_build_state.py
✨ Finishing Touches
📝 Generate docstrings
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

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

cursor Bot commented Sep 27, 2026

Copy link
Copy Markdown

Bugbot is paused — on-demand spend limit reached

Bugbot uses usage-based billing for this team and has hit its on-demand spend limit.

A team admin can raise the spend limit in the Cursor dashboard, or wait for the next billing cycle to continue.

@teamleaderleo
teamleaderleo merged commit b78dae5 into main Sep 27, 2026
50 checks passed
@teamleaderleo
teamleaderleo deleted the ci/evict-parked branch September 27, 2026 18:03
@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for cca806ee59: every check was green at merge (14 verified; 16 skipped by policy). Full suite runs on main after merge.

rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 27, 2026
c490fb4 Add an opt-in subtle sidebar selection highlight (manaflow-ai#14890)
b78dae5 ci: evict parked pull request builds oldest first instead of a free-disk floor (manaflow-ai#15039)
31b6fc9 test: close the TabManagers the session snapshot tests create (manaflow-ai#15038)
e64eb93 ci: send every retry of an owned-mini job to Blacksmith, once (manaflow-ai#15035)
17f0f90 Test: pin persisted Kimi custom kind on exact remote restore (manaflow-ai#15034)
f9d5bb5 Switch between cmux and cmux NIGHTLY from inside the app (manaflow-ai#14995)
756847a sidebar: keep the selected row clear of the footer (manaflow-ai#15013)
1431a1e One dialog per close, and Feed banner clicks open the agent (manaflow-ai#14960)
74d4719 ci: route cli-product-tests to the gui runners like the shards (manaflow-ai#15011)
b78e8aa ci: park each pull request's build on its root and route its re-push back to it (manaflow-ai#15020)
60e45e7 web tests: run every child process asynchronously (manaflow-ai#15001)
55724f0 ci: side lanes take the light minis' side runners first (manaflow-ai#15019)
3be8bdd Restoring a remote workspace terminal hands it this machine's working directory (manaflow-ai#8634)
a9e555c Reattach 0.64.25 tmux-profile SSH workspaces after upgrading (manaflow-ai#14938)
fe20e20 fix: mark workspace-level notifications read on workspace focus (manaflow-ai#12427)

# Conflicts:
#	.github/workflows/app-host-test-rerun.yml
#	.github/workflows/auth-refresh-tests.yml
#	.github/workflows/ci-macos.yml
#	.github/workflows/ci.yml
#	.github/workflows/cloud-command-deadlines.yml
#	.github/workflows/cloud-machine-tests.yml
#	.github/workflows/cloud-task-local-tests.yml
#	.github/workflows/cmux-tui.yml
#	.github/workflows/iroh-v2.yml
#	.github/workflows/relay-tls.yml
#	.github/workflows/reload-build.yml
#	.github/workflows/remote-daemon.yml
#	.github/workflows/terminal-hang-diagnostics.yml
teamleaderleo added a commit that referenced this pull request Sep 28, 2026
Main landed this pull request's parking (#15020, #15039, #15056), distance
routing (#14949) and a refit (#15117) in its own form, so the conflicted
files take main's side; what still adds value comes back in the next
commits.

Co-Authored-By: Claude Opus 5.5 (1M context) <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