name: Lint

on:
  push:
    branches:
      - main
  pull_request:

permissions: {}

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      # NOTE: We intentionally lint against our minimum supported Python.
      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
        with:
          python-version: "3.9"
          cache: "pip"
          cache-dependency-path: pyproject.toml

      - name: deps
        run: make dev ID_EXTRA=lint

      - name: lint
        run: make lint

  check-readme:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      # NOTE: We intentionally check `--help` rendering against our minimum Python,
      # since it changes slightly between Python versions.
      - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405
        with:
          python-version: "3.9"
          cache: "pip"
          cache-dependency-path: pyproject.toml

      - name: deps
        run: make dev

      - name: check-readme
        run: make check-readme

  licenses:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      # adapted from Warehouse's bin/licenses
      - run: |
          for fn in $(find . -type f -name "*.py"); do
            if [[ ! "$(head -5 $fn | grep "^ *\(#\|\*\|\/\/\) .* License\(d*\)")" ]]; then
              echo "${fn} is missing a license"
              exit 1
            fi
          done

  all-lints-pass:
    if: always()

    needs:
      - lint
      - check-readme
      - licenses

    runs-on: ubuntu-latest

    steps:
      - name: check lint jobs
        uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
        with:
          jobs: ${{ toJSON(needs) }}
