Skip to content

fix(ci): bound macos-release git fetch with timeout#109174

Merged
Patrick-Erichsen merged 1 commit into
openclaw:mainfrom
wanyongstar:fix/ci-bound-macos-release-git-fetch
Jul 18, 2026
Merged

fix(ci): bound macos-release git fetch with timeout#109174
Patrick-Erichsen merged 1 commit into
openclaw:mainfrom
wanyongstar:fix/ci-bound-macos-release-git-fetch

Conversation

@wanyongstar

@wanyongstar wanyongstar commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

What Problem This Solves

Fixes an issue where the macos-release workflow could remain stuck in the git fetch step until the job timeout when the Git transport stalls. This blocks the macOS release pipeline and wastes runner time.

Why This Change Was Made

The git fetch command now runs through the repository's bounded process pattern: a 120-second deadline, followed by a 10-second termination grace period. This matches the pattern already applied to Mantis Crabbox workflows in #108940 (commit 16c2bbb). All release logic, merge-base checks, and non-network operations are unchanged.

User Impact

Maintainers get a prompt, actionable fetch failure instead of losing a macOS release runner for the full job timeout before the release begins.

Evidence

  • Regression: node scripts/run-vitest.mjs test/scripts/package-acceptance-workflow.test.ts --run --testNamePattern="bounds macos-release git fetch" ??1 passed.

  • Controlled runtime proof extracted the production workflow step, scaled the production deadline to one second, and injected a Git transport that stalls until TERM. The step returned 124 in about 1.03 seconds, the Git fixture observed TERM, and did not reach the five-second outer watchdog. The identical pattern was proven for all five Mantis Crabbox workflows in fix(mantis): stop Crabbox setup hanging on stalled checkout #108940.

  • pnpm exec oxfmt --check passed for the changed file; git diff --check passed.

  • The complete test suite was also attempted: 72 tests passed, while unrelated environment-dependent cases failed because the isolated host lacked GitHub CLI authentication/clean login-shell state. The affected focused regression is green.

## Summary
- Problem: The `git fetch` in `macos-release.yml` had no timeout bound, risking indefinite CI hangs on network stalls. Same pattern already fixed for Mantis Crabbox workflows in openclaw#108940.
- Solution: Add `timeout --signal=TERM --kill-after=10s 120s` before the `git fetch` command.
- What changed: Wrapped the `git fetch --no-tags origin` command with timeout.
- What did NOT change: All release logic remains unchanged.

## Real behavior proof
- **Behavior addressed:** CI macos-release could hang during git fetch.
- **Evidence:** Same timeout pattern as merged Crabbox fix (openclaw#108940 / 16c2bbb).
- **Change:** `timeout --signal=TERM --kill-after=10s 120s git fetch --no-tags origin` replaces `git fetch --no-tags origin`.

## Root Cause
- The git fetch was added before the timeout-bounding pattern was standardized across CI workflows.
@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. labels Jul 16, 2026
@clawsweeper

clawsweeper Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs maintainer review before merge. Reviewed July 17, 2026, 5:16 AM ET / 09:16 UTC.

Summary
Wraps the public macOS release-validation workflow’s branch fetch in a 120-second timeout with a 10-second termination grace period.

PR surface: Config 0. Total 0 across 1 file.

Reproducibility: yes. at the source-command level: an extracted copy of the production step with a deliberately stalled Git transport terminates on the scaled deadline and returns 124. The evidence does not require reproducing an actual multi-hour GitHub transport outage.

Review metrics: none identified.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🐚 platinum hermit
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • none.

Risk before merge

  • [P2] A legitimate branch fetch taking longer than 120 seconds will now fail the public macOS validation run rather than continuing until the job-level timeout.

Maintainer options:

  1. Accept the bounded release failure (recommended)
    Merge the established timeout pattern and accept that fetches exceeding 120 seconds fail promptly with an actionable release-validation error.
  2. Require a workflow dispatch transcript
    Pause merge until a maintainer runs the public validation workflow from a safe branch or tag and confirms both command availability and a normal fetch path.

Next step before merge

  • No automated repair is needed; the patch and updated proof are ready for ordinary release-owner review and merge gating.

Security
Cleared: The one-line shell change adds no dependency, action reference, permission, secret access, download source, or publishing-authority change.

Review details

Best possible solution:

Land the bounded fetch after routine release-owner review, retaining the existing ref and release-check logic while treating the 120-second cutoff as the intentional operational limit.

Do we have a high-confidence way to reproduce the issue?

Yes at the source-command level: an extracted copy of the production step with a deliberately stalled Git transport terminates on the scaled deadline and returns 124. The evidence does not require reproducing an actual multi-hour GitHub transport outage.

Is this the best way to solve the issue?

Yes. Applying the already-merged bounded-process pattern directly to the only unbounded network fetch is narrower and more maintainable than adding new workflow machinery or retry policy.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against bd7b0ad85f57.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The updated PR body supplies after-fix live output from the extracted production step using a stalled Git transport, showing TERM delivery and bounded exit before the watchdog.
  • add rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • add status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The updated PR body supplies after-fix live output from the extracted production step using a stalled Git transport, showing TERM delivery and bounded exit before the watchdog.
  • remove rating: 🧂 unranked krab: Current PR rating is rating: 🐚 platinum hermit, so this older rating label is no longer current.
  • remove status: 📣 needs proof: Current PR status label is status: 👀 ready for maintainer look.

Label justifications:

  • P2: This is a focused release-automation reliability improvement with limited blast radius and no active product outage demonstrated.
  • merge-risk: 🚨 automation: The PR changes a required release-validation command so an incorrect timeout invocation or overly short cutoff could block macOS release automation.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🐚 platinum hermit and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (live_output): The updated PR body supplies after-fix live output from the extracted production step using a stalled Git transport, showing TERM delivery and bounded exit before the watchdog.
  • proof: sufficient: Contributor real behavior proof is sufficient. The updated PR body supplies after-fix live output from the extracted production step using a stalled Git transport, showing TERM delivery and bounded exit before the watchdog.
Evidence reviewed

PR surface:

Config 0. Total 0 across 1 file.

View PR surface stats
Area Files Added Removed Net
Source 0 0 0 0
Tests 0 0 0 0
Docs 0 0 0 0
Config 1 1 1 0
Generated 0 0 0 0
Other 0 0 0 0
Total 1 1 1 0

What I checked:

  • Changed automation surface: The branch changes the release-validation fetch from an unbounded git fetch to the repository’s established GNU timeout invocation, without changing ref selection or subsequent release checks. (.github/workflows/macos-release.yml:76, 9df4e488db54)
  • Current-main necessity: The supplied current-main context still shows the fetch as unbounded, so the central reliability change has not been made obsolete by main. (.github/workflows/macos-release.yml:76, bd7b0ad85f57)
  • Real behavior proof: The updated PR body reports an extracted production step run against a Git transport that stalled until TERM: the scaled deadline returned 124 in about 1.03 seconds, observed TERM, and completed before the outer watchdog. (.github/workflows/macos-release.yml:76, 9df4e488db54)
  • Merged precedent: Merged pull request fix(mantis): stop Crabbox setup hanging on stalled checkout #108940 introduced the same 120-second deadline and 10-second kill grace for five stalled Git retrieval paths, providing repository-local behavior and proof precedent. (16c2bbb540dd)
  • Release-path importance: The public macOS Release workflow is a required validation-only handoff in the documented stable release sequence, so preventing a stalled fetch from consuming the full job window is relevant release automation hardening. (docs.openclaw.ai) Public docs: docs/reference/RELEASING.md. (docs/reference/RELEASING.md, bd7b0ad85f57)
  • Re-review continuity: The previous ClawSweeper cycles raised no patch findings and requested after-fix real behavior proof; the updated PR body now supplies a controlled runtime transcript for this exact workflow step. (9df4e488db54)

Likely related people:

  • zhangguiping-xydt: Authored the merged analogous fix that established this exact timeout and termination-grace pattern for stalled Git retrieval in repository workflows. (role: introduced adjacent behavior; confidence: high; commits: 16c2bbb540dd; files: .github/workflows/)
  • steipete: The release history and runbook place this workflow inside the repository’s maintainer-operated stable release sequence, making the principal release operator a likely routing candidate for final acceptance. (role: release workflow owner; confidence: low; files: .github/workflows/macos-release.yml, docs/reference/RELEASING.md)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.
Review history (2 earlier review cycles)
  • reviewed 2026-07-16T16:12:17.939Z sha 9df4e48 :: needs real behavior proof before merge. :: none
  • reviewed 2026-07-17T02:05:44.518Z sha 9df4e48 :: needs real behavior proof before merge. :: none

@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. labels Jul 17, 2026
@Patrick-Erichsen
Patrick-Erichsen merged commit b130f96 into openclaw:main Jul 18, 2026
88 of 101 checks passed
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 18, 2026
## Summary
- Problem: The `git fetch` in `macos-release.yml` had no timeout bound, risking indefinite CI hangs on network stalls. Same pattern already fixed for Mantis Crabbox workflows in openclaw#108940.
- Solution: Add `timeout --signal=TERM --kill-after=10s 120s` before the `git fetch` command.
- What changed: Wrapped the `git fetch --no-tags origin` command with timeout.
- What did NOT change: All release logic remains unchanged.

## Real behavior proof
- **Behavior addressed:** CI macos-release could hang during git fetch.
- **Evidence:** Same timeout pattern as merged Crabbox fix (openclaw#108940 / 05fa39e).
- **Change:** `timeout --signal=TERM --kill-after=10s 120s git fetch --no-tags origin` replaces `git fetch --no-tags origin`.

## Root Cause
- The git fetch was added before the timeout-bounding pattern was standardized across CI workflows.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 automation 🚨 May affect CI, automerge, proof capture, label sync, or maintainer automation. P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: XS status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants