Document emergency hotfix release process - #9784
Document emergency hotfix release process#9784Rick Winter (RickWinter) wants to merge 3 commits into
Conversation
|
Azure Pipelines: Successfully started running 18 pipeline(s). 3 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Copilot review overview
Review tier: Balanced
Findings: 1
New issues introduced by this change (1)
| Severity | Finding |
|---|---|
docs/guides/emergency-hotfix-release.md — The example base tag azure-dev-cli_1.32.0 predates this PR, so its copy of publish-cli.yml… |
What changed in this PR
Documents and enables emergency patch releases from an existing CLI release tag.
Changes:
- Adds the emergency hotfix release guide.
- Links the guide from the documentation index.
- Targets GitHub releases at the pipeline source commit.
| File | Description |
|---|---|
eng/pipelines/templates/steps/publish-cli.yml |
Pins release tags to Build.SourceVersion. |
docs/README.md |
Links the hotfix guide. |
docs/guides/emergency-hotfix-release.md |
Documents preparation, publishing, verification, and cleanup. |
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…hotfix-cherry-pick
There was a problem hiding this comment.
Copilot review overview
Review tier: Balanced
Findings: None
Issues resolved since last review (1)
| Severity | Finding |
|---|---|
docs/guides/emergency-hotfix-release.md — The example base tag azure-dev-cli_1.32.0 predates this PR, so its copy of publish-cli.yml… View resolved comment |
Suppressed comments (1)
docs/guides/emergency-hotfix-release.md:26
- A branch cut from an existing release tag that predates this PR will not contain the new
--targetargument. Azure Pipelines resolves this same-repository template from the selected hotfix branch, so the first such release would still run the old template and could tagmain. Require the pipeline-support change on the hotfix branch before applying the product fix.
An authorized maintainer creates the short-lived `hotfix/azd-1.32.1` branch in `Azure/azure-dev`
from the immutable `azure-dev-cli_1.32.0` release tag.
Azure Dev CLI Install InstructionsInstall scriptsMacOS/Linux
bash: pwsh: WindowsPowerShell install MSI install Standalone Binary
MSI
Documentationlearn.microsoft.com documentationtitle: Azure Developer CLI reference
|
| global `release/latest` channel and, for a stable version, the global `release/stable` channel. Contact | ||
| the engineering systems team before servicing an older release line because publishing it through the |
There was a problem hiding this comment.
The main issue here when releasing hotfixes for older versions is that the version.txt file update stage should NOT be run.
Doing so would cause unexpected behavior with client upgrade code paths.
Consider these 2 scenarios:
Version requiring hotfix: 1.2.2 -> 1.2.3 (hotfixed version)
Latest release: 1.2.6
Hotfix release: 1.2.3
Client version: 1.2.5
Client sees: no upgrade message because hotfix release is less than current version
Latest release: 1.2.6
Hotfix release: 1.2.3
Client version: 1.2.0
Client sees: Upgrade to 1.2.3 (not 1.2.6)
There was a problem hiding this comment.
azd update will run into this issue. We may want to limit the hotfixes to be on latest release version?
| `eng/pipelines/templates/steps/publish-cli.yml` passes `--target "$(Build.SourceVersion)"` to | ||
| `gh release create`. If the source release tag predates that safeguard, include the same pipeline | ||
| change in the hotfix pull request. Without it, GitHub creates the release tag from `main` instead of | ||
| the commit that produced the hotfix artifacts. |
There was a problem hiding this comment.
Other changes like CFS may necessitate that the eng/ folder be brought over from its current state of main. It's possible that some things could break in those situations.
Daniel Jurek (danieljurek)
left a comment
There was a problem hiding this comment.
Approve change to publish-cli.yml --target should be used because it defaults to the head of the default branch if left off.

Summary
mainValidation
cspell lint "docs/guides/emergency-hotfix-release.md" "docs/README.md" "eng/pipelines/templates/steps/publish-cli.yml" --relative --config ./.vscode/cspell.misc.yaml --no-progressgit diff --checkFixes #7712