112 lines
3.4 KiB
Markdown
112 lines
3.4 KiB
Markdown
|
|
# Releasing (Maintainers)
|
||
|
|
|
||
|
|
This repo uses a two-branch flow to keep `main` stable for users:
|
||
|
|
|
||
|
|
- `beta`: integration branch where feature PRs land
|
||
|
|
- `main`: stable branch that should match the latest release tag
|
||
|
|
|
||
|
|
## Release checklist
|
||
|
|
|
||
|
|
### 1) Promote `beta` to `main` via PR
|
||
|
|
|
||
|
|
- Create a PR with:
|
||
|
|
- base: `main`
|
||
|
|
- compare: `beta`
|
||
|
|
- Ensure required CI checks are green.
|
||
|
|
- Merge the PR.
|
||
|
|
|
||
|
|
Release note quality depends on how you merge:
|
||
|
|
|
||
|
|
- Squash-merging feature PRs into `beta` is OK.
|
||
|
|
- Avoid squash-merging the `beta -> main` promotion PR. Prefer a merge commit (or rebase merge) so GitHub can produce better auto-generated release notes.
|
||
|
|
|
||
|
|
### 2) Run the Release workflow (manual)
|
||
|
|
|
||
|
|
- Go to **GitHub → Actions → Release**
|
||
|
|
- Click **Run workflow**
|
||
|
|
- Select:
|
||
|
|
- `patch`, `minor`, or `major`
|
||
|
|
- Run it on branch: `main`
|
||
|
|
|
||
|
|
What the workflow does:
|
||
|
|
|
||
|
|
1. Creates a temporary `release/vX.Y.Z` branch with the version bump commit
|
||
|
|
2. Opens a PR from that branch into `main`
|
||
|
|
3. Auto-merges the PR (or waits for required checks, then merges)
|
||
|
|
4. Creates an annotated tag `vX.Y.Z` on the merged commit
|
||
|
|
5. Creates a GitHub Release for the tag
|
||
|
|
6. Publishes artifacts (Docker / PyPI / MCPB)
|
||
|
|
7. Opens a PR to merge `main` back into `beta` (so `beta` gets the bump)
|
||
|
|
8. Auto-merges the sync PR
|
||
|
|
9. Cleans up the temporary release branch
|
||
|
|
|
||
|
|
### 3) Verify release outputs
|
||
|
|
|
||
|
|
- Confirm a new tag exists: `vX.Y.Z`
|
||
|
|
- Confirm a GitHub Release exists for the tag
|
||
|
|
- Confirm artifacts:
|
||
|
|
- Docker image published with version `X.Y.Z`
|
||
|
|
- PyPI package published (if configured)
|
||
|
|
- `unity-mcp-X.Y.Z.mcpb` attached to the GitHub Release
|
||
|
|
|
||
|
|
## Required repo settings
|
||
|
|
|
||
|
|
### Branch protection (Rulesets)
|
||
|
|
|
||
|
|
The release workflow uses PRs instead of direct pushes, so it works with strict branch protection. No bypass actors are required.
|
||
|
|
|
||
|
|
Recommended ruleset for `main`:
|
||
|
|
|
||
|
|
- Require PR before merging
|
||
|
|
- Allowed merge methods: `merge`, `rebase` (no squash for promotion PRs)
|
||
|
|
- Required approvals: `0` (so automated PRs can merge without human review)
|
||
|
|
- Optionally require status checks
|
||
|
|
|
||
|
|
Recommended ruleset for `beta`:
|
||
|
|
|
||
|
|
- Require PR before merging
|
||
|
|
- Allowed merge methods: `squash` (for feature PRs)
|
||
|
|
- Required approvals: `0` (so the sync PR can auto-merge)
|
||
|
|
|
||
|
|
### Enable auto-merge (required)
|
||
|
|
|
||
|
|
The workflow uses `gh pr merge --auto` to automatically merge PRs once checks pass.
|
||
|
|
|
||
|
|
To enable:
|
||
|
|
|
||
|
|
1. Go to **Settings → General**
|
||
|
|
2. Scroll to **Pull Requests**
|
||
|
|
3. Check **Allow auto-merge**
|
||
|
|
|
||
|
|
Without this setting, the workflow will fall back to direct merge attempts, which may fail if branch protection requires checks.
|
||
|
|
|
||
|
|
## Failure modes and recovery
|
||
|
|
|
||
|
|
### Tag already exists
|
||
|
|
|
||
|
|
The workflow fails if the computed tag already exists. Pick a different bump type or investigate why a tag already exists for that version.
|
||
|
|
|
||
|
|
### Bump PR fails to merge
|
||
|
|
|
||
|
|
If the version bump PR cannot be merged (e.g., required checks fail):
|
||
|
|
|
||
|
|
- The workflow will fail before creating a tag.
|
||
|
|
- Fix the issue, then either:
|
||
|
|
- Manually merge the PR and create the tag/release, or
|
||
|
|
- Close the PR, delete the `release/vX.Y.Z` branch, and re-run the workflow.
|
||
|
|
|
||
|
|
### Sync PR (`main -> beta`) fails
|
||
|
|
|
||
|
|
If the sync PR has merge conflicts:
|
||
|
|
|
||
|
|
- The workflow will fail after the release is published (artifacts are already out).
|
||
|
|
- Manually resolve conflicts in the sync PR and merge it.
|
||
|
|
|
||
|
|
### Leftover release branch
|
||
|
|
|
||
|
|
If the workflow fails mid-run, a `release/vX.Y.Z` branch may remain. Delete it manually before re-running:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
git push origin --delete release/vX.Y.Z
|
||
|
|
```
|