Skip to content

Simplify CI matrix to use latest Gradle version per Java version #3

Simplify CI matrix to use latest Gradle version per Java version

Simplify CI matrix to use latest Gradle version per Java version #3

Workflow file for this run

name: CI
on:
push:
branches: [ master, main ]
pull_request:
branches: [ master, main ]
jobs:
build:
name: Build and Test (JDK ${{ matrix.java-version }}, Gradle ${{ matrix.gradle-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false # Don't cancel other jobs if one fails
matrix:
include:
# Use latest Gradle version that supports each Java version
# Java 8, 11, 17: Latest Gradle 8.x (8.14.3 supports Java 8-21)
- java-version: '8'
gradle-version: '8.14.3'
- java-version: '11'
gradle-version: '8.14.3'
- java-version: '17'
gradle-version: '8.14.3'
# Java 21, 25: Latest Gradle 9.x (9.2.1 supports Java 19-25)
- java-version: '21'
gradle-version: '9.2.1'
- java-version: '25'
gradle-version: '9.2.1'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Setup Gradle ${{ matrix.gradle-version }}
uses: gradle/gradle-build-action@v2
with:
gradle-version: ${{ matrix.gradle-version }}
- name: Validate Gradle-Java compatibility
run: |
JAVA_VERSION=${{ matrix.java-version }}
GRADLE_VERSION="${{ matrix.gradle-version }}"
echo "Checking compatibility: Java $JAVA_VERSION with Gradle $GRADLE_VERSION"
# Gradle 7.x supports Java 8-19
if [[ "$GRADLE_VERSION" == 7.* ]]; then
if [[ "$JAVA_VERSION" -ge 8 && "$JAVA_VERSION" -le 19 ]]; then
echo "✓ Compatible: Gradle 7.x supports Java 8-19"
else
echo "✗ Incompatible: Gradle 7.x requires Java 8-19, but Java $JAVA_VERSION is specified"
exit 1
fi
# Gradle 8.x supports Java 8-21
elif [[ "$GRADLE_VERSION" == 8.* ]]; then
if [[ "$JAVA_VERSION" -ge 8 && "$JAVA_VERSION" -le 21 ]]; then
echo "✓ Compatible: Gradle 8.x supports Java 8-21"
else
echo "✗ Incompatible: Gradle 8.x requires Java 8-21, but Java $JAVA_VERSION is specified"
exit 1
fi
# Gradle 9.x supports Java 19-25
elif [[ "$GRADLE_VERSION" == 9.* ]]; then
if [[ "$JAVA_VERSION" -ge 19 && "$JAVA_VERSION" -le 25 ]]; then
echo "✓ Compatible: Gradle 9.x supports Java 19-25"
else
echo "✗ Incompatible: Gradle 9.x requires Java 19-25, but Java $JAVA_VERSION is specified"
exit 1
fi
else
echo "⚠ Unknown Gradle version: $GRADLE_VERSION"
fi
shell: bash
- name: Cache Gradle dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ matrix.gradle-version }}-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-${{ matrix.gradle-version }}-
${{ runner.os }}-gradle-
- name: Update Gradle wrapper
run: gradle wrapper --gradle-version ${{ matrix.gradle-version }} --no-daemon
shell: bash
- name: Build and test with benchmarks
run: ./gradlew -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" --stacktrace check benchmark
shell: bash
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results-jdk${{ matrix.java-version }}-gradle${{ matrix.gradle-version }}
path: build/test-results/
retention-days: 7
- name: Upload coverage reports
if: always()
uses: actions/upload-artifact@v4
with:
name: coverage-reports-jdk${{ matrix.java-version }}-gradle${{ matrix.gradle-version }}
path: build/reports/jacoco/
retention-days: 7
- name: Upload build artifacts
if: matrix.java-version == '11' && matrix.gradle-version == '8.14.3'
uses: actions/upload-artifact@v4
with:
name: build-artifacts
path: build/libs/*.jar
retention-days: 1
- name: Coveralls
if: matrix.java-version == '11' && github.event_name == 'push'
continue-on-error: true
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
run: ./gradlew coveralls
shell: bash