fix(ci): resolve publish channel from trigger to end release 409 race #51

Merged
David merged 1 commit from fix/GOV-14-trigger-derived-publish-channels into main 2026-06-20 13:08:00 +02:00
Owner

What

Resolve the generic-package publish channel from the workflow trigger instead of git describe, so the two events of a release commit (push to main + v* tag push) write disjoint channels.

  • Tag push (github.ref_type == 'tag') publishes <version> (plus the stable channel via the existing release logic).
  • Main push publishes only latest.

Why

The workflow triggers on both branches: [main] and tags: [v*]. A release commit fires both events, and each previously resolved the same [<version>, latest] set from git describe, so the two runs raced to DELETE-then-PUT the immutable <version> generic-package file. When their publishes interleaved, the second hit 409 package file already exists. This is the same intermittent release-CI failure diagnosed in CLAUDE-122; root cause and the governance-template fix are tracked in GOV-13, with this repo's rollout under GOV-14.

latest still tracks the release commit because the tag sits on the same SHA already pushed to main.

Scope

Single workflow file; no Rust or get-tags.nu change. Full convergence on the trigger-derived get-tags.nu --mode helper will follow when this repo syncs the GOV-13 template.

Refs GOV-14, GOV-13, CLAUDE-122.

## What Resolve the generic-package publish channel from the workflow trigger instead of `git describe`, so the two events of a release commit (push to `main` + `v*` tag push) write disjoint channels. - Tag push (`github.ref_type == 'tag'`) publishes `<version>` (plus the `stable` channel via the existing release logic). - Main push publishes only `latest`. ## Why The workflow triggers on both `branches: [main]` and `tags: [v*]`. A release commit fires both events, and each previously resolved the same `[<version>, latest]` set from `git describe`, so the two runs raced to DELETE-then-PUT the immutable `<version>` generic-package file. When their publishes interleaved, the second hit `409 package file already exists`. This is the same intermittent release-CI failure diagnosed in CLAUDE-122; root cause and the governance-template fix are tracked in GOV-13, with this repo's rollout under GOV-14. `latest` still tracks the release commit because the tag sits on the same SHA already pushed to `main`. ## Scope Single workflow file; no Rust or `get-tags.nu` change. Full convergence on the trigger-derived `get-tags.nu --mode` helper will follow when this repo syncs the GOV-13 template. Refs GOV-14, GOV-13, CLAUDE-122.
fix(ci): resolve publish channel from trigger to end release 409 race
All checks were successful
Check / fmt + clippy + build + tests (pull_request) Successful in 21s
Create release / Create release from merged PR (pull_request) Has been skipped
223c290e00
The build-binary workflow triggers on both a push to main and the v* tag push. A release commit is simultaneously both, so each event resolved the same [<version>, latest] channel set from git describe and the two runs raced to DELETE-then-PUT the immutable <version> generic-package file, producing an intermittent concurrent-PUT 409 (the failure diagnosed in CLAUDE-122).

Resolve the publish channel from the workflow trigger instead of git describe: a tag push publishes <version> (plus the stable channel on release), a main push publishes only latest. The two events of a release commit now write disjoint channels and never race on the same immutable file. latest still tracks the release commit because the tag sits on the same SHA already pushed to main.

#GOV-14

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
David merged commit 3fbd5a5fe0 into main 2026-06-20 13:08:00 +02:00
David deleted branch fix/GOV-14-trigger-derived-publish-channels 2026-06-20 13:08:00 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
pandoras-box/monkey!51
No description provided.