From ad19b676f80593a6dfe5dd793a42b48de529a54a Mon Sep 17 00:00:00 2001 From: tommy stendahl Date: Fri, 9 Oct 2026 12:01:43 +0200 Subject: [PATCH] Refactor CI into Java matrix and use maven.compiler.release Restructure .github/workflows/actions.yml from a flat include list into a clean java: [17, 21] x suite matrix, pairing each JDK runtime with the matching bytecode target. Apply -Dnet.bytebuddy.experimental=true to all jobs so Mockito/ByteBuddy work on JDK 21. Switch the maven-compiler-plugin configuration from / to across the root, connection, standalone-integration and ecchronos-binary POMs for a true cross-compilation guarantee. --- .github/workflows/actions.yml | 154 +++++++++------------------------ connection/pom.xml | 3 +- ecchronos-binary/pom.xml | 3 +- pom.xml | 6 +- standalone-integration/pom.xml | 3 +- 5 files changed, 48 insertions(+), 121 deletions(-) diff --git a/.github/workflows/actions.yml b/.github/workflows/actions.yml index a472dab34..f805ae65a 100644 --- a/.github/workflows/actions.yml +++ b/.github/workflows/actions.yml @@ -18,127 +18,56 @@ permissions: read-all jobs: tests: + # Each job runs on JDK ${{ matrix.java }} and compiles to the matching + # bytecode target (-Djava.version=${{ matrix.java }}). Runtime and target are + # paired, so we test exactly: JDK 17 -> target 17 and JDK 21 -> target 21. + name: "${{ matrix.suite.name }} - Java ${{ matrix.java }}" runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: - include: - # Java 17 tests - - name: "Unit tests - Java 17" - java_version: 17 - test_suite: 'test -Djava.version=17 jacoco:report' - - name: "Style check - Java 17" - java_version: 17 - test_suite: 'test-compile -Djava.version=17 com.mycila:license-maven-plugin:check pmd:pmd pmd:cpd pmd:check pmd:cpd-check javadoc:jar' - - name: "Standalone integration 4.1 - Java 17" - java_version: 17 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=4.1 -Djava.version=17 -DskipUTs' + java: [17, 21] + suite: + - name: "Unit tests" + goals: 'test jacoco:report' + - name: "Style check" + goals: 'test-compile com.mycila:license-maven-plugin:check pmd:pmd pmd:cpd pmd:check pmd:cpd-check javadoc:jar' + - name: "Standalone integration 4.1" + goals: 'verify -P standalone-integration-tests -Dit.cassandra.version=4.1 -DskipUTs' artifacts_dir: "standalone-integration/target" - - name: "Standalone integration 5.0 - Java 17" - java_version: 17 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -DskipUTs' + - name: "Standalone integration 5.0" + goals: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -DskipUTs' artifacts_dir: "standalone-integration/target" - - name: "Python integration - Java 17" - java_version: 17 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -DskipUTs' + - name: "Python integration" + goals: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Topology integration - Java 17" - java_version: 17 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -DskipUTs' + - name: "Topology integration" + goals: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "DatacenterAware Multi-Agent integration tests - Java 17" - java_version: 17 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -DskipUTs' + - name: "DatacenterAware Multi-Agent integration tests" + goals: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - # Java 21 tests - - name: "Unit tests - Java 21" - java_version: 21 - test_suite: 'test -Dnet.bytebuddy.experimental=true -Djava.version=21 jacoco:report' - - name: "Style check - Java 21" - java_version: 21 - test_suite: 'test-compile -Djava.version=21 com.mycila:license-maven-plugin:check pmd:pmd pmd:cpd pmd:check pmd:cpd-check javadoc:jar' - - name: "Standalone integration 4.1 - Java 21" - java_version: 21 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=4.1 -Djava.version=21 -DskipUTs' + - name: "Jolokia Standalone integration 5.0" + goals: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -DskipUTs' artifacts_dir: "standalone-integration/target" - - name: "Standalone integration 5.0 - Java 21" - java_version: 21 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -DskipUTs' - artifacts_dir: "standalone-integration/target" - - name: "Python integration - Java 21" - java_version: 21 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Topology integration - Java 21" - java_version: 21 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "DatacenterAware Multi-Agent integration tests - Java 21" - java_version: 21 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - # Java 17 Jolokia tests - - name: "Jolokia Standalone integration 5.0 - Java 17" - java_version: 17 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -DskipUTs' - artifacts_dir: "standalone-integration/target" - - name: "Jolokia Python integration - Java 17" - java_version: 17 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Python integration - Java 17 - PEM" - java_version: 17 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Topology integration - Java 17" - java_version: 17 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Topology integration - Java 17 - PEM" - java_version: 17 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia DatacenterAware Multi-Agent integration tests - Java 17" - java_version: 17 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia DatacenterAware Multi-Agent integration tests - Java 17 - PEM" - java_version: 17 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=17 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' - artifacts_dir: "ecchronos-binary/target" - - - # Java 21 Jolokia tests - - name: "Jolokia Standalone integration 5.0 - Java 21" - java_version: 21 - test_suite: 'verify -P standalone-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -DskipUTs' - artifacts_dir: "standalone-integration/target" - - name: "Jolokia Python integration - Java 21" - java_version: 21 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -DskipUTs' + - name: "Jolokia Python integration" + goals: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Python integration - Java 21 - PEM" - java_version: 21 - test_suite: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' + - name: "Jolokia Python integration - PEM" + goals: 'verify -P python-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Topology integration - Java 21" - java_version: 21 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -DskipUTs' + - name: "Jolokia Topology integration" + goals: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia Topology integration - Java 21 - PEM" - java_version: 21 - test_suite: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' + - name: "Jolokia Topology integration - PEM" + goals: 'verify -P topology-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia DatacenterAware Multi-Agent integration tests - Java 21" - java_version: 21 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -DskipUTs' + - name: "Jolokia DatacenterAware Multi-Agent integration tests" + goals: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" - - name: "Jolokia DatacenterAware Multi-Agent integration tests - Java 21 - PEM" - java_version: 21 - test_suite: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Djava.version=21 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' + - name: "Jolokia DatacenterAware Multi-Agent integration tests - PEM" + goals: 'verify -P multi-agent-datacenter-aware-integration-tests -Dit.cassandra.version=5.0 -Dit.jolokia.enabled=true -Dit.jmx.pem.enabled=true -DskipUTs' artifacts_dir: "ecchronos-binary/target" steps: @@ -151,10 +80,10 @@ jobs: restore-keys: | build-${{ runner.os }}-maven- - - name: Set up JDK ${{ matrix.java_version }} + - name: Set up JDK ${{ matrix.java }} uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1 with: - java-version: ${{ matrix.java_version }} + java-version: ${{ matrix.java }} distribution: 'temurin' - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 @@ -174,7 +103,7 @@ jobs: run: mvn install -Pbuild-cassandra-test-jar -DskipTests=true - name: Set Cassandra memory limits for topology tests - if: contains(matrix.name, 'Topology') + if: contains(matrix.suite.name, 'Topology') run: | echo "MAX_HEAP_SIZE=1536M" >> $GITHUB_ENV echo "HEAP_NEWSIZE=200M" >> $GITHUB_ENV @@ -184,16 +113,19 @@ jobs: with: version: '2.31.0' - - run: mvn $TEST_SUITE -B + # Runs on JDK ${{ matrix.java }}; -Djava.version sets the matching bytecode + # target. net.bytebuddy.experimental=true lets Mockito/ByteBuddy run on JDK 21. + - run: mvn $MAVEN_GOALS -Djava.version=$JAVA_VERSION -Dnet.bytebuddy.experimental=true -B id: tests env: - TEST_SUITE: ${{ matrix.test_suite }} + MAVEN_GOALS: ${{ matrix.suite.goals }} + JAVA_VERSION: ${{ matrix.java }} - name: Upload artifacts if: ${{ failure() && steps.tests.conclusion == 'failure' }} uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: - name: ${{ matrix.name }}-ecchronos-logs + name: ${{ matrix.suite.name }} - Java ${{ matrix.java }}-ecchronos-logs path: ./ecchronos-binary/target/test/ecchronos-binary-agent-*/logs/ if-no-files-found: 'ignore' diff --git a/connection/pom.xml b/connection/pom.xml index 252ddfabb..0deca9c77 100644 --- a/connection/pom.xml +++ b/connection/pom.xml @@ -79,8 +79,7 @@ maven-compiler-plugin - ${maven.compiler.source} - ${maven.compiler.target} + ${maven.compiler.release} diff --git a/ecchronos-binary/pom.xml b/ecchronos-binary/pom.xml index 521f6c213..b832a8ebf 100644 --- a/ecchronos-binary/pom.xml +++ b/ecchronos-binary/pom.xml @@ -28,8 +28,7 @@ Packaging of ecChronos as a standalone application EcChronos Binary - 17 - 17 + ${java.version} UTF-8 diff --git a/pom.xml b/pom.xml index aebb9cd03..d3993e3ab 100644 --- a/pom.xml +++ b/pom.xml @@ -103,8 +103,7 @@ 17 - 17 - 17 + ${java.version} UTF-8 @@ -717,8 +716,7 @@ -parameters - ${java.version} - ${java.version} + ${java.version} diff --git a/standalone-integration/pom.xml b/standalone-integration/pom.xml index 54e56fccb..406febfd5 100644 --- a/standalone-integration/pom.xml +++ b/standalone-integration/pom.xml @@ -207,8 +207,7 @@ maven-compiler-plugin - ${java.version} - ${java.version} + ${java.version} ${project.build.directory}/generated-sources/