name: Lint

on:
  push:
    branches:
      - '**'
  pull_request:
    branches:
      - 'main'

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

      - uses: actions/setup-python@v5
        id: cp311
        with:
          python-version: "3.11"

      - name: Install Poetry
        uses: snok/install-poetry@v1
        with:
          virtualenvs-create: true
          virtualenvs-in-project: true

      - name: Get full Python version
        id: full-python-version
        run: echo "version=$(python -c "import sys; print('-'.join(str(v) for v in sys.version_info))")" >> $GITHUB_OUTPUT

      - name: Load cached venv
        id: cached-poetry-dependencies
        uses: actions/cache@v4
        with:
          path: .venv
          key: venv-${{ runner.os }}-cache-${{ steps.full-python-version.outputs.version }}-${{ hashFiles('**/poetry.lock')}}-v20210414

      - name: Install dependencies
        run: poetry install
        if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'

      - name: Activate venv
        run: |
          echo "VIRTUAL_ENV=$GITHUB_WORKSPACE/.venv" >> $GITHUB_ENV
          echo "PYTHONPATH=$GITHUB_WORKSPACE" >> $GITHUB_ENV
          echo "$GITHUB_WORKSPACE/.venv/bin" >> $GITHUB_PATH

      - name: mypy Static Type Checker
        run: |
          mypy \
          --follow-imports=skip \
          --exclude 'migrations/*' \
          .

      - name: Flynt f-string Formatter
        run: >
          flynt .
          --line-length=79
          --transform-concats
          --fail-on-change

      - name: Black Code Formatter
        uses: psf/black@stable

  lint-isort:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-python@v5
        with:
          python-version: "3.9"

      - name: isort Import Sorter
        uses: isort/isort-action@v1