cd.yml fails on a duplicate run: "nothing to commit" is treated as an error #101
Closed
opened 2026-08-22 06:23:13 +00:00 by mathias
·
1 comment
No Branch/Tag Specified
main
fix/pipeline-writes-158
fix/edit-path-io-192
fix/create-regular-188
fix/guard-special-179
fix/linkcheck-keeps-write-178
fix/write-dir-redirect-173
fix/tunnel-detect-174
fix/pipeline-root-157
w3/154-mcp-auth-wiring
fix/tunnel-traversal
test/in-brain-targets-171
fix/brain-scan-root-157
fix/graph-wiki-root-157
fix/vectorstore-root-157
fix/notes-root-157
fix/search-root-157
fix/brainwide-root-157
fix/raw-symlinks-153
feat/symlink-tripwire-157
fix/rest-auth-149
fix/123-brain-edit-envelope-check
feat/106-page-aware-extraction
fix/105-source-drift-on-main
fix/104-surface-merge-conflicts-on-main
agent/b1-compile-on-ingest
agent/104-surface-merge-conflicts
agent/105-source-drift
agent/107-loud-unconfigured-alerting
feat/brain-read-edit
fix/capture-i1-refusal-names-target
renovate/configure
feat/consolidate-single-harness
icebox/cmd-routing
feat/brain-pending-promote
fix/close-session-classification-refresh
fix/capture-summarywriter
v0.24.0
v0.23.1
v0.23.0
v0.22.0
v0.21.1
v0.21.0
v0.20.1
v0.20.0
v0.19.1
v0.19.0
v0.18.4
v0.18.3
v0.18.2
v0.18.1
v0.18.0
v0.17.0
v0.16.1
v0.16.0
v0.15.0
v0.14.0
v0.13.2
v0.13.1
v0.13.0
v0.12.1
v0.12.0
v0.11.2
icebox/cmd-routing-2026-07-01
v0.11.1
v0.11.0
v0.10.0
v0.9.0
v0.8.0
v0.7.0
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.0
v0.1.0
Labels
Clear labels
agent/ready
blocked/client
blocked/supplier
blocked/upstream
risk/high
risk/low
risk/medium
size/l
size/m
size/s
size/xs
status:dispatch
status:dispatched
status:review
status:reviewing
type/chore
type/decision
type/docs
type/feat
type/fix
type/ops
type/research
type/test
Meets the agent-ready contract; authorizes unattended execution
Waiting on the client
Waiting on a supplier
Waiting on an upstream project or vendor
Irreversible, security-relevant, or control plane
Reversible, local, test-covered
Touches shared state, deploys or data
Too big - split it
Under two days
Under half a day
Under an hour
Maintenance, no behaviour change
Human decision required; never agent/ready
Documentation only
New capability
Corrects broken behaviour
Infrastructure, deploy, runtime
Investigate; output is a finding, not code
Test coverage only
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: mathias/hyperguild#101
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Seen merging #98 and #99 back to back on 2026-08-22.
What happened
Two merges landed within a couple of minutes. Each CI run's completion triggered
cd.ymlviaworkflow_run, and both CD runs resolvedgithub.shato the same branch head (b6ceccc). So:ingestion:b6ceccc, pushed it, bumpedk3s/apps/supervisor/ingestion-deployment.yaml, committed, pushed. Deploy succeeded — pod is running that image, 0 restarts.The deploy was correct and complete. CD still shows red on
main.Why it is worth fixing rather than shrugging at
A red CD run that means "the deploy was already done" is the most expensive kind of false alarm: it trains you to skim past CD failures, and the next red one will be real. It also cost me a log-dive during a routine merge to establish that production was fine.
The build work is duplicated too — a second full
buildctl+skopeo copyof a byte-identical image.Fix shape
In the "Update infra repo" step, treat an empty diff as success:
git commit --allow-emptywould also exit 0, but it creates a pointless commit in the infra repo every time — worse than the check.Optionally add concurrency control so the duplicate run does not do the build work at all:
Note
cancel-in-progress: truecancels the first run mid-flight, which is wrong here — the first run is the one doing the real work.false(queue) is the safer choice, or leave concurrency alone and just make the commit step idempotent, which is the minimal fix.Acceptance
caveman: robot not cry when work already doneRisk: LOW — CI-only change, no runtime effect.
Refs: runs 4098 (success) / 4099 (failure),
.gitea/workflows/cd.yml.Duplicate of #118 (same defect, reported independently ~3 weeks apart), which was fixed and closed 2026-09-17 — this issue just never got linked/closed alongside it.
Verified current
.gitea/workflows/cd.yml's "Update infra repo" step:git diff --cached --quietidempotency check is in place exactly as this issue's fix-shape suggested, with a comment explicitly citinghyperguild#118and explaining the two known no-op sources (manual re-run, and a since-removed tag-push CI run that used to shadow the branch-push one for the same sha).Closing as resolved via #118.
git commit --allow-emptywas correctly avoided per this issue's own note.🤖 Generated with Claude Code
Created via git-mcp on behalf of @mathias