name: lint

on:
  push:
    paths:
      - "**.py"
      - ".pylintrc"
      - ".gitea/workflows/lint.yml"

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      # No actions/setup-python: the runner image already ships Python 3.12,
      # and older act_runner engines mishandle setup-python's PATH. Install
      # into the ephemeral job container's system Python — the pylint/pyright
      # console scripts land on /usr/local/bin (on PATH) so the steps below
      # still resolve. --break-system-packages is safe: the container is
      # disposable.
      - name: Install dev dependencies
        run: python3 -m pip install --break-system-packages -r requirements-dev.txt

      - name: Run pylint
        run: |
          # Pylint's normal exit code is nonzero for any emitted finding,
          # regardless of --fail-under. Preserve the full report but enforce
          # the aggregate score this workflow promises.
          set +e
          find . -name '*.py' -not -path './.venv/*' -not -path './.git/*' \
            | xargs pylint --fail-under=8.0 \
            | tee /tmp/pylint-output.txt
          set -e
          SCORE=$(sed -n \
            's/^Your code has been rated at \([-0-9.]*\)\/10.*/\1/p' \
            /tmp/pylint-output.txt | tail -1)
          test -n "$SCORE"
          awk -v score="$SCORE" 'BEGIN { exit !(score >= 8.0) }'

      - name: Run pyright
        run: |
          # Run pyright type checking
          pyright .
