This is an automated email from the ASF dual-hosted git repository. ppkarwasz pushed a commit to branch feature/ci-matrix-platforms in repository https://gitbox.apache.org/repos/asf/commons-xml.git
commit fb2bfefa84f81925ae08c07b05816957d1449b74 Author: Piotr P. Karwasz <[email protected]> AuthorDate: Thu Jul 9 22:54:31 2026 +0200 Restructure the build matrix around the axes that matter java.xml is pure Java, so the OS and JDK axes barely interact. The one OS-specific behavior this library touches is file URI / systemId normalization on Windows, which any single Windows job exercises. Crossing three OSes with two JDK endpoints therefore spent jobs on combinations that cannot differ, while leaving the axes that do differ underexplored. Run the JDK majors on Windows, which covers systemId normalization at every version for free, and keep one Linux canary on the current LTS: a case-sensitive filesystem, and what contributors and downstream CI run. Add distribution variance, one job each. Semeru 8 and 21 cover OpenJ9, whose class library is the most divergent runtime setup-java offers and the most plausible source of surprises in factory lookup and class loading. Zulu is pinned to an old 8 patch level, verifying the hardening degrades gracefully on a runtime predating the later jdk.xml.* backports. Drop macOS: its filesystem is case-insensitive like Windows and POSIX-pathed like Linux, so it is strictly interior to the other two. Vendors that track the OpenJDK Updates projects closely are interchangeable with Temurin here. Narrow the GraalVM job to the `test` lifecycle; native-image is slow and the static analysis goals are already covered by the JVM jobs. Twelve JVM jobs plus the two Android legs, against twenty-one for a full 3x7 matrix, with strictly better coverage of the axes that produce different results. Assisted-By: Claude Opus 4.8 <[email protected]> --- .github/workflows/maven.yml | 53 +++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 11ff7f6..5ce9956 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -32,48 +32,53 @@ concurrency: jobs: build: - # JDK coverage across all current LTS versions and all three OSes, but sparingly: + # java.xml is pure Java, so the OS and JDK axes barely interact. + # The one OS-specific behavior this library touches is file URI / systemId normalization on Windows, + # which is old, stable code: a single Windows job exercises it, so there is no reason to cross OSes with JDK versions. + # The axes that do change results are the JDK major version and, more weakly, the vendor's class-library lineage. # - # - On ubuntu-latest we run every LTS (8, 11, 17, 21, 25). - # - On windows-latest and macos-latest we run only the endpoints (8 and 25), - # since cross-OS regressions almost always surface at the version endpoints - # rather than in between. + # - JDK majors, Windows only. Covers systemId normalization at every version for free. + # - One Linux canary, on the current LTS: case-sensitive filesystem, and what contributors and downstream CI run. + # - Distribution variance, one job each: + # * Semeru 8 and 21 OpenJ9's class library is the most divergent runtime setup-java offers, + # and the most plausible source of surprises in factory lookup and class loading. + # * Zulu Pinned to an old 8 patch level. + # Verifies the hardening degrades gracefully on a runtime predating the later jdk.xml.* backports. + # * GraalVM Runs the suite as a native image via the `native-xalan` profile: + # the JAXP providers resolve at build time under the closed-world assumption, a different code path from + # the JVM's run-time ServiceLoader lookup. 25 is the latest GraalVM release. # - # Temurin does not publish a JDK 8 build for ARM-based macOS runners, so that - # one combination uses Zulu. - # - # The GraalVM entry runs the test suite as a native image instead of on the JVM, via the `native-xalan` profile. + # macOS is intentionally omitted: its filesystem is case-insensitive like Windows and POSIX-pathed like Linux, so + # it is strictly interior to the other two. Vendors that track the OpenJDK Updates projects closely (Corretto, + # Liberica, Microsoft, SapMachine) are likewise omitted: for java.xml purposes they are interchangeable with + # Temurin. name: build (${{ matrix.os }}, ${{ matrix.distribution }} ${{ matrix.java-version }}) runs-on: ${{ matrix.os }} strategy: max-parallel: 20 fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] - java-version: [ 8, 25 ] + os: [ windows-latest ] + java-version: [ "8", "11", "17", "21", "25", "26", "27-ea" ] distribution: [ temurin ] - exclude: - - os: macos-latest - java-version: 8 include: - - os: macos-latest - java-version: 8 - distribution: zulu - os: ubuntu-latest - java-version: 11 + java-version: 25 distribution: temurin - os: ubuntu-latest - java-version: 17 - distribution: temurin + java-version: 8 + distribution: semeru - os: ubuntu-latest java-version: 21 - distribution: temurin - # native-image resolves the JAXP providers at build time under the closed-world assumption, a different - # code path from the JVM's run-time ServiceLoader lookup. 25 is the latest GraalVM release. + distribution: semeru + - os: ubuntu-latest + java-version: 8.0.201 + distribution: zulu - os: ubuntu-latest java-version: 25 distribution: graalvm - maven-args: -Pnative-xalan + # GraalVM is slow, so we only run the `test` lifecycle + maven-args: -Pnative-xalan test steps: - name: Checkout repository
