88
99jobs :
1010 build :
11- name : Build and Test (JDK ${{ matrix.java-version }})
11+ name : Build and Test (JDK ${{ matrix.java-version }}, Gradle ${{ matrix.gradle-version }} )
1212 runs-on : ubuntu-latest
1313
1414 strategy :
1515 fail-fast : false # Don't cancel other jobs if one fails
1616 matrix :
17- java-version : ['8', '11', '17', '21', '25']
17+ include :
18+ # Use latest Gradle version that supports each Java version
19+ # Java 8, 11, 17: Latest Gradle 8.x (8.14.3 supports Java 8-21)
20+ - java-version : ' 8'
21+ gradle-version : ' 8.14.3'
22+ - java-version : ' 11'
23+ gradle-version : ' 8.14.3'
24+ - java-version : ' 17'
25+ gradle-version : ' 8.14.3'
26+ # Java 21, 25: Latest Gradle 9.x (9.2.1 supports Java 19-25)
27+ - java-version : ' 21'
28+ gradle-version : ' 9.2.1'
29+ - java-version : ' 25'
30+ gradle-version : ' 9.2.1'
1831
1932 steps :
2033 - name : Checkout code
@@ -31,16 +44,62 @@ jobs:
3144 with :
3245 node-version : ' 18'
3346
47+ - name : Setup Gradle ${{ matrix.gradle-version }}
48+ uses : gradle/gradle-build-action@v2
49+ with :
50+ gradle-version : ${{ matrix.gradle-version }}
51+
52+ - name : Validate Gradle-Java compatibility
53+ run : |
54+ JAVA_VERSION=${{ matrix.java-version }}
55+ GRADLE_VERSION="${{ matrix.gradle-version }}"
56+
57+ echo "Checking compatibility: Java $JAVA_VERSION with Gradle $GRADLE_VERSION"
58+
59+ # Gradle 7.x supports Java 8-19
60+ if [[ "$GRADLE_VERSION" == 7.* ]]; then
61+ if [[ "$JAVA_VERSION" -ge 8 && "$JAVA_VERSION" -le 19 ]]; then
62+ echo "✓ Compatible: Gradle 7.x supports Java 8-19"
63+ else
64+ echo "✗ Incompatible: Gradle 7.x requires Java 8-19, but Java $JAVA_VERSION is specified"
65+ exit 1
66+ fi
67+ # Gradle 8.x supports Java 8-21
68+ elif [[ "$GRADLE_VERSION" == 8.* ]]; then
69+ if [[ "$JAVA_VERSION" -ge 8 && "$JAVA_VERSION" -le 21 ]]; then
70+ echo "✓ Compatible: Gradle 8.x supports Java 8-21"
71+ else
72+ echo "✗ Incompatible: Gradle 8.x requires Java 8-21, but Java $JAVA_VERSION is specified"
73+ exit 1
74+ fi
75+ # Gradle 9.x supports Java 19-25
76+ elif [[ "$GRADLE_VERSION" == 9.* ]]; then
77+ if [[ "$JAVA_VERSION" -ge 19 && "$JAVA_VERSION" -le 25 ]]; then
78+ echo "✓ Compatible: Gradle 9.x supports Java 19-25"
79+ else
80+ echo "✗ Incompatible: Gradle 9.x requires Java 19-25, but Java $JAVA_VERSION is specified"
81+ exit 1
82+ fi
83+ else
84+ echo "⚠ Unknown Gradle version: $GRADLE_VERSION"
85+ fi
86+ shell : bash
87+
3488 - name : Cache Gradle dependencies
3589 uses : actions/cache@v3
3690 with :
3791 path : |
3892 ~/.gradle/caches
3993 ~/.gradle/wrapper
40- key : ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
94+ key : ${{ runner.os }}-gradle-${{ matrix.gradle-version }}-${{ hashFiles('**/*.gradle*') }}
4195 restore-keys : |
96+ ${{ runner.os }}-gradle-${{ matrix.gradle-version }}-
4297 ${{ runner.os }}-gradle-
4398
99+ - name : Update Gradle wrapper
100+ run : gradle wrapper --gradle-version ${{ matrix.gradle-version }} --no-daemon
101+ shell : bash
102+
44103 - name : Build and test with benchmarks
45104 run : ./gradlew -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" --stacktrace check benchmark
46105 shell : bash
@@ -49,20 +108,20 @@ jobs:
49108 if : always()
50109 uses : actions/upload-artifact@v4
51110 with :
52- name : test-results-jdk${{ matrix.java-version }}
111+ name : test-results-jdk${{ matrix.java-version }}-gradle${{ matrix.gradle-version }}
53112 path : build/test-results/
54113 retention-days : 7
55114
56115 - name : Upload coverage reports
57116 if : always()
58117 uses : actions/upload-artifact@v4
59118 with :
60- name : coverage-reports-jdk${{ matrix.java-version }}
119+ name : coverage-reports-jdk${{ matrix.java-version }}-gradle${{ matrix.gradle-version }}
61120 path : build/reports/jacoco/
62121 retention-days : 7
63122
64123 - name : Upload build artifacts
65- if : matrix.java-version == '11'
124+ if : matrix.java-version == '11' && matrix.gradle-version == '8.14.3'
66125 uses : actions/upload-artifact@v4
67126 with :
68127 name : build-artifacts
0 commit comments