ADR 7: Use JHA Version Standard¶
Status¶
Proposed
Context¶
We are currently using multiple versioning patterns in PayCenter. To align as a BU, we should adopt a pattern based on the JHA version standard as seen here and here.
Challenges¶
Team SDLC differences¶
Each team may have a different release/branching pattern that may affect numbering. For example, Blue ties releases to the sprint iteration, RTP ties it to the month:
Example
- Blue: 2024.96.0.888 // where 96 is the sprint
- RTP: 2024.01.18.01-1 // where 01 is the month
PayCenter Suite version¶
There is a desire to have a PayCenter Suite version that represents the overall version of a product. To accomplish this, the primary identifiers will be the year and month.
Example
- PC Suite version - 2024.10.1.1
- Zelle Suite - 2024.10.1.1
- PCS Service - 2024.10.1.1.777 - Oct release
- PCS Service - 2024.10.1.1.790 - Hotfix during month
- PCS Service - 2024.10.1.2.840 - Oct 15th release (not currently done)
- Zelle WSO2 - 2024.10.1.1.455 - Oct release
- Zelle WSO2 - 2024.10.1.1.570 - Hotfix during month
- Portal Suite - 2024.10.1.1
- Zelle API - 2024.10.1.117 - Oct release
- Zelle API - 2024.10.1.119 - Hotfix during month
- Zelle Suite - 2024.10.1.1
In this example, the PayCenter Suite version remains 2024.10.1.1 until the November release. If PayCenter starts adopting an intra-month release cadence, the Patch value would increment.
Decision¶
PayCenter will implement the JHA standard with the following differences:
- Point is the current month.
- Build is an optional element to represent a CI build.
JHA Element | Year | Point | Compat | Patch | |
PayCenter Element | Year | Month | Compat | Patch | Build |
Example | 2024 | 10 | 1 | 1 | 555 |
PayCenter Version Standard Elements¶
█ Year: Represents the year of the build or release.
- For CI builds, this value is typically calculated from the current date.
- For release builds, this value is typically determined by the release branch.
█ Point: Represents the month of build or release.
- For CI builds, this value is typically calculated from the current date.
- For release builds, this value is typically determined by the release branch.
█ Compatibility: Starts with a value of 1. Incremented when breaking changes are included in a product release.
- This will generally stay with a value of 1 until we need to communicate breaking changes.
- One example could be if we start providing client libraries.
█ Patch: Indicates a new release of software. Never used to determine compatibility.
Increment as needed to represent a unique (non-hf) release.
Example
- 2024.10.1.1.444 - Oct release
- 2024.10.1.1.477 - Oct hotfix
- 2024.11.1.1.534 - Nov release
- 2024.11.1.1.579 - Nov hotfix
Note
Hotfixes generally do not change this value as they apply to an existing release.
To support intra-month releases or facilitate release flow, the value could be incremented each full release and based on something in CI (sprint).
Example
- 2024.10.1.33.444 - Oct release
- 2024.10.1.33.477 - Oct hotfix
- 2024.11.1.34.534 - Nov release
- 2024.11.1.34.579 - Nov hotfix
█ Build: Indicates a new build of software. Optional.
- For most teams, this is the build id from the CI system.
Consequences¶
Positive outcomes¶
- Provides a consistent version system among PayCenter products.
- Maps to product and BU-level PayCenter Suite concept to provide an aggregate version.
- Allows a PayCenter product to communicate compatibility.1
- Conforms with the JHA standard.
Drawbacks¶
- Two elements are dedicated to the date.
- We cannot utilize the Point element to notate intra-month deployments.
- This is not an issue right now, but will be for projects with greater deployment frequency.
- To alleviate this, the optional JHA Patch element is required for the PayCenter pattern.
Reference¶
JHA Version Standard Elements¶
█ Year: The year the product version is released. Very useful for large or strategic campaigns/releases. Never used for compatibility determination or identifying breaking changes.
█ Point: Includes new or updated feature/function, bug fixes. The point increment always begins at 0 within a year increment change.
█ Compatibility: Ever increasing value from this point forward. Incremented when breaking changes are included in a product release.
█ Patch/Build: Indicates a new build of software. Normally for small (optional) bug fixes. The build indicator always begins at 0. May not be used by all products and assumed 0 if omitted. Never used to determine compatibility
This is semver for comparison:
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes MINOR version when you add functionality in a backward compatible manner PATCH version when you make backward compatible bug fixes Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
The JHA pattern appears to be based on semver with this mapping:
- Year = just the year
- Point = MINOR
- Compat = MAJOR
- Patch = PATCH
-
From JHA standards:
Customers can look at the compatibility version of a product to determine if there is potential integration at risk indicated by an increased compatibility number.
Products taking a dependency upon or integration with other JHA products can look to the compatibility number to know if integration certification or re-certification is warranted before delivering/releasing software products to customers.