fix(ci): [DEFECT] Manual deploy workflow cicd_8manualdeploy (#34689)#34699
fix(ci): [DEFECT] Manual deploy workflow cicd_8manualdeploy (#34689)#34699
Conversation
…tecture (#34689) - Fix cicd_8-manual-deploy: use change-detection='disabled' instead of invalid validation-level='none'; make ref input optional (defaults to dispatch branch, preserving legacy behavior) - Redesign Docker tag architecture: add semantic identifier-tag/custom-tag inputs to deploy-docker action, replacing raw type=raw,value=...,enable= format strings passed from callers - Centralize tag computation in Compute Docker Tags step (replaces Compute Docker Base Tag + raw extra-tags); identifier alias logic is now clear bash if/else instead of enable= expressions in format strings - extra-tags retained as escape hatch for advanced cases - Fix tag ordering: identifier before suffix (nightly_20250218_java25, not nightly_java25_20250218), consistent with release pattern - Remove dead code: reuse-previous-build from deployment phase calls (only meaningful in initialize phase) - Add run-name to all CI/CD workflows (cicd_1 through cicd_8) for better identification in GitHub Actions UI; uses format() now confirmed available - Fix cicd_8 concurrency group to use fallback when ref input is empty Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
GitHub Actions expression parser only accepts single-quoted string
literals inside \${{ }}. Switching run-name fields from single-quoted
YAML (outer) to double-quoted YAML (outer) allows single-quoted
expression strings without escaping, fixing the validation error:
Unexpected symbol: '"' in expression
Affected workflows: cicd_3, cicd_4, cicd_6, cicd_7, cicd_8
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When ref input is empty, fall back to github.ref_name (the dispatch branch) so the run name always shows which branch is being built. Mirrors the same fallback used in the concurrency group. Before: "Manual" (when ref input left empty) After: "Manual [issue-123-feature]" Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Manual deploys are feature branch builds and should not publish CLI artifacts to JFrog Artifactory. Only trunk, nightly, and release environments should deploy CLI artifacts. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…onment Replace environment name check with a deploy-cli boolean input following the same pattern as publish-npm-cli and publish-npm-sdk-libs. Callers that need CLI artifacts deployed to JFrog explicitly opt in with deploy-cli: true (trunk, nightly, release). Manual deploys omit it, defaulting to false. Also restore publish-npm-sdk-libs condition to input-only guard (no environment hardcoding needed since it already defaults to false). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…dispatch The hardcoded default '25.0.1-open' was outdated and misleading. Since the field is required, users must provide the value explicitly. Push-triggered builds use the RELEASE_JAVA_VARIANT_VERSION repository variable instead. Updated the description to reference the repository variable for clarity. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
a3064bc to
1a1567f
Compare
|
The changes to the manual workflow could be tested by selecting this branch as the workflow branch. It ran here and created an image with the expected tags. https://github.com/dotCMS/core/actions/runs/22202349916 The summary now provides additional information on the process: |
- Reorder inputs: common fields first (ref, custom_tag, java_version, deploy_dev_image), advanced fields last (version, artifact_suffix, allow_release_override) - Clarify custom_tag description: explicitly maps to legacy "Custom Docker Image Tag" and explains it adds an alias, not a base tag change - Clarify artifact_suffix description: makes clear it renames the base tag namespace (unrelated to custom_tag) - Add section comments to separate common from advanced inputs - Remove latest input: manual builds are feature/hotfix builds and should never overwrite the official latest tag; use cicd_6 for that - Add header note explaining why latest is intentionally absent Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ptions Input descriptions are shown in the GitHub Actions UI and will outlive the legacy workflow. Replace "legacy workflow" references with self-contained explanations so descriptions stay accurate after the legacy workflow is removed. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
QA StepsThese steps are for anyone currently using the Build/Push dotCMS docker image workflow to build feature branches — in particular if you have been building Background — what changedThe old workflow used the "Use workflow from" dropdown to do two things at once: select the version of the workflow code itself, and select the branch to build. Most of the time this was fine because they were the same thing. The new Testing now (before this PR is merged to main)Go to Actions →
Leave all other fields at their defaults. After this PR is merged to mainThe recommended approach — always works regardless of what is in your own branch:
Alternatively, if you have merged the latest workflow changes from Automatic tags — you don't always need a Custom Docker Image TagEvery build automatically creates three tags without you needing to set anything:
The branch-derived tag means your image is always findable by branch name. Custom Docker Image Tag is for when you want a short, stable, hand-off-friendly name like Done?Once you have successfully triggered the workflow and confirmed the image is available (e.g. |
When empty, falls back to the RELEASE_JAVA_VARIANT_VERSION repository variable — the same source used by push-triggered builds. This allows manual dispatch to reproduce the automatic behaviour without having to look up the current variable value. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Description
Fix the
cicd_8-manual-deploy.ymlworkflow that was failing with invalid input parameters, and improve CI/CD infrastructure consistency across all workflows: run-name visibility, Docker image tag architecture, nightly build repeatability and tag ordering, and CLI artifact deployment control.Changes
Bug Fixes (cicd_8 manual deploy)
change-detection='disabled'instead of the invalidvalidation-level='none'refinput optional: defaults to the dispatch branch, preserving legacy behavior and fixing the concurrency group fallback whenrefis emptyRun-Name Improvements (all workflows)
run-nameto all CI/CD workflows (cicd_1throughcicd_8) so every run is identifiable in the GitHub Actions UI without opening it${{ }}— fixesUnexpected symbol: '"' in expressionvalidation error (cicd_3, cicd_4, cicd_6, cicd_7, cicd_8)github.ref_namewhen therefinput is empty, so the run name is alwaysManual [branch-name]rather than justManualNightly Build Repeatability (cicd_4)
setupjob that determines the commit to build from before any other jobs runmainat or before midnight UTC. This ensures repeatability — re-running a nightly later in the day to investigate a failure produces the exact same build as the scheduled run. The date tag (nightly_YYYYMMDD) labels the day covered (yesterday), not the day the workflow runs.use-latest-commitdispatch input: set totrueto build from the currentHEADofmaininstead, useful when you need to pick up commits made after midnightbuild,deployment,finalize) now depend onsetupand pass through itsbuild-refandtag-dateoutputsDocker Image Tag Architecture (nightly + all builds)
deploy-dockeraction: replace rawtype=raw,value=...,enable=format strings with semanticidentifier-tag/custom-taginputs — callers express intent, not bake-meta syntaxCompute Docker Tagsstep consolidates all tag logic in clear bashif/else, replacing the previousCompute Docker Base Tag+ scatteredenable=expressionsnightly_20250218_java25, notnightly_java25_20250218), consistent with the release patternextra-tagsas an escape hatch for advanced casesCLI Artifact Deployment Control
deploy-cliboolean input to the deployment phase composite workflow (default:false); replaces the previous hardcodedenvironment != 'manual'name checkdeploy-cli: true; manual deploys omit it and default tofalse, preventing accidental JFrog publishes from feature-branch builds — mirrors the same pattern used bypublish-npm-cliandpublish-npm-sdk-libspublish-npm-sdk-libscondition to input-only guard (environment hardcoding removed)Miscellaneous
reuse-previous-buildremoved from all deployment-phase calls (only meaningful in the initialize phase)java_versiondefault fromcicd_7-release-java-variantdispatch input ('25.0.1-open'was outdated); update description to reference theRELEASE_JAVA_VARIANT_VERSIONrepository variable used by push-triggered buildsFiles Changed
.github/actions/core-cicd/deployment/deploy-docker/action.ymlidentifier-tag/custom-taginputs; centralized tag computation.github/workflows/cicd_1-pr.ymlrun-name.github/workflows/cicd_2-merge-queue.ymlrun-name.github/workflows/cicd_3-trunk.ymlrun-name(fixed quotes); adddeploy-cli: true.github/workflows/cicd_4-nightly.ymlsetupjob for commit pinning; adduse-latest-commitinput; addrun-name(fixed quotes); fix tag ordering; adddeploy-cli: true.github/workflows/cicd_6-release.ymlrun-namequotes; adddeploy-cli: true.github/workflows/cicd_7-release-java-variant.ymlrun-namequotes; remove stalejava_versiondefault.github/workflows/cicd_8-manual-deploy.ymlrefoptional; fixrun-namealways shows ref.github/workflows/cicd_comp_deployment-phase.ymldeploy-cliinput; replace env-name guard with input guard.github/workflows/cicd_comp_initialize-phase.ymlTesting
cicd_8) can be triggered successfully end-to-endrun-namedisplays correctly in GitHub Actions UI for all workflow typesCloses #34689
Issue: [DEFECT] Manual deploy workflow cicd_8manualdeploy