跳到主要内容

Java Gradle CI

Full Java Gradle project continuous integration workflow, including multiple JDK version matrix, Gradle cache, build and test.

name: Java Gradle CI

on:
push:
branches:
- main
- 'feature/**'
paths:
- 'src/**'
- 'build.gradle'
- 'settings.gradle'
- 'gradle/**'
pull_request:
branches:
- main

concurrency:
max: 1
exceed-action: QUEUE

permissions:
repository: read

jobs:
build:
name: Build JDK ${{ matrix.java-version }}
runs-on: {ubuntu-24,x64,small}
strategy:
matrix:
java-version: [11, 17, 21]
fail-fast: false
max-parallel: 3

steps:
- name: Checkout code
uses: checkout

- name: Setup JDK ${{ matrix.java-version }}
uses: setup-java
with:
java-version: ${{ matrix.java-version }}
distribution: 'temurin'

- name: Cache Gradle packages
uses: cache
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ matrix.java-version }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-${{ matrix.java-version }}-

- name: Gradle build
run: ./gradlew compileJava --no-daemon

- name: Gradle unit tests
run: ./gradlew test --no-daemon

- name: Gradle integration tests
run: ./gradlew integrationTest --no-daemon

- name: Gradle code quality check
run: ./gradlew checkstyleMain spotbugsMain --no-daemon

- name: Test report summary
if: ${{ always }}
run: |
echo "## Gradle Test Results - JDK ${{ matrix.java-version }}" >> $ATOMGIT_STEP_SUMMARY
echo "Build status: ${{ job.status }}" >> $ATOMGIT_STEP_SUMMARY

package:
name: Package and release
needs: build
runs-on: {ubuntu-24,x64,small}
if: ${{ startsWith(atomgit.ref, 'refs/tags/') }}

steps:
- name: Checkout code
uses: checkout

- name: Setup JDK 17
uses: setup-java
with:
java-version: '17'
distribution: 'temurin'

- name: Cache Gradle packages
uses: cache
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-17-${{ hashFiles('**/*.gradle*') }}

- name: Gradle package
run: ./gradlew bootJar --no-daemon

- name: Upload artifact
uses: upload-artifact
with:
name: gradle-artifacts
path: build/libs/*.jar
retention-days: 30