Repository navigation
ci: add release-cut dispatch workflow - #607
Merged
Merged
Conversation
Automates the cut half of Decision #61. A signed repository_dispatch from the Sprint & Portfolio Board runs scripts/release.py in dry-run or push mode. main requires status checks, so push mode commits the cut to release/vX.Y.Z and opens a PR instead of pushing main. When that PR merges, the tag job tags vX.Y.Z on the merged commit and release.yml publishes. Pushes use RELEASE_BOT_TOKEN because GITHUB_TOKEN pushes do not trigger CI or release.yml. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HmnWvKXBkBwojDWM3LvxND
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
.github/workflows/release-cut.yml, the automated cut half of Decision #61. The publish half (release.yml, fired by the vX.Y.Z tag) is unchanged. The same file goes into bothai-identity-platformandAI-Identity.A signed
repository_dispatch(event_type: release-cut) from the Sprint & Portfolio Board runsscripts/release.py:release.py X.Y.Z --dry-run. The output goes to the job summary.release.py X.Y.Zwithout--pushcreates the cut commit. That commit is pushed torelease/vX.Y.Zand achore(release): cut X.Y.ZPR is opened.pyproject.tomlruns thetag-releasejob. If pyproject names a version that has a## [X.Y.Z]CHANGELOG header and no tag yet, the job tags the merged commit. The tag startsrelease.yml.Changes from the panel's draft workflow, and why:
mainrequires status checks, and the platform repo enforces them for admins. A directgit push origin mainfrom the runner would be rejected; AI-Identity 0.6.0 went through chore(release): cut 0.6.0 #576 for the same reason.RELEASE_BOT_TOKEN, notGITHUB_TOKEN. A push or PR made withGITHUB_TOKENdoes not trigger workflows, so CI would never run on the release PR and the tag would never startrelease.yml. It is also the checkout token, because checkout's auth header overrides credentials in a push URL.ci.yml. The draft ranpip install -e .[dev], but there is no build backend and nodevextra. The platform installs the hash-pinned locks pluscommon/and sets the same test env. AI-Identity installsrequirements-dev.txtplus pytest, httpx and cryptography. Node andnpm cirun whendashboard/package.jsonexists, becauserelease.pyfails withoutdashboard/node_modules.permissions: {}, withcontents: readper job (writes go through the bot token). Actions are pinned to the same SHAs as the other workflows.run-cutreads mode and version from the verify job's outputs, not from the raw payload.actoris validated before it goes into the summary.sigis read with jq.Linear
AI-
Testing
actionlint1.7.7: clean.mode/versionto the outputs; a wrong signature fails with "HMAC signature does not match".RELEASE_HMAC_TOKENandRELEASE_BOT_TOKENset and a dry-run dispatch from the panel.Checklist
CHANGELOG.mdupdated under[Unreleased](required forfeatandfixPRs): n/a, CI change.envfiles in the diffAGENTS.mdupdated if behavior or setup changed: the sprint-close runbook should point at the panel once this is liveGenerated by Claude Code