with one click
prepare-release
// Create the pre-release PR with dependency updates and drafted release notes
// Create the pre-release PR with dependency updates and drafted release notes
Scaffold a new cloud/platform provider for Afterburn with all required files, wiring, docs, and tests
Guide the post-merge release process - release branch, tag, vendor archive, and GitHub release
| name | prepare-release |
| description | Create the pre-release PR with dependency updates and drafted release notes |
Automate the pre-release PR for an Afterburn release: create branch, update dependencies, draft release notes from commit history, and open the PR.
pre-release-X.Y.Z branch from up-to-date mainCargo.toml for unintended lower bound changes since the last tagcargo update and commits with message cargo: update dependenciesdocs/release-notes.md with the drafted notes and commits with message docs/release-notes: update for release X.Y.Zmain branch, up to date with the upstream remotecargo installedgh CLI installed and authenticated (for opening the PR)/prepare-release 5.11.0
/prepare-release 5.11.0 --next 5.12.0
Get the release version from the user's command arguments. If not provided, ask:
What version are you releasing? (e.g., 5.11.0)
Determine the next development version:
--next was provided, use that5.11.0 -> 5.12.0)Run these checks and stop if any fail:
# Verify we're on main
git branch --show-current
# Should output: main
# Verify main is up to date
git fetch origin
git status
# Should show "Your branch is up to date with 'origin/main'"
# Verify no existing branch
git branch --list "pre-release-${RELEASE_VER}"
# Should be empty
# Verify no existing tag
git tag --list "v${RELEASE_VER}"
# Should be empty
# Get the last tag for reference
git describe --abbrev=0
If main is behind, run git pull origin main first.
If a branch or tag already exists, warn the user and stop.
git checkout -b pre-release-${RELEASE_VER}
git diff $(git describe --abbrev=0) Cargo.toml
If there are changes to dependency version lower bounds, present them to the user:
The following Cargo.toml changes were detected since the last release.
Please review for unintended lower bound increases:
{diff output}
Continue? (y/n)
Use the question tool to ask the user to confirm. If the user wants to stop, provide instructions for cleaning up the branch.
cargo update
git add Cargo.lock
git commit -m "cargo: update dependencies"
Get all commits since the last tag, excluding noise:
# Get the last tag
LAST_TAG=$(git describe --abbrev=0)
# Get commits since last tag, excluding merges
git log ${LAST_TAG}..HEAD --oneline --no-merges
Classify each commit into categories. Use these rules:
EXCLUDE these commits (do not include in release notes):
build(deps): (Dependabot bumps)Sync repo templates (automated)cargo: update dependencies (the one we just made)cargo: Afterburn release (release machinery)docs/release-notes: (release notes updates)MAJOR changes (new features, new providers, significant changes):
MINOR changes (bug fixes, small improvements):
PACKAGING changes:
rust-version changed in Cargo.toml)Read the current docs/release-notes.md file. The top section will look like:
## Upcoming Afterburn X.Y.Z (unreleased)
Major changes:
- {existing items that were added incrementally}
Minor changes:
- {existing items}
Packaging changes:
{existing items}
Some release notes entries may already exist (contributors often add entries when they merge features). Preserve those and add any missing ones from the commit analysis.
Present the drafted release notes to the user for review:
Here are the drafted release notes for Afterburn ${RELEASE_VER}:
## Afterburn ${RELEASE_VER}
Major changes:
- {items}
Minor changes:
- {items}
Packaging changes:
- {items}
Does this look correct? You can edit or I can proceed.
Use the question tool to ask the user to confirm or request changes.
Edit docs/release-notes.md to:
## Upcoming Afterburn X.Y.Z (unreleased) header with ## Afterburn ${RELEASE_VER}## Upcoming Afterburn ${NEXT_VER} (unreleased)
Major changes:
Minor changes:
Packaging changes:
Then commit:
git add docs/release-notes.md
git commit -m "docs/release-notes: update for release ${RELEASE_VER}"
git push origin pre-release-${RELEASE_VER}
Open a PR:
gh pr create \
--title "pre-release ${RELEASE_VER}" \
--body "$(cat <<'EOF'
Pre-release PR for Afterburn ${RELEASE_VER}.
This PR contains:
1. `cargo: update dependencies` - Updated Cargo.lock
2. `docs/release-notes: update for release ${RELEASE_VER}` - Release notes
Please review and merge. After merging, continue with the release checklist.
EOF
)"
Pre-release PR created!
Branch: pre-release-${RELEASE_VER}
Commits:
1. cargo: update dependencies
2. docs/release-notes: update for release ${RELEASE_VER}
PR: {PR_URL}
Next steps (from the release checklist):
1. Get PR reviewed and merged
2. Run /publish-release ${RELEASE_VER} to continue with the release
From the release checklist in .github/ISSUE_TEMPLATE/release-checklist.md:
RELEASE_VER=x.y.z -- captured as inputgit checkout -b pre-release-${RELEASE_VER} -- Step 3git diff $(git describe --abbrev=0) Cargo.toml -- Step 4cargo update -- Step 5git add Cargo.lock && git commit -- Step 5git add docs/release-notes.md && git commit -- Step 8Cargo.lockCommits between v5.9.0 and pre-release (excluding noise):
e469d05 providers/azure: switch SSH key retrieval from certs endpoint to IMDS
96c5530 microsoft/azure: Fix SharedConfig parsing of XML attributes
627089c microsoft/azure: Add XML attribute alias for serde-xml-rs Fedora compat
c8cc721 upcloud: implement UpCloud provider
Resulting release notes:
Key commits:
d4f8031 oraclecloud: implement oraclecloud provider
62d9ce2 dracut: Return 255 in module-setup
5f3dca0 Add TMT test structure and basic smoke test
Resulting release notes:
.github/ISSUE_TEMPLATE/release-checklist.mddocs/release-notes.mddocs/contributing.md:48-69