-
Notifications
You must be signed in to change notification settings - Fork 0
Release Process
DomainRaptor uses a three-branch release train driven by
release-please and a
trio of agents (@pr-opener, @pr-merger, @release-manager).
| Branch | Purpose | Who pushes |
|---|---|---|
feat/<topic> or feat/T###-<slug>
|
Single task or feature |
@task-implementer (or you) |
develop |
Integration trunk | Nobody directly. Only via merged PR from feat/*
|
release |
Release candidate / staging | Nobody directly. Only via merged PR from develop
|
main |
Production | Nobody directly. Only via merged PR from release, plus release-please's own versioning PR |
Direct push to develop, release or main is forbidden (rule #5 in
wiki/Installation.md tooling section + branch protection).
flowchart LR
F[feat/T###-slug] -->|squash PR| D[develop]
D -->|merge-commit PR| R[release]
R -->|merge-commit PR| M[main]
M -->|push triggers| RP[release-please.yml]
RP -->|autocreates| RPP[release-please PR on main]
RPP -->|human merges| T[git tag vX.Y.Z + GitHub Release]
T -->|triggers| PUB[publish.yml → PyPI]
| Arrow | Agent | Auto-merge? |
|---|---|---|
feat/* → develop |
@pr-opener opens, @pr-merger merges |
✅ if all gates green |
develop → release |
@release-manager decides, @pr-opener opens, @pr-merger merges |
❌ human confirms |
release → main |
@release-manager decides, @pr-opener opens, @pr-merger merges |
❌ human confirms |
versioning PR on main
|
release-please | ❌ human merges |
| publish to PyPI | publish.yml |
✅ on tag push |
See the table in
copilot-instructions.md
(single source of truth). Mirror in /memories/repo/commits.md.
Promotion PRs use chore(release): — release-please ignores them.
Apply these manually in GitHub → Settings → Branches.
- Require a pull request before merging.
- Require review from
ErnestoCubo(CODEOWNERS). - Required status checks (strict, must pass before merge):
-
lint,test,security,build(fromci.yml). -
validate-frontmatter(fromai-audit.yml) if PR touches.github/{agents,prompts,instructions}/**.
-
- Dismiss stale reviews on push.
- Restrict who can push: nobody (PR-only).
- Disallow force pushes.
- Disallow deletions.
- Require linear history: off (we use merge commits for promotions so release-please sees the full history).
- Require signed commits: optional, recommended.
- Same as
main, minus the "require linear history" note (same value: off). - Required reviewer:
ErnestoCubo+@qa-reviewerposted PASS.
- Require a pull request before merging.
- Required status checks:
lint,test. - Dismiss stale reviews on push.
- Restrict who can push: nobody.
- Disallow force pushes.
- Disallow deletions.
- Reviewer requirement: at least one agentic review (
@qa-reviewer).
-
Verify train state
@release-manager statusShows pending commits per leg and the expected version bump.
-
Promote
develop → release@release-manager promote develop@pr-openeropens a PR titledchore(release): promote develop → release (YYYY-MM-DD).@pr-mergerposts "Ready to merge, awaiting human confirmation". You merge. -
CI on
releaseWait forci.ymlto go green on the newreleasehead. -
Promote
release → main@release-manager promote releaseSame dance. Merging this triggers
release-please.yml. -
Validate release-please PR
@release-manager finalizeVerifies the CHANGELOG and
pyproject.tomlbump matches the expected version. If OK, posts "validated", you merge. -
Tag + Release + PyPI Merging the release-please PR creates the git tag, the GitHub Release, and triggers
publish.ymlfor PyPI.
Before step 2, ask @task-implementer to add a single commit on
develop with footer:
Release-As: 0.7.0
Document the override in
.github/sprints/sprint-NNN-<slug>/release/train-log.md.
For a critical fix that bypasses develop:
- Branch from
main:git checkout -b fix/<slug> main. - Open PR
fix/<slug> → maindirectly. CODEOWNER review required. - After merge, cherry-pick to
releaseanddevelop. - release-please will cut a patch on the next push to
main.
- Don't push to
develop,release, ormaindirectly. - Don't edit
CHANGELOG.mdmanually. - Don't delete the
releasebranch. - Don't use
--adminto bypass branch protection. - Don't use
--no-verifyto skip pre-commit. - Don't squash-merge
develop → releaseorrelease → main— release-please needs the per-feat history.
DomainRaptor v0.2.0 | GitHub | Report Issue | MIT License