Skip to content

fix(ci): let the fleet-agent release builds run to completion - #712

Merged
PeronGH merged 1 commit into
masterfrom
fix/ci-macos-release-build-timeout
Sep 11, 2026
Merged

fix(ci): let the fleet-agent release builds run to completion#712
PeronGH merged 1 commit into
masterfrom
fix/ci-macos-release-build-timeout

Conversation

@PeronGH

@PeronGH PeronGH commented Sep 11, 2026

Copy link
Copy Markdown
Member

Problem

The fleet-agent-v0.1.5 release published with no assets. The Build macOS amd64 job hit the build step's own timeout-minutes: 15 while still compiling dependencies, which failed the job and skipped both Upload to CDN and Publish Release Assets:

2026-09-11T08:17:20Z  Compiling hostname v0.4.2
2026-09-11T08:21:11Z  ##[error]The action 'Build arcbox-fleet-agent (release)' has timed out after 15 minutes.

Run: https://github.com/arcboxlabs/arcbox/actions/runs/34577407167

latest.json still reports v0.1.4 and every v0.1.5/arcbox-fleet-agent-* URL 404s, so the gateway pin cannot move to 0.1.5.

Why 15m was never enough

All four builds in that run were cold — every Cache cargo step completed in 1–2s, restoring nothing:

Job Build step Old cap
macOS arm64 (macos-26) 9m02s 15m
macOS amd64 (macos-26-intel) timed out at 15m00s 15m
Linux amd64 5m21s 10m
Linux arm64 5m51s 10m

The Intel runner needs roughly twice the Apple-silicon time for the same cold tree, so its cap was the tightest one against the slowest machine.

The cache could never have helped

The only fleet-agent cache entry that exists:

refs/heads/refs/tags/fleet-agent-v0.1.5   macOS-cargo-fleet-agent-arm64-2826b78…   342 MB

A run restores caches from its own ref plus the default branch. This workflow only runs on tags, and nothing on master writes the *-cargo-fleet-agent-* prefix, so each release saved into a scope the next release cannot read. Guaranteed 0% hit rate, plus a 342 MB write per release against a cache budget already at its 10 GB ceiling.

Warming it on master (the warm-release-cache / cache/restore split that ci.yml and release.yml already use) would not pay off here either: upload-cdn and publish both needs: [version, build-macos, build-linux], so the release gates on the slowest leg. In the v0.1.4 run arm64 finished at 08:59:01 and sat idle until Intel completed at 09:04:16 — publish started 3s after Intel. Speeding up arm64 saves no release wall-clock.

Changes

  • Drop the step-level timeout-minutes from both build steps. The job caps are the only bound these builds need.
  • Raise the job caps to 60m (macOS) and 30m (Linux) as hung-runner backstops, with headroom for the agent's dependency tree to keep growing.
  • Delete both dead Cache cargo steps, with comments recording why there is no cache here.

Install Protobuf compiler keeps its 5m cap (guards a network hang on a 10x-billed runner), and the musl-cross toolchain cache stays (tag-scoped too, but its miss path is a 6s download).

Verification

actionlint .github/workflows/release-fleet-agent.yml passes. Not exercised against a real release — fleet-agent-v0.1.5 needs a workflow_dispatch re-run after this merges. The workflow builds needs.version.outputs.tag rather than the dispatch ref, so dispatching from master still builds the tag's tree.

Follow-ups (not in this PR)

  • Cache budget. ~10.4 GB against a 10 GB cap, with PR chore(master): release 0.8.0 #648 holding ~6 GB in two 3 GB macOS entries. Under that pressure GitHub evicts LRU, so master-scoped warm entries that release.yml depends on disappear too. A pull_request: closed cleanup workflow would fix it permanently.
  • macOS-cargo-release-* encodes no arch. runner.os is macOS on both arm64 and Intel, so an Intel job saving under that key would silently poison the arm64 release restore. Nothing does today; the key shouldn't leave it possible.
  • Cross-compiling both darwin targets on macos-26 would take Intel off the critical path entirely and collapse the matrix to one job. Nothing in the workflow executes the binary, so it only codesigns and uploads — worth a look if release wall-clock matters.

Copilot AI lite review requested due to automatic review settings September 11, 2026 08:34

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@greptile-apps

greptile-apps Bot commented Sep 11, 2026

Copy link
Copy Markdown

RetriggerConfidence Score: 5/5

The PR appears safe to merge; the prior documentation concern is fully addressed and no new actionable issue remains.

Findings

  1. P2 Cache rationale is inaccurate

Summary

  • Raises macOS and Linux job-level timeout backstops.
  • Removes narrower build-step timeouts that previously terminated valid cold builds.
  • Removes Cargo caches that tag-scoped releases could not reuse.
  • Removes the inaccurate cache-warming rationale identified in the previous review.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    T[Fleet Agent tag or dispatch] --> M[macOS matrix build<br/>60-minute job cap]
    T --> L[Linux matrix build<br/>30-minute job cap]
    M --> G[All platform builds complete]
    L --> G
    G --> U[Upload to CDN]
    G --> P[Publish release assets]
Loading

Reviews (2) · Last reviewed commit: "fix(ci): let the fleet-agent release bui..."

Comment thread .github/workflows/release-fleet-agent.yml Outdated
pullfrog[bot]
pullfrog Bot previously approved these changes Sep 11, 2026

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes — one file, .github/workflows/release-fleet-agent.yml. I verified the PR's premise against the job data of the actual failed run (34577407167) rather than taking the body's word for it; every timing and cache claim checks out.

  • Job timeout caps raised (30→60m macOS, 20→30m Linux) — repositioned as hung-runner backstops, with a comment recording why no cache sits above them. Healthy cold builds measured 9m02s (macOS arm64), ~5m21s–5m51s (Linux); the new caps give 3–4× headroom over the slowest observed leg.
  • Step-level build timeouts dropped — the Intel leg timed out exactly at its 15m step cap (build step 08:05:59 → 08:21:11) while still compiling, which alone broke the v0.1.5 release: Upload to CDN and Publish Release Assets both needs the whole matrix and were skipped. The job cap is the only bound these builds need.
  • Both Cache cargo steps deleted — correct call. The workflow only runs on tag refs; GitHub restores caches from the run's own ref or the default branch only; and nothing on master writes the *-cargo-fleet-agent-* prefix (grepped all workflows), so each entry was a guaranteed miss plus a 342 MB write per release — against a cache budget the author's own follow-ups show is already over its 10 GB cap. No dangling steps.cache references remain; the retained musl-cross cache and its cache-hit guard are untouched.

Verification: YAML parses clean and actionlint reports no diagnostics on the changed lines. (1.7.7 does flag the pre-existing macos-26/macos-26-intel runner labels as unknown — stale bundled label DB; both labels demonstrably ran in the real failed run.) The fleet-agent-v0.1.5 workflow_dispatch re-run after merge, noted in the PR body, is the right remaining step — the workflow builds needs.version.outputs.tag, so dispatching from master still builds the tag's tree.

Pullfrog  | View workflow run | Using openai-compatible/@cf/zai-org/glm-5.3-flash𝕏

The macOS build step's own 15m cap killed the Intel job mid-dependency
on v0.1.5, skipping the CDN upload and publishing a release with no
assets. Job caps are the only bound these builds need.

The cargo caches went with it. They keyed on a prefix nothing outside
this workflow writes and saved under the release tag's own ref scope,
so no release could ever restore one — every build was already cold,
at the cost of a 342 MB write per release against a cache budget
that is already at its 10 GB limit.
Copilot AI review requested due to automatic review settings September 11, 2026 08:40
@PeronGH
PeronGH force-pushed the fix/ci-macos-release-build-timeout branch from 18382b2 to 3c04ce9 Compare September 11, 2026 08:40

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@PeronGH
PeronGH merged commit d8f02a6 into master Sep 11, 2026
15 checks passed
@PeronGH
PeronGH deleted the fix/ci-macos-release-build-timeout branch September 11, 2026 08:44
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.

2 participants