name: Lint and Format on: # Run on pushes to main and pushed tags, and on pull requests against main, but ignore the docs folder push: pull_request: concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} cancel-in-progress: true jobs: validation: name: "Validation" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: gradle/actions/wrapper-validation@v4 wpiformat: name: "wpiformat" runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Fetch all history and metadata run: | git fetch --prune --unshallow git checkout -b pr git branch -f main origin/main - name: Set up Python 3.12 uses: actions/setup-python@v5 with: python-version: 3.12 - name: Install wpiformat run: pip3 install wpiformat==2025.79 - name: Run run: wpiformat - name: Check output run: | set +e git --no-pager diff --exit-code HEAD exit_code=$? if test "$exit_code" -ne "0"; then echo "::error ::Linting failed. See https://docs.photonvision.org/en/latest/docs/contributing/linting.html" exit $exit_code fi - name: Generate diff run: git diff HEAD > wpiformat-fixes.patch if: ${{ failure() }} - uses: actions/upload-artifact@v4 with: name: wpiformat fixes path: wpiformat-fixes.patch if: ${{ failure() }} javaformat: name: "Java Formatting" needs: [validation] runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-java@v4 with: java-version: 17 distribution: temurin - run: | set +e ./gradlew spotlessCheck exit_code=$? if test "$exit_code" -ne "0"; then echo "::error ::Linting failed. See https://docs.photonvision.org/en/latest/docs/contributing/linting.html" exit $exit_code fi name: Run spotless client-lint-format: name: "PhotonClient Lint and Formatting" defaults: run: working-directory: photon-client runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm cache-dependency-path: photon-client/pnpm-lock.yaml - name: Install Dependencies run: pnpm i --frozen-lockfile - name: Check Linting run: | set +e pnpm run lint-ci exit_code=$? if test "$exit_code" -ne "0"; then echo "::error ::Linting failed. See https://docs.photonvision.org/en/latest/docs/contributing/linting.html" exit $exit_code fi - name: Check Formatting run: | set +e pnpm run format-ci exit_code=$? if test "$exit_code" -ne "0"; then echo "::error ::Linting failed. See https://docs.photonvision.org/en/latest/docs/contributing/linting.html" exit $exit_code fi