bug(_release.yml + release-prep): missing git identity setup on update path — release-prep.sh's git commit fails on fresh runner #73
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#73
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
When the v0.4.0
_release.ymlreusable fires onpush:mainwithmode=update,release-prep.shruns in production semantics (post-#70 fix), gets all the way through CHANGELOG transition + VERSION bump + branch creation, then fails atgit commit:Surfaced live during the v0.4.0 dogfood cut (second attempt; first attempt surfaced #70). Run: actions/runs/6231.
Root cause (verified at source)
The v0.3.x
_release-prep.yml@v0.3.5has an explicit step that sets git identity before invoking the script:The v0.4.0
_release.yml'sact on decisionstep has git-identity setup only in the CUT path (for the manifest commit), but NOT in the UPDATE path (beforerelease-prep.shinvocation).So on a fresh runner container the runner's user is
root@<container-id>.(none)with no global git config →git commitinside release-prep.sh fails with "Author identity unknown" → exit 128.This is structurally the same class as #70: a v0.3.x safeguard wasn't carried forward into slice 1b's
_release.yml.Tested fix surface — two complementary fixes
(1)
_release.ymlupdate-path git-identity setupMirror what v0.3.x's
_release-prep.ymldid + what_release.yml's cut path already does. Set git config at the top of the act step (works for both update + cut paths) instead of only in the cut branch.(2)
release-prep.shdefensive self-bootstrapIf
git config user.nameis unset, set a default. Keeps release-prep.sh self-contained re: git identity for ANY consumer (including future ones who might forget the YAML setup).Either fix alone unblocks the dogfood; both together is belt-and-suspenders.
Why slice 2's first-fire didn't catch this
Slice 2's first fire was
mode=noop(no release-relevant content since v0.3.5). The act step short-circuits noop before the git-commit-needing branches. The first attempt with content (post-#70 fix) silently dry-ran due to #70 (no real git commit). Only THIS attempt (post-#70-fix + production semantics) actually reaches thegit commitstep where the missing config bites.Sibling silent-failure-class lessons — n=5 now
3f9b3b6)Note: #73 is the FIRST in this series that's not silent — it's loud failure with exit 128. But the substrate-gap class is the same (v0.3.x safeguard not carried into slice 1b's reusable).
Path forward (Path Y consolidation — same as #70)
Fold this fix into v0.4.0 (no separate v0.3.7 cut needed):
v0.4.0-rc.3at the fix SHARefs
actions/runs/6231(workflow ran release-prep.sh in production semantics + got to git commit + failed exit 128)Filed: 2026-06-25 from live dogfood-catch.
forgejo-actions referenced this issue2026-06-25 20:49:00 +02:00