Patch Release Merge-back
Prepare a PR that merges the version, CHANGELOG, and downstream pom.xml
updates produced by a patch release (on a release/patch/YYYYMMDD branch) back
into main. Patches revert CHANGELOG.md and version files to the last stable
release, so a naive merge creates many conflicts. This skill encodes how to
resolve each file type correctly.
Triggers
WHEN: "merge-back PR", "merge back patches", "patch release merge-back", "bring patch releases into main", "reconcile the patch branch" DO NOT USE FOR: triggering an SDK release, incrementing versions for a new patch cycle, code generation.
Inputs (variables)
Two values drive the whole workflow. Both come from the "Increment versions
for patch releases" PR (opened by azure-sdk-automation[bot]) that targets the
patch branch:
| Variable | How to determine it | Current value |
|---|---|---|
RELEASE_BRANCH |
The branch the "Increment versions" PR targets: release/patch/YYYYMMDD. |
release/patch/20260701 |
PATCH_DATE |
Derived from the branch name YYYYMMDD → YYYY-MM-DD. Used in CHANGELOG entries. |
2026-07-01 |
If either value is ambiguous, ask the user to confirm before proceeding.
Critical Rules (read first)
- Only the last two commits of
RELEASE_BRANCHcarry the updates to bring back. Diff againstRELEASE_BRANCH~2to scope the change set. - Never edit
pom.xmlby hand. It is regenerated byeng/versioning/update_versions.pyafterversion_client.txtis correct. - Do not touch
README.mdfiles. Run the version script with--skip-readmeso READMEs are left unchanged (README updates are handled separately). version_client.txt: update only thedependency-versionof SDK libraries that changed on the release branch; always keep thecurrent-versionfrommain. Never reset beta versions tobeta.1.CHANGELOG.md: keep thePATCH_DATEentry from the release branch; every other line must matchmain. Do not invent or edit any other CHANGELOG content.- Base the merge-back branch on
main, not on the release branch.
Workflow
- Confirm inputs — Establish
RELEASE_BRANCHandPATCH_DATE(see table above). Fetch the branch:git fetch origin RELEASE_BRANCH. - Create the working branch from
main:git checkout main && git pullthengit checkout -b copilot/merge-back-release-patch-YYYYMMDD. - Scope the changes — List files touched by the last two commits:
git diff --name-only origin/RELEASE_BRANCH~2 origin/RELEASE_BRANCH. Expect three kinds:eng/versioning/version_client.txt, manyCHANGELOG.md, and manypom.xml(+ possiblyREADME.md). - Reconcile
version_client.txt— Follow references/version-client-resolution.md. - Reconcile each
CHANGELOG.md— Follow references/changelog-resolution.md. - Regenerate
pom.xml— From the repo root run the version script with the--skip-readme(--sr) flag soREADME.mdfiles are left untouched:
Do not stage any manualpython eng/versioning/update_versions.py --skip-readmepom.xmledits; only the generated output. Confirm noREADME.mdfiles appear in the resulting diff. - Review & sanity-check — Verify no v2 (
*-v2) or unrelated libraries were touched, nocurrent-versionvalues were altered, and no beta version was reset tobeta.1. - Commit and open the PR against
main— Title it like<Month> <Year> Patches Merge-back. Summarize: bumped dependency versions, insertedPATCH_DATECHANGELOG entries, and auto-generated pom.xml updates (READMEs intentionally left unchanged via--skip-readme).
Examples
- "Prepare the merge-back PR for
release/patch/20260701into main." - "Bring the July 2026 patch releases back into main."
Troubleshooting
current-versionmismatch after regeneration (e.g.2.59.0-beta.1vs2.59.0-beta.2): you likely overwrote acurrent-version. Restore it frommain; onlydependency-versionshould change.- Unexpected pom.xml diffs: re-run
update_versions.pyonly afterversion_client.txtis fully correct; stray diffs usually mean the version file still has a wrong entry. - Accidental v2 library changes: revert them — patch merge-backs only cover the patched GA/beta libraries listed in the release branch diff.
- Wrong CHANGELOG "from" versions in
## X.Y.Z (PATCH_DATE)dependency bullets: correct them to match the actual previous release, per the release branch entry.