diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a2f986b4..1878126b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -# Copyright 2020 The Error Prone Authors. +# Copyright 2020-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. @@ -17,10 +17,10 @@ name: CI on: push: branches: - - master + - master pull_request: branches: - - master + - master jobs: test: @@ -28,11 +28,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest ] - java: [ 21, 17, 11 ] - experimental: [ false ] + os: [ubuntu-latest] + 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: @@ -50,46 +53,58 @@ jobs: uses: styfle/cancel-workflow-action@0.9.1 with: access_token: ${{ github.token }} - - name: 'Check out repository' + - name: "Check out repository" uses: actions/checkout@v4 - - name: 'Set up JDK ${{ matrix.java }} from jdk.java.net' + - name: "Set up JDK ${{ matrix.java }} from jdk.java.net" if: ${{ matrix.java == 'EA' }} uses: oracle-actions/setup-java@v1 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: 'Install' + 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' + - 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' + name: "Publish snapshot" needs: test if: github.event_name == 'push' && github.repository == 'google/google-java-format' && github.ref == 'refs/heads/master' runs-on: ubuntu-latest steps: - - name: 'Check out repository' + - name: "Check out repository" uses: actions/checkout@v4 - - name: 'Set up JDK 17' + - name: "Set up JDK 17" uses: actions/setup-java@v4 with: java-version: 17 - distribution: 'zulu' - cache: 'maven' + distribution: "zulu" + cache: "maven" server-id: sonatype-nexus-snapshots server-username: CI_DEPLOY_USERNAME server-password: CI_DEPLOY_PASSWORD - - name: 'Publish' + - name: "Publish" env: CI_DEPLOY_USERNAME: ${{ secrets.CI_DEPLOY_USERNAME }} CI_DEPLOY_PASSWORD: ${{ secrets.CI_DEPLOY_PASSWORD }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf50d61c6..7c2b5c055 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,3 +1,17 @@ +# Copyright 2020-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. + name: Release google-java-format on: @@ -20,8 +34,8 @@ jobs: uses: actions/setup-java@v4 with: java-version: 21 - distribution: 'zulu' - cache: 'maven' + distribution: "zulu" + cache: "maven" server-id: sonatype-nexus-staging server-username: CI_DEPLOY_USERNAME server-password: CI_DEPLOY_PASSWORD @@ -46,18 +60,16 @@ jobs: CI_DEPLOY_USERNAME: ${{ secrets.CI_DEPLOY_USERNAME }} CI_DEPLOY_PASSWORD: ${{ secrets.CI_DEPLOY_PASSWORD }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - run: - mvn --no-transfer-progress -pl '!eclipse_plugin' -P sonatype-oss-release clean deploy -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" + run: mvn --no-transfer-progress -pl '!eclipse_plugin' -P sonatype-oss-release clean deploy -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" - name: Build Eclipse plugin - run: - mvn --no-transfer-progress -pl 'eclipse_plugin' verify gpg:sign -DskipTests=true -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" + run: mvn --no-transfer-progress -pl 'eclipse_plugin' verify gpg:sign -DskipTests=true -Dgpg.passphrase="${{ secrets.GPG_PASSPHRASE }}" - name: Push tag 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 @@ -65,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/core/pom.xml b/core/pom.xml index d1363fed1..60add52d1 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -282,7 +282,7 @@ org.graalvm.buildtools native-maven-plugin - 0.9.13 + 0.10.0 true diff --git a/util/test-native.sh b/util/test-native.sh new file mode 100644 index 000000000..1cf4c59b7 --- /dev/null +++ b/util/test-native.sh @@ -0,0 +1,29 @@ +# 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