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

Reply via email to