From d7579bac469e1bbdea54798ca2e5ee96cc549573 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Sat, 15 Oct 2022 17:55:31 +0200 Subject: [PATCH 1/7] add GitHub Actions workflow to verify builds and pull requests --- .github/workflows/main.yml | 94 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..b2aa483e --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,94 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +permissions: + contents: read + +jobs: + build-6: + runs-on: ubuntu-latest + name: Java 6 + steps: + - name: Check out Git repository + uses: actions/checkout@v3 + # JDK 11 is required for Maven itself as runtime + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: zulu + java-version: | + 6 + 11 + - name: Setup Maven + run: | + mkdir -p .mvn + echo "-B" > .mvn/maven.config + - name: Compile with Java 6 + run: mvn clean compile -Dmaven.toolchains.jdk.id=zulu_6 -P java-6,!legacy-java,!modern-java + - name: Run Tests with Java 6 + run: mvn test -Dmaven.toolchains.jdk.id=zulu_6 -P java-6,!legacy-java,!modern-java + - name: Build Test Report for Java 6 + if: ${{ always() }} + run: | + mvn surefire-report:report-only + mvn site -DgenerateReports=false + - name: Upload Test Results for Java 6 + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test Results for Java 6 + path: target/surefire-reports/ + - name: Upload Test Report 6 + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test Report for Java 6 + path: target/site/ + + build: + runs-on: ubuntu-latest + strategy: + matrix: + java: [ 8, 11, 17 ] + name: Java ${{ matrix.java }} + steps: + - name: Check out Git repository + uses: actions/checkout@v3 + - name: Set up JDK + uses: actions/setup-java@v3 + with: + distribution: zulu + java-version: ${{ matrix.java }} + - name: Setup Maven + run: | + mkdir -p .mvn + echo "-B" > .mvn/maven.config + - name: Compile with Java ${{ matrix.java }} + run: mvn clean compile + - name: Run Tests with Java ${{ matrix.java }} + run: mvn test + - name: Build Test Report for Java ${{ matrix.java }} + if: ${{ always() }} + run: | + mvn surefire-report:report-only + mvn site -DgenerateReports=false + - name: Upload Test Results for Java ${{ matrix.java }} + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test Results for Java ${{ matrix.java }} + path: target/surefire-reports/ + - name: Upload Test Report ${{ matrix.java }} + if: ${{ always() }} + uses: actions/upload-artifact@v3 + with: + name: Test Report for Java ${{ matrix.java }} + path: target/site/ From 88161742ee88987873f20455f75892a1d96f6563 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 13:39:17 +0100 Subject: [PATCH 2/7] feat: simplify java selection mode - Default to Java 1.8 (Java 8) - Provide a single legacy Java (8 and below) profile that sets the correct compiler flags - Provide distinct build workflows for legacy and modern Java - Default to Unicode file encoding for better consistency and modern standards - Default to modern Java compiler syntax for an easier/simpler way forward --- .github/workflows/main.yml | 55 ++++++++++++++++++++------------------ pom.xml | 51 ++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 27 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b2aa483e..fa53cd0c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,4 @@ -# This workflow will build a Java project with Maven -# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven - +# yaml-language-server:$schema=https://json.schemastore.org/github-workflow.json name: Java CI with Maven on: @@ -8,62 +6,67 @@ on: branches: [ master ] pull_request: branches: [ master ] + workflow_dispatch: +# https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#permissions-for-the-github_token permissions: contents: read jobs: - build-6: + legacy-java: runs-on: ubuntu-latest - name: Java 6 + strategy: + matrix: + java: [ 6, 8 ] + name: Java ${{ matrix.java }} steps: - name: Check out Git repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # JDK 11 is required for Maven itself as runtime - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: | - 6 + ${{ matrix.java }} 11 - name: Setup Maven run: | mkdir -p .mvn echo "-B" > .mvn/maven.config - - name: Compile with Java 6 - run: mvn clean compile -Dmaven.toolchains.jdk.id=zulu_6 -P java-6,!legacy-java,!modern-java - - name: Run Tests with Java 6 - run: mvn test -Dmaven.toolchains.jdk.id=zulu_6 -P java-6,!legacy-java,!modern-java - - name: Build Test Report for Java 6 + - name: Compile with Java ${{ matrix.java }} + run: mvn clean compile -P=legacy-java -Djava.version="1.${{ matrix.java }}" + - name: Run Tests with Java ${{ matrix.java }} + run: mvn test -P=legacy-java -Djava.version="1.${{ matrix.java }}" + - name: Build Test Report for Java ${{ matrix.java }} if: ${{ always() }} run: | mvn surefire-report:report-only mvn site -DgenerateReports=false - - name: Upload Test Results for Java 6 + - name: Upload Test Results for Java ${{ matrix.java }} if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Test Results for Java 6 + name: Test Results for Java ${{ matrix.java }} path: target/surefire-reports/ - - name: Upload Test Report 6 + - name: Upload Test Report ${{ matrix.java }} if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: Test Report for Java 6 + name: Test Report for Java ${{ matrix.java }} path: target/site/ build: runs-on: ubuntu-latest strategy: matrix: - java: [ 8, 11, 17 ] + java: [ 11, 17, 21 ] name: Java ${{ matrix.java }} steps: - name: Check out Git repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up JDK - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: zulu java-version: ${{ matrix.java }} @@ -72,9 +75,9 @@ jobs: mkdir -p .mvn echo "-B" > .mvn/maven.config - name: Compile with Java ${{ matrix.java }} - run: mvn clean compile + run: mvn clean compile -Djava.version="${{ matrix.java }}" - name: Run Tests with Java ${{ matrix.java }} - run: mvn test + run: mvn test -Djava.version="${{ matrix.java }}" - name: Build Test Report for Java ${{ matrix.java }} if: ${{ always() }} run: | @@ -82,13 +85,13 @@ jobs: mvn site -DgenerateReports=false - name: Upload Test Results for Java ${{ matrix.java }} if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Test Results for Java ${{ matrix.java }} path: target/surefire-reports/ - name: Upload Test Report ${{ matrix.java }} if: ${{ always() }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Test Report for Java ${{ matrix.java }} path: target/site/ diff --git a/pom.xml b/pom.xml index 86738534..70f8b4bb 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,12 @@ https://github.com/skyscreamer/JSONassert - 8 + 1.8 + UTF-8 + ${project.build.sourceEncoding} + ${java.version} + ${project.build.sourceEncoding} + [${java.version},${parsedVersion.nextMajorVersion}) @@ -62,11 +67,42 @@ + + + org.codehaus.mojo + build-helper-maven-plugin + 3.4.0 + + + + parse-version + + + ${java.version} + + + + org.apache.maven.plugins maven-compiler-plugin 3.11.0 + + org.apache.maven.plugins + maven-toolchains-plugin + 3.2.0 + + + + select-jdk-toolchain + + + + org.sonatype.plugins nexus-staging-maven-plugin @@ -100,6 +136,19 @@ + + legacy-java + + + (,1.8] + + + ${java.version} + ${java.version} + + + + deploy From 8e6ad675684e4521d449566d89e2d343ab5ed7e0 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 13:42:22 +0100 Subject: [PATCH 3/7] feat: add cache to workflow for faster builds --- .github/workflows/main.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fa53cd0c..07d75c73 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,15 @@ jobs: java-version: | ${{ matrix.java }} 11 + - name: Cache Maven artifacts + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + ~/.m2/wrapper + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- - name: Setup Maven run: | mkdir -p .mvn @@ -70,6 +79,15 @@ jobs: with: distribution: zulu java-version: ${{ matrix.java }} + - name: Cache Maven artifacts + uses: actions/cache@v4 + with: + path: | + ~/.m2/repository + ~/.m2/wrapper + key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} + restore-keys: | + ${{ runner.os }}-maven- - name: Setup Maven run: | mkdir -p .mvn From 5b45ffb672d8d468fa9a39fee0e9833484069d33 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 13:45:23 +0100 Subject: [PATCH 4/7] feat: make Maven compiler more robust by using a forked process --- pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pom.xml b/pom.xml index 70f8b4bb..506d0fa7 100644 --- a/pom.xml +++ b/pom.xml @@ -90,6 +90,13 @@ org.apache.maven.plugins maven-compiler-plugin 3.11.0 + + + true + org.apache.maven.plugins From 956439357d560ab4b239e473bd65110df8ebf2d9 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 14:12:57 +0100 Subject: [PATCH 5/7] chore: sort maven properties for better readability --- pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 506d0fa7..ef1e2655 100644 --- a/pom.xml +++ b/pom.xml @@ -12,11 +12,12 @@ https://github.com/skyscreamer/JSONassert - 1.8 UTF-8 ${project.build.sourceEncoding} - ${java.version} ${project.build.sourceEncoding} + + 1.8 + ${java.version} [${java.version},${parsedVersion.nextMajorVersion}) From 43b56cb154d409283f3d4dcb1fa980a1ff068009 Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 14:13:36 +0100 Subject: [PATCH 6/7] fix: use correct invocation order for Maven Toolchains and Compiler plugins --- pom.xml | 38 ++++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/pom.xml b/pom.xml index ef1e2655..2c7891d0 100644 --- a/pom.xml +++ b/pom.xml @@ -69,8 +69,14 @@ org.codehaus.mojo @@ -87,18 +93,10 @@ - - org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 - - - true - - + org.apache.maven.plugins maven-toolchains-plugin @@ -111,6 +109,18 @@ + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + + true + + org.sonatype.plugins nexus-staging-maven-plugin From d9bd6cd6649852ac867be86615b2108fbf4a44fe Mon Sep 17 00:00:00 2001 From: Nikolas Grottendieck Date: Tue, 31 Dec 2024 14:30:17 +0100 Subject: [PATCH 7/7] fix: ensure Maven Toolchains selects the correct JDK for Java 8 and below --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 2c7891d0..d2776bd4 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,8 @@ 1.8 ${java.version} [${java.version},${parsedVersion.nextMajorVersion}) + + IfSame