| # ---------------------------------------------------------------------------- |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you 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 |
| # |
| # https://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: "Java Platform compatibility" |
| |
| on: |
| push: |
| branches: [ "develop", "plc4j" ] |
| paths: |
| - code-generation/** |
| - protocols/** |
| - plc4j** |
| - pom.xml |
| pull_request: |
| paths: |
| - code-generation/** |
| - protocols/** |
| - plc4j** |
| - pom.xml |
| workflow_dispatch: |
| inputs: |
| forceUpdates: |
| description: "Forces a snapshot update" |
| required: false |
| default: 'false' |
| |
| env: |
| DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }} |
| |
| jobs: |
| test: |
| strategy: |
| matrix: |
| java: [ 21, 24 ] |
| os: [ ubuntu-latest, macos-latest, windows-latest ] |
| fail-fast: false |
| runs-on: ${{ matrix.os }} |
| steps: |
| - name: Install libpcap for Linux |
| if: matrix.os == 'ubuntu-latest' |
| run: sudo apt-get install libpcap-dev |
| |
| - name: Install libpcap for macos |
| if: matrix.os == 'macos-latest' |
| run: brew install libpcap |
| |
| - name: Checkout repository |
| uses: actions/checkout@v6 |
| |
| - name: Setup Java |
| uses: actions/setup-java@v5 |
| with: |
| distribution: 'adopt' |
| java-package: jdk |
| java-version: ${{ matrix.java }} |
| |
| - name: Cache local Maven repository |
| uses: actions/cache@v5 |
| with: |
| path: ~/.m2/repository |
| key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} |
| restore-keys: | |
| ${{ runner.os }}-maven- |
| |
| - name: Set Platform options |
| id: platform_opts |
| uses: actions/github-script@v8.0.0 |
| env: |
| OS: ${{ matrix.os }} |
| with: |
| script: | |
| const { OS } = process.env |
| if (OS.includes("windows")) { |
| core.setOutput('platform_opts', ``) |
| } else if (OS.includes("macos")) { |
| core.setOutput('platform_opts', `-Djna.library.path="$(find /usr/local/Cellar/libpcap/ -name lib)"`) |
| } else if (OS.includes("ubuntu")) { |
| core.setOutput('platform_opts', ``) |
| } else { |
| core.setOutput('platform_opts', ``) |
| } |
| |
| - name: Calculate platform suffix |
| id: platform_suffix |
| uses: actions/github-script@v8.0.0 |
| env: |
| OS: ${{ matrix.os }} |
| with: |
| script: | |
| const { OS } = process.env |
| if (OS.includes("windows")) { |
| core.setOutput('platform_suffix', `.cmd`) |
| } else { |
| core.setOutput('platform_suffix', ``) |
| } |
| |
| - name: Set extra options |
| id: extra_options |
| uses: actions/github-script@v8.0.0 |
| env: |
| FORCE_UPDATE: ${{ github.event.inputs.forceUpdates }} |
| with: |
| script: | |
| const { FORCE_UPDATE } = process.env |
| if (FORCE_UPDATE.includes("true")) { |
| core.setOutput('extra_options', `-U`) |
| } else { |
| core.setOutput('extra_options', ``) |
| } |
| |
| # Note: due to github has no concept of recovering from a fail even if we have our fallback below we append a second un-parallel run behind this to be sure that it works with all checks. Only if that fails too we are ok with a "red" (which should be yellow) cross indicating a problem |
| - name: Run mvnw |
| run: | |
| ./mvnw${{ steps.platform_suffix.outputs.platform_suffix }} ${{ steps.extra_options.outputs.extra_options }} -B -P'with-java,enable-all-checks,update-generated-code' ${{ steps.platform_opts.outputs.platform_opts }} install |
| |
| - name: Upload Test Report (first failure) |
| uses: actions/upload-artifact@v6 |
| if: failure() |
| with: |
| name: "java-test-report-first-failure-${{ matrix.os }}-java-${{ matrix.java }}" |
| path: | |
| **/surefire-reports/TEST-*.xml |
| **/failsafe-reports/TEST-*.xml |
| |
| - name: Run mvnv without BacNet regression tests |
| if: ${{ failure() }} |
| run: ./mvnw${{ steps.platform_suffix.outputs.platform_suffix }} ${{ steps.extra_options.outputs.extra_options }} -B -P'with-java,skip-bacnet-regression-test,update-generated-code' ${{ steps.platform_opts.outputs.platform_opts }} install |
| |
| - name: Upload Test Report |
| uses: actions/upload-artifact@v6 |
| if: success() || failure() |
| with: |
| name: "java-test-report-${{ matrix.os }}-java-${{ matrix.java }}" |
| path: | |
| **/surefire-reports/TEST-*.xml |
| **/failsafe-reports/TEST-*.xml |