dotCMS / dotCMS/core

[TASK] Phase 2 - Matrix Build Strategy for Multi-Java Releases

Open
#34,639 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

dotCMS : Build Team : Enablement
Dominant language
Java
Stars
970
Forks
486
Avg merge
3d 33m
Merged PRs (30d)
170

Description

Description

Implement matrix build strategy to enable a single release workflow run to build and deploy multiple Java version variants in parallel using GitHub Actions.

Epic: #34484 (Java Version Override Support in CI/CD)

Dependencies:

  • #34586 (Phase 1 - Basic override support) - In PR review (#34612)
  • #34637 (Phase 1.5 - Sequential dual release) - Pending
Background

GitHub Actions has a fundamental limitation: cannot use strategy.matrix with uses: (reusable workflows). This requires careful architectural decisions about how to implement parallel multi-Java builds.

Implementation Options

Four approaches are viable, each with different trade-offs:

Option Approach Parallelism Complexity Effort
A Job Duplication ✅ Yes Medium Medium
B1 Sequential Wrapper ❌ No (~2x time) Low Low
B2 Parallel Wrapper ✅ Yes Low Low-Medium
C True Matrix (Composite Actions) ✅ Yes High High

Recommended: Option B2 (Parallel Wrapper) - best balance of parallelism with minimal refactoring.

Decision Document

📄 See linked Google Doc for detailed analysis and decision gathering

Acceptance Criteria

  • Architecture decision documented and approved
  • Matrix configuration design finalized (2 variants max: default + alternate)
  • Release workflow (cicd_6-release.yml) supports enable-matrix input
  • Parallel execution of Java variant builds when matrix enabled
  • Output aggregation for Docker tags (Slack notification)
  • Shared steps run once (SBOM, plugin update, labels)
  • Backward compatibility: enable-matrix: false works identically to current
  • Optional: Extend to trunk/nightly workflows (manual dispatch)
  • Optional: Label-based matrix trigger for PR workflow (java-matrix label)
  • Documentation created (docs/JAVA_MATRIX_BUILD_GUIDE.md)

Priority

Medium

Additional Context

Key Files to Modify
  • .github/workflows/cicd_6-release.yml - Add matrix inputs
  • .github/workflows/cicd_comp_build-phase.yml - Support matrix-derived inputs
  • .github/workflows/cicd_comp_deployment-phase.yml - Support matrix-derived inputs
  • .github/workflows/cicd_comp_release-phase.yml - Add Artifactory version suffix
  • .github/actions/core-cicd/deployment/deploy-jfrog/action.yml - Add version suffix input
Simplified Configuration (2 variants only)
inputs:
  enable-matrix:
    description: 'Enable dual Java version build'
    type: boolean
    default: false
  alternate-java-version:
    description: 'Alternate Java version (SDKMAN format)'
    type: string
    default: '25.0.1-open'
  alternate-artifact-suffix:
    description: 'Suffix for alternate Java artifacts'
    type: string
    default: '-java25'
Related Issues
  • Epic: #34484
  • Phase 1: #34586 (PR #34612)
  • Phase 1.5: #34637

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the four implementation options and the linked decision document, then inspect .github/workflows/cicd_6-release.yml and the listed build, deployment, release, and deploy-jfrog files. Done means an approved architecture, parallel Java variants with aggregated Docker tags, shared steps run once, enable-matrix disabled remains backward compatible, and the Java matrix guide is created.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, java
Domain
build-system, ci-cd, release
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.