Merging a release-labeled PR should BE the release — auto-tag + publish on merge (box#96 twin) #111
Labels
No labels
blocked
blocker:ci-red
blocker:conflict
blocker:drill-pending
blocker:unrequested
bug
claimed
documentation
enhancement
epic
merge-next
needs-triage
ready
release
scope:apply
scope:capture
scope:coolify-api
scope:fleet
scope:manifest
scope:secrets
stale
state:addressing
state:bots-reviewing
state:building
state:needs-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: heavy-duty/cast#111
Loading…
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?
cast twin of heavy-duty/box#96 — full design and rationale there.
Summary: the agent's ceremony PR carries the
releaselabel and the bumped version; the maintainer's merge is the ship decision. Apull_request: closedworkflow (merged + labeled) asserts, fail-loud: non--devversion → version changed in this PR (the-devinterlock) → changelog top section matches and extracts viarelease-notes.sh→ no existing tag/release. Then, same job: API-tag the merge commit, build the prebuiltcast-X.Y.Z.tgzexactly as the tag-push workflow does today (npm ci && npm run build && npm prune --omit=dev), and publish with the asset attached. Existing tag-push path stays as manual fallback.cast specifics: version lives in
package.json(read via node, never regex — thepkg_versiondiscipline); note the first-release edge (0.1.0 never carried-dev, so the "version changed" interlock correctly wouldn't fire for cast#110 — that ceremony ships manually; the automation applies from 0.1.1 on).🤖 From the release-ceremony retro with the operator.