From 852553f9d5dc1c79eee55e6d6605baf31819ec5b Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sat, 10 Feb 2024 11:39:29 +0000 Subject: [PATCH] Build native binary in CI (fixes google#894) --- .github/workflows/ci.yml | 23 +++++++++++++++++++---- .github/workflows/release.yml | 4 ++-- util/test-native.sh | 30 ++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 6 deletions(-) create mode 100755 util/test-native.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9da84de0b..e03234959 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,10 +29,10 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - java: [21, 17, 11] + java: [GraalVM, 21, 17, 11] experimental: [false] include: - # Only test on macos and windows with a single recent JDK to avoid a + # Only test on MacOS and Windows with a single recent JDK to avoid a # combinatorial explosion of test configurations. - os: macos-latest java: 21 @@ -43,6 +43,9 @@ jobs: - os: ubuntu-latest java: EA experimental: true + - os: ubuntu-latest + java: GraalVM + experimental: false runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.experimental }} steps: @@ -58,19 +61,31 @@ jobs: with: website: jdk.java.net release: ${{ matrix.java }} - - name: "Set up JDK ${{ matrix.java }}" - if: ${{ matrix.java != 'EA' }} + - name: "Set up JDK ${{ matrix.java }} from Zulu" + if: ${{ matrix.java != 'EA' && matrix.java != 'GraalVM' }} uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} distribution: "zulu" cache: "maven" + - name: "Set up JDK ${{ matrix.java }}" + if: ${{ matrix.java == 'GraalVM' }} + uses: graalvm/setup-graalvm@v1 + with: + java-version: "21" + distribution: "graalvm-community" + github-token: ${{ secrets.GITHUB_TOKEN }} + native-image-job-reports: "true" + cache: "maven" - name: "Install" shell: bash run: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V - name: "Test" shell: bash run: mvn test -B + - name: "Native" + if: ${{ matrix.java == 'GraalVM' }} + run: mvn -Pnative -DskipTests package -pl core -am && util/test-native.sh publish_snapshot: name: "Publish snapshot" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a0bf2c6c8..cf57f3e94 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -69,7 +69,7 @@ jobs: run: | git push origin "v${{ github.event.inputs.version }}" - - name: Add Jars to Release Entry + - name: Add Artifacts to Release Entry uses: softprops/action-gh-release@v0.1.14 with: draft: true @@ -77,5 +77,5 @@ jobs: tag_name: "v${{ github.event.inputs.version }}" target_commitish: ${{ env.TARGET_COMMITISH }} files: | - core/target/google-java-format-*.jar + core/target/google-java-format* eclipse_plugin/target/google-java-format-eclipse-plugin-*.jar diff --git a/util/test-native.sh b/util/test-native.sh new file mode 100755 index 000000000..a8643baf2 --- /dev/null +++ b/util/test-native.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# Copyright 2024 The Google Java Format Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -euox pipefail + +time java -jar core/target/google-java-format-*-all-deps.jar || true + +status=-1 +chmod +x core/target/google-java-format +if time core/target/google-java-format; then + status=0 +else + status=$? +fi +if [[ $status -ne 2 ]]; then + echo "google-java-format_linux (native) without arguments should have printed usage help and exited with 2, but did not :(" + exit 1 +fi