π TSM Versioning, Branching & Artifact Strategy
This document defines the rules for source control branching, Maven artifact versioning, and Docker image tagging. It specifically addresses the need to support multiple parallel platform lines (e.g. 2.3, 2.4, 3.x), multi-customer installations, microservice architecture with shared libraries and extendable core services, and stabilization phases (DEV, REF, PROD).
Overview:
| Branch | Lifecycle Stage | Stability | Maven Version | Docker Tag |
|---|---|---|---|---|
| 2.3 | DEV (Daily Work) | Volatile π§ | 2.3-SNAPSHOT | :2.3 |
| release/2.3 | REF (Staging/QA) | Stable π‘οΈ | 2.3-REL-SNAPSHOT | :2.3-latest |
| tag 2.3.5 | PROD (Release) | Frozen βοΈ | 2.3.5 | :2.3.5 |
1. Core Conceptsβ
We distinguish between two main types of output from our builds:
-
Library Artifacts (The "SDK"):
- Standard Java JARs (non-executable).
- Used as dependencies in other microservices or customer extensions.
- Example:
tsm-commons,tsm-ordering(core logic).
-
Deployment Artifacts (The "Runtime"):
- Fat JARs: Spring Boot executable JARs (often including specific DB drivers, e.g., Postgres).
- Docker Images: The final runnable unit in Kubernetes.
- Example:
tsm-ordering-postgres,kip-ordering(custom).
2. Branching & Environment Mappingβ
2.1 Long-living branchesβ
These represent version lines (each line evolves independently):
2.3β active development of 2.3.x2.4β active development of 2.4.x3.xβ next major with breaking changes
We use three distinct "states" for our artifacts, mapped to Git branches:
| State | Git Branch | Purpose | Stability |
|---|---|---|---|
| DEV | 2.3 | Active development of features. | Volatile (SNAPSHOT) |
| REF | release/2.3 | Stabilization, QA, Pre-release. | Stable Snapshot |
| REL | Tag 2.3.5 | Production release. | Immutable (Fixed) |
Releases are always created from a release branch and tagged, e.g.:
2.3.0,2.3.1,2.3.5, β¦- optional bugfix releases:
2.3.5.1,2.3.5.2, β¦
2.2 Feature branchesβ
Feature branches target a specific line:
feature/2.3/TSM-4954_new-report
feature/2.4/TSM-5852_payment-refactor
feature/3.x/TSM-6846_new-architecture
They merge back into their corresponding dev branch (2.3, 2.4, 3.x).
2.3 Bugfix branchesβ
Urgent production fixes always branch from the relevant release branch:
bugfix/2.3/101-login-npe
Flow:
- Branch from
release/2.3 - Implement fix, test
- Merge back to
release/2.3 - Tag new patch release (e.g.
2.3.5,2.3.5.1) - Merge/cherry-pick into higher lines (
2.3,2.4,3.x) where applicable
This ensures consistency across versions while keeping each line stable.
3. Artifact Matrix (The "What Goes Where")β
This table defines exactly what artifacts are generated in Nexus and Harbor for the 2.3 version line.
π¦ Nexus Artifacts: Libraries (For Compilation/Extension)β
These are plain JARs. Used when projects need to compile their own extension against TSM.
| Component | Git Source | Maven Version | Purpose |
|---|---|---|---|
| tsm-commons | 2.3 | 2.3-SNAPSHOT | Daily dev builds. |
| tsm-commons | release/2.3 | 2.3-REL-SNAPSHOT | Stabilized library for testing extensions. |
| tsm-commons | Tag 2.3.5 | 2.3.5 | Fixed Release. Used in prod BOMs. |
| tsm-ordering | 2.3 | 2.3-SNAPSHOT | Core logic library for dev. |
| tsm-ordering | release/2.3 | 2.3-REL-SNAPSHOT | Core logic library for QA/REF. |
| tsm-ordering | Tag 2.3.5 | 2.3.5 | Fixed Release. Base for customer extension. |
π Nexus Artifacts: Fat JARs (Executables)β
These are Spring Boot executables containing the embedded container and specific drivers (e.g., Postgres).
| Component | Git Source | Maven Version (Classifier/Var) | Purpose |
|---|---|---|---|
| tsm-ordering | release/2.3 | postgres-2.3-REL | REF Candidate. Ready for generic staging. |
| tsm-ordering | Tag 2.3.5 | postgres-2.3.5 | Core Production. Generic release for Postgres. |
| kip-ordering | Tag 2.3.5 | postgres-2.3.5 | Customer Production. Extended version (KIP) based on TSM 2.3.5. |
> Note on Naming: The version suffix (e.g., postgres-2.3.5) denotes that this artifact is built specifically for the PostgreSQL profile/driver.