Hotfix / Patch Release Strategy
Patching a shipped version without touching main or disturbing in-progress develop work.
Hotfix / Patch Release Strategy
Used when a shipped version needs a fix while develop has already moved on to the next minor, so the fix can't route through the normal develop → qa → main flow without dragging in unfinished work.
Example: main is on 1.1.0 (latest stable), develop is mid-work on 1.2.0, and a customer needs a 1.1.1 patch.
main is never touched by this flow — not even a fast-forward. It stays at 1.1.0 for as long as 1.1.x is the shipping line; release/1.1 and its tags are the actual record of what shipped as 1.1.1, 1.1.2, etc.
Steps
- Cut
release/1.1frommain's current tip (the1.1.0release) in every repo — including repos with no code change, since every service gets rebuilt and relabeled together for the patch. - Apply the actual fix only in the repo(s) where the bug lives; the rest just carry the version bump.
- Run the standard version-bump script on
release/1.1in all repos, bumpingversion.txtto1.1.1everywhere. - Tag
1.1.1directly onrelease/1.1in every repo —mainis not merged into, fast-forwarded, or touched in any way. - Build, tag, publish, and release manually per repo for now. Today's
on.push.branchestriggers (in every repo'sbuild_push.yml, and inmcm-devops'ssetup-deployrouting) only recognizedevelop,qa, andmain— a push torelease/1.1doesn't fire any of that automation. Until the CI trigger list is extended to recognizerelease/**(see Deployment Environments), this step means dispatching each affected repo's build manually (workflow_dispatchagainst therelease/1.1ref) rather than getting it for free from a push. - Ship the artifact bundle the same way any
mainrelease does. As covered on the previous page,mainreleases don't auto-deploy to any internal environment either — production is always "publish the artifact, customer/Ops installs it." A1.1.1hotfix follows the identical path: bundlemcm_artifacts_1.1.1.tar.gz, publish it, and have the customer (or Ops, on their behalf) runupgrade.sh. - Keep
release/1.1alive per repo instead of deleting it — it's the branch for1.1.2,1.1.3, and any later patch to the same line. - Manually port the fix into
develop(andqa). There is no automated forward-merge, so link therelease/1.1fix commit in a tracked ticket/PR so it doesn't silently drop out of1.2.0when that ships.
Open item: CI trigger update
For step 5 to stop being a manual chore, two changes are needed (not yet made):
- Add
release/**to theon.push.brancheslist in every repo'sbuild_push.yml, its version-calculation branch (treatrelease/*likemain— no version suffix, since this is a real release), theCreate GitHub Releasecondition, and thetrigger-devopscondition. - Add explicit routing for
release/*inmcm-devops'ssetup-deployjob so it doesn't fall through to the shared Feature VM if an internal verification deploy is wanted before shipping the artifact.
These are CI/CD pipeline changes across ~18 repos — worth doing deliberately in a follow-up, not as a side effect of writing this doc.