Skip to content

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:
  • latest
  • beta
  • *-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.0ac-server-apigateway: release/2.6.43


Patch Flow

  1. Identify target release via release-tagged issue
  2. Checkout corresponding release branch
  3. Fix nuget packages if not still fixed (Find the nuget version from the issue related to Deployed Services for ..*)

  4. Apply fixes via:

  5. direct commits
  6. hotfix branches
  7. patch branches

  8. Merge ALL fixes into the release branch

  9. Run locally with:
  10. Fixed NuGet versions
  11. GitHub-authenticated package access

  12. Validate:

  13. Project builds successfully
  14. Patch behaves as expected
  15. No regression introduced

  16. (Optional) Deploy patched image to:

  17. 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 latest or other existing image tag (old hotfix tag etc.) with corresponding hotfix version
  • 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

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.