Component Versioning
The ComponentVersioningService manages the full lifecycle of platform component versions. It provides semantic version parsing, version registration, status transitions, deprecation workflows, compatibility checking, and version comparison. All version data is cached and evicted automatically when changes occur.
Register a Version
Endpoint: POST /api/v1/registry/components/:componentId/versions
curl -X POST http://localhost:8084/api/v1/registry/components/550e8400-e29b-41d4-a716-446655440000/versions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"version": "3.2.0",
"description": "New query optimization engine",
"releaseNotes": "Added cost-based optimizer for complex joins",
"status": "STABLE",
"releaseDate": "2026-02-01",
"dockerImage": "matih/trino:3.2.0",
"helmChartVersion": "0.15.0",
"minPlatformVersion": "2.0.0",
"maxPlatformVersion": "3.0.0",
"lts": false,
"recommended": true
}'When a version is registered, the service parses the version string using the semver4j library to populate the semanticVersion field. If the version is marked as recommended, all other versions for the same component have their recommended flag cleared.
ComponentVersion Structure
| Field | Type | Description |
|---|---|---|
id | UUID | Version identifier |
version | String | Version string (e.g., 3.2.0) |
semanticVersion | String | Parsed semantic version |
description | String | Human-readable description |
releaseNotes | String | Detailed release notes |
status | VersionStatus | Current lifecycle status |
releaseDate | LocalDate | Official release date |
endOfLifeDate | LocalDate | Date version reaches end of life |
endOfSupportDate | LocalDate | Date support ends |
dockerImage | String | Docker image reference |
helmChartVersion | String | Corresponding Helm chart version |
minPlatformVersion | String | Minimum compatible platform version |
maxPlatformVersion | String | Maximum compatible platform version |
lts | boolean | Whether this is a long-term support version |
recommended | boolean | Whether this is the recommended version |
breakingChanges | JSON | List of breaking changes from prior version |
knownIssues | JSON | Known issues in this version |
configSchema | JSON | Configuration schema for this version |
dependencies | List | Version dependency relationships |
Version Status Lifecycle
| Status | Description | Transitions To |
|---|---|---|
ALPHA | Early development, not production-ready | BETA, DEPRECATED |
BETA | Feature-complete, undergoing testing | RC, DEPRECATED |
RC | Release candidate, final testing phase | STABLE, DEPRECATED |
STABLE | Production-ready, fully supported | DEPRECATED |
DEPRECATED | Supported but scheduled for removal | END_OF_LIFE |
END_OF_LIFE | No longer supported or maintained | Terminal state |
Endpoint: PUT /api/v1/registry/versions/:versionId/status?status=DEPRECATED
When a version is transitioned to END_OF_LIFE and no endOfLifeDate is set, the current date is automatically assigned.
Deprecation
Endpoint: POST /api/v1/registry/versions/:versionId/deprecate?endOfSupportDate=2026-12-31
When a version is deprecated:
- The status is set to
DEPRECATED - The
endOfSupportDateis recorded - If the deprecated version was the recommended version, the
recommendedflag is cleared and the latest stable version is automatically promoted to recommended - A
VERSION_DEPRECATEDevent is published to Kafka
Set Recommended Version
Endpoint: POST /api/v1/registry/components/:componentId/versions/:versionId/set-recommended
Only one version per component can be recommended at a time. Setting a new recommended version automatically clears the flag on the previous recommended version.
Version Comparison
Endpoint: GET /api/v1/registry/versions/:versionId1/compare/:versionId2
Compares two versions of the same component using semantic versioning rules.
VersionComparison Structure
| Field | Type | Description |
|---|---|---|
version1 | ComponentVersion | First version |
version2 | ComponentVersion | Second version |
comparison | int | -1 (older), 0 (same), 1 (newer) |
isUpgrade | boolean | Whether version2 is newer than version1 |
upgradeType | String | major, minor, or patch |
hasBreakingChanges | boolean | Whether version2 has breaking changes |
Compatibility Check
Endpoint: POST /api/v1/registry/versions/:versionId/check-compatibility
Validates whether a version is compatible with the currently installed component versions.
curl -X POST http://localhost:8084/api/v1/registry/versions/550e8400/check-compatibility \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}" \
-d '{
"trino": "3.1.0",
"kafka": "3.6.0",
"postgresql": "16.1"
}'CompatibilityResult Structure
| Field | Type | Description |
|---|---|---|
compatible | boolean | Whether all required dependencies are satisfied |
errors | List | Blocking compatibility issues |
warnings | List | Non-blocking recommendations |
recommendations | Map | Suggested version upgrades for dependencies |
The check evaluates each VersionDependency against the installed versions, comparing minimum and maximum version constraints using semantic versioning.
Version Dependencies
Each version can declare dependencies on other platform components through the VersionDependency entity.
| Field | Type | Description |
|---|---|---|
dependsOnComponentId | UUID | Target component identifier |
dependsOnComponentName | String | Target component name |
minVersion | String | Minimum required version |
maxVersion | String | Maximum supported version |
recommendedVersion | String | Recommended version of the dependency |
versionConstraint | String | Version constraint expression |
type | DependencyType | Dependency classification |
Dependency Types
| Type | Description |
|---|---|
REQUIRED | Must be present and within version bounds |
OPTIONAL | Enhanced functionality when present |
RECOMMENDED | Strongly suggested for optimal performance |
INCOMPATIBLE | Conflict marker -- cannot coexist |
Automated Lifecycle Processing
A scheduled task runs daily at 6:00 AM to process version lifecycle transitions:
- Versions that have reached their
endOfLifeDateare automatically transitioned toEND_OF_LIFEstatus - Versions reaching their
endOfSupportDatetriggerVERSION_END_OF_SUPPORTevents for downstream notification