Patch Release
Self-Hosted Patch Release Policy¶
Scope¶
This policy defines how patch (hotfix) releases are managed for Self-Hosted environments only.
Source of Truth¶
- Each release has a corresponding release-tagged issue like
Deployed Services (PROD) 3.30.0 - This issue includes:
- Deployed service branches
-
Published NuGet package versions
-
Patch operations MUST reference this issue using the target release version
NuGet Version Management (Critical)¶
To ensure consistency:
- All NuGet dependencies must be fixed (pinned) versions
- Prevent automatic resolution of:
latestbeta*-latest
Example:
<ItemGroup>
<PackageReference Include="Appcircle.AspNetCore" Version="7.44.1" />
<PackageReference Include="Appcircle.Core" Version="10.75.2" />
</ItemGroup>
Branch Strategy¶
- Each release maps to a dedicated branch:
release/<service-version>
Example:
- 3.30.0 → ac-server-apigateway: release/2.6.43
Patch Flow¶
- Identify target release via release-tagged issue
- Checkout corresponding release branch
-
Fix nuget packages if not still fixed (Find the nuget version from the issue related to Deployed Services for ..*)
-
Apply fixes via:
- direct commits
- hotfix branches
-
patch branches
-
Merge ALL fixes into the release branch
- Run locally with:
- Fixed NuGet versions
-
GitHub-authenticated package access
-
Validate:
- Project builds successfully
- Patch behaves as expected
-
No regression introduced
-
(Optional) Deploy patched image to:
- Dev / Preprod / Self-Hosted env for verification
Image Tagging¶
Images generated from release branches must be manually versioned:
Examples:
- privateapigateway:v3.29.8-hotfix1
- privateapigateway:v3.29.8-hotfix2
Deployment Strategy¶
- General Fix:
- Update image tags in sh release branch:
ac-script-self-hosted → release/<version> - Replace
latestor other existing image tag (old hotfix tag etc.) with correspondinghotfixversion -
Commit & push
-
Customer-Specific Fix:
- Apply ONLY in the customer’s release related deployment branch
- Commit & push
- Do NOT propagate globally (don't change on global release/..* branch)
Rules (Critical)¶
- Release branches represent a specific release version
- e.g.
release/2.6.43==3.30.0 - ❌ Do NOT merge unrelated changes into release branches
- ❌ Do NOT reuse old release branches for new releases
-
✅ Always create new branches:
release/2.6.44 -
✅ Release branch must always represent the latest patched state of that version
- ❌ Do NOT create patch images from:
- feature branches
-
ad-hoc hotfix branches
-
✅ ALL patches must go through the release branch
- ❗ Exception:
- Customer-specific patches may remain isolated
Issue Example with tag (3.30.0) - Related to Release¶
Release Deployed Services (PROD)
- ac-lib-core →
release/10.86.2→ NuGet:10.87.1 -
ac-lib-aspnetcore →
release/7.46.0→ NuGet:7.46.1 -
ac-server-apigateway →
release/2.6.43 - ac-service-agent-cache →
release/1.5.21
Principle¶
Patch releases must be deterministic, reproducible, and strictly tied to a known release state.