Release Process¶
This document describes the release workflow for Forge.
Overview¶
Releases follow a notes-first pattern: release notes land in main via PR, then the pipeline validates the build before the release branch is cut.
Steps¶
1. Create Release Notes¶
Use the create-release custom agent to generate release notes. Select it with the /agent command in Copilot CLI, or from the agent menu in VS Code, then ask it to create notes for the version:
This will:
- Analyze commits since the last release tag
- Generate docs/release-notes/{version}.md and docs/release-notes/_announcements/{version}.md
- Create a release-notes/{version} branch and PR into main
2. Merge to Main¶
Review the release notes PR and merge it into main.
3. Run Pipeline¶
Run the CI/CD pipeline from main to validate the build.
4. Post Announcement¶
Post the content from docs/release-notes/_announcements/{version}.md to the #forge-releases Teams channel.
5. Create Release Branch¶
Cut the release branch from main:
git checkout main
git pull
git checkout -b releases/{major}.{minor}
git push -u origin releases/{major}.{minor}
The pipeline will create the release tag from this branch.
6. Bump Version and Re-pin Modules on Main¶
Run Set-ForgeVersion.ps1 on main to prepare the next release. It updates MajorVersion / MinorVersion / PatchVersion in .azdo/vars/vars.yml and re-pins the Forge Terraform module constraints (~> MAJOR.MINOR.0) in a single step:
# Increment the minor version (e.g. 3.7.x -> 3.8.0) and re-pin modules
./.github/skills/release-management/scripts/Set-ForgeVersion.ps1 -Bump minor
# Preview first, or target an explicit version
./.github/skills/release-management/scripts/Set-ForgeVersion.ps1 -Bump minor -DryRun
./.github/skills/release-management/scripts/Set-ForgeVersion.ps1 -Version 4.0.0
Use -Bump major only when preparing a new major release; a -Bump patch leaves the Terraform pins unchanged. The script never commits or tags — review the diff, then commit and push directly or via PR.
Patch Releases¶
For patches against an existing release:
- Create a branch off
mainand fix the issue - Merge the fix to
main - Backport the fix using the create-backport custom agent (select it with
/agentin Copilot CLI or the agent menu in VS Code), providing the commit and target branch: This cherry-picks the commit, resolves conflicts, and creates a PR into the release branch. - Merge the backport PR into
releases/{major}.{minor} - Use the create-release agent for the patch release notes (version
{patch-version}) and merge tomain - Run the pipeline off the
releases/{major}.{minor}branch to create the patch tag
Version Format¶
Forge uses semantic versioning: MAJOR.MINOR.PATCH (e.g., 3.4.0).
Version is defined in .azdo/vars/vars.yml as static values (MajorVersion, MinorVersion, PatchVersion).