name: On pull request

on:
  pull_request:
    paths-ignore:
      - "docs/**"

env:
  DEFAULT_PYTHON: 3.9

jobs:
  build_devcontainer:
    runs-on: ubuntu-latest
    name: Build Devcontainer
    # The Dockerfile contains features that requires buildkit, and since the
    # devcontainer cli uses docker-compose to build the image, the only way to
    # ensure docker-compose uses buildkit is to explicitly enable it.
    env:
      DOCKER_BUILDKIT: "1"
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-node@master
        with:
          node-version: 16.x
      - name: Install devcontainer cli
        run: npm install --global @devcontainers/cli
      - name: Build devcontainer
        run: devcontainer build --workspace-folder .
      # It would be nice to also test the following commands, but for some
      # reason they don't work even though in VS Code devcontainer works.
      # - name: Start devcontainer
      #   run: devcontainer up --workspace-folder .
      # - name: Run devcontainer scripts
      #   run: devcontainer run-user-commands --workspace-folder .

  web_lint:
    name: Web - Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-node@master
        with:
          node-version: 16.x
      - run: npm install
        working-directory: ./web
      - name: Lint
        run: npm run lint
        working-directory: ./web

  web_test:
    name: Web - Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-node@master
        with:
          node-version: 20.x
      - run: npm install
        working-directory: ./web
      # - name: Test
      #   run: npm run test
      #   working-directory: ./web

  python_checks:
    runs-on: ubuntu-latest
    name: Python Checks
    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          persist-credentials: false
      - name: Set up Python ${{ env.DEFAULT_PYTHON }}
        uses: actions/setup-python@v5.3.0
        with:
          python-version: ${{ env.DEFAULT_PYTHON }}
      - name: Install requirements
        run: |
          python3 -m pip install -U pip
          python3 -m pip install -r docker/main/requirements-dev.txt
      - name: Check formatting
        run: |
          ruff format --check --diff frigate migrations docker *.py
      - name: Check lint
        run: |
          ruff check frigate migrations docker *.py

  python_tests:
    runs-on: ubuntu-latest
    name: Python Tests
    steps:
      - name: Check out code
        uses: actions/checkout@v4
        with:
          persist-credentials: false
      - uses: actions/setup-node@master
        with:
          node-version: 16.x
      - run: npm install
        working-directory: ./web
      - name: Build web
        run: npm run build
        working-directory: ./web
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Build
        run: make
      - name: Run mypy
        run: docker run --rm --entrypoint=python3 frigate:latest -u -m mypy --config-file frigate/mypy.ini frigate
      - name: Run tests
        run: docker run --rm --entrypoint=python3 frigate:latest -u -m unittest