Description
One issue with the Docker tag model in the CI/CD deployment phase:
Missing floating tag for Java variant release builds
Java variant builds are only automatically created for the release workflow, driven by the RELEASE_JAVA_VARIANT_SUFFIX repository variable (e.g., java-25). For the primary non-variant release, latest is the mutable floating tag while the version string is version-specific. No equivalent floating tag exists for variant releases:
| Release build |
Floating tag |
Version-specific tag |
| Primary (Java 21) |
latest |
25.02.16-01 |
| Variant (configured suffix) |
missing |
25.02.16-01_{suffix} |
Users who always want the latest release built with the configured Java variant (e.g., Java 25) must pin to a specific version, with no floating tag available.
The fix is to push a suffix-only mutable tag (the value of RELEASE_JAVA_VARIANT_SUFFIX, e.g., java-25) whenever raw_suffix is non-empty — unconditionally, with no latest gate. This tag is the variant equivalent of latest for primary builds.
Important: the latest input controls only one thing — whether the actual Docker latest tag is pushed (when the effective suffix is empty). It has no role in suffix floating tag logic, and cicd_7-release-java-variant.yml correctly omits latest: true since variant builds must never push latest.
Acceptance Criteria
Priority
Medium
Additional Context
Key files:
.github/workflows/cicd_comp_deployment-phase.yml:
- Lines 241/284: when
raw_suffix is non-empty, push the suffix-only mutable tag using custom-tag or extra-tags inputs on the deploy-docker action — no inputs.latest gate required
.github/actions/core-cicd/deployment/deploy-docker/action.yml — no changes expected; custom-tag at line 157 already supports adding an arbitrary mutable tag
.github/workflows/cicd_7-release-java-variant.yml — no changes needed
The raw_suffix output (e.g., java-25) is already computed by the get-sdkman-version step from the artifact-suffix input (which comes from RELEASE_JAVA_VARIANT_SUFFIX). No hardcoded values needed.
latest input semantics: this flag controls only whether the actual Docker latest tag is published. It applies exclusively to primary (non-variant) release builds where the effective suffix is empty. SHA-based version tags and all non-empty effective tags (suffix floating tags, environment tags) are always pushed regardless of this flag.
Related: dev image latest tag bug (nightly incorrectly overwrites dotcms/dotcms-dev:latest) tracked separately in #34765.
Description
One issue with the Docker tag model in the CI/CD deployment phase:
Missing floating tag for Java variant release builds
Java variant builds are only automatically created for the release workflow, driven by the
RELEASE_JAVA_VARIANT_SUFFIXrepository variable (e.g.,java-25). For the primary non-variant release,latestis the mutable floating tag while the version string is version-specific. No equivalent floating tag exists for variant releases:latest25.02.16-0125.02.16-01_{suffix}Users who always want the latest release built with the configured Java variant (e.g., Java 25) must pin to a specific version, with no floating tag available.
The fix is to push a suffix-only mutable tag (the value of
RELEASE_JAVA_VARIANT_SUFFIX, e.g.,java-25) wheneverraw_suffixis non-empty — unconditionally, with nolatestgate. This tag is the variant equivalent oflatestfor primary builds.Important: the
latestinput controls only one thing — whether the actual Dockerlatesttag is pushed (when the effective suffix is empty). It has no role in suffix floating tag logic, andcicd_7-release-java-variant.ymlcorrectly omitslatest: truesince variant builds must never pushlatest.Acceptance Criteria
RELEASE_JAVA_VARIANT_SUFFIX, e.g.,java-25) is pushed to Docker Hub for bothdotcms/dotcmsanddotcms/dotcms-devraw_suffixis non-empty — it is not gated oninputs.latest{version}_{suffix}and{version}_{suffix}_{sha}continue to be createdlatesttag for primary (non-variant) releases is unaffectedcicd_7-release-java-variant.ymldoes not needlatest: true— variant builds correctly never pushlatestcicd_comp_deployment-phase.yml(lines 14–41) updated to reflect the variant release floating tagPriority
Medium
Additional Context
Key files:
.github/workflows/cicd_comp_deployment-phase.yml:raw_suffixis non-empty, push the suffix-only mutable tag usingcustom-tagorextra-tagsinputs on the deploy-docker action — noinputs.latestgate required.github/actions/core-cicd/deployment/deploy-docker/action.yml— no changes expected;custom-tagat line 157 already supports adding an arbitrary mutable tag.github/workflows/cicd_7-release-java-variant.yml— no changes neededThe
raw_suffixoutput (e.g.,java-25) is already computed by theget-sdkman-versionstep from theartifact-suffixinput (which comes fromRELEASE_JAVA_VARIANT_SUFFIX). No hardcoded values needed.latestinput semantics: this flag controls only whether the actual Dockerlatesttag is published. It applies exclusively to primary (non-variant) release builds where the effective suffix is empty. SHA-based version tags and all non-empty effective tags (suffix floating tags, environment tags) are always pushed regardless of this flag.Related: dev image
latesttag bug (nightly incorrectly overwritesdotcms/dotcms-dev:latest) tracked separately in #34765.