| #------------------------------------------------------------- |
| # |
| # 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 |
| # |
| # 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: Java Codestyle |
| |
| # Two Java style gates share this workflow: |
| # * Checkstyle -- whole-tree rule check (dev/checkstyle), on push and PR. |
| # * Java Format -- Eclipse formatter (dev/CodeStyle_eclipse.xml) applied to |
| # ONLY the lines a PR edits; fails if any edited line would |
| # change. The tree is not yet fully formatter-clean, so |
| # scoping to edited lines keeps it actionable and lets the |
| # codebase converge line-by-line. This gate needs the PR |
| # base commit, so it runs on pull_request only. |
| # They are separate jobs so each reports its own pass/fail status. |
| |
| on: |
| push: |
| paths-ignore: |
| - 'docs/**' |
| - '*.md' |
| - '*.html' |
| - 'src/main/python/**' |
| branches: |
| - main |
| pull_request: |
| paths-ignore: |
| - 'docs/**' |
| - '*.md' |
| - '*.html' |
| - 'src/main/python/**' |
| branches: |
| - main |
| |
| permissions: |
| contents: read |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} |
| |
| jobs: |
| java_checkstyle: |
| name: Java Checkstyle |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout Repository |
| uses: actions/checkout@v7 |
| |
| - name: Setup Java 17 adopt |
| uses: actions/setup-java@v6 |
| with: |
| distribution: adopt |
| java-version: '17' |
| cache: 'maven' |
| |
| - name: Run Checkstyle |
| run: mvn -ntp -B -Dcheckstyle.skip=false checkstyle:check |
| |
| java_format: |
| name: Java Format Check |
| # line-scoped to the PR diff -> needs the pull_request base commit |
| if: github.event_name == 'pull_request' |
| runs-on: ubuntu-latest |
| steps: |
| - name: Checkout Repository |
| uses: actions/checkout@v7 |
| with: |
| fetch-depth: 0 |
| |
| - name: Setup Java 17 adopt |
| uses: actions/setup-java@v6 |
| with: |
| distribution: adopt |
| java-version: '17' |
| cache: 'maven' |
| |
| - name: Setup Python |
| uses: actions/setup-python@v7 |
| with: |
| python-version: '3.11' |
| |
| - name: Unit-test the format checker |
| run: | |
| python -m pip install --quiet pytest |
| python -m pytest dev/tests -q |
| |
| - name: Check formatting of PR-edited lines |
| env: |
| BASE_SHA: ${{ github.event.pull_request.base.sha }} |
| run: | |
| # Fails only if the Eclipse formatter would change a line this PR edited. |
| # See dev/format_changed.py for the line-scoping logic. |
| if ! python3 dev/format_changed.py --check "$BASE_SHA"; then |
| echo "::error::Some lines edited by this PR are not formatted per dev/CodeStyle_eclipse.xml." |
| echo "Fix only your edited lines locally and commit the result:" |
| echo "" |
| echo " dev/format-changed.sh" |
| echo "" |
| echo "(Do NOT run a bare 'mvn formatter:format' -- it reformats the whole tree.)" |
| exit 1 |
| fi |