---
name: CI

on:
  push:
    branches: [main]
  pull_request:

# If another push to the same PR or branch happens while this workflow is still running,
# cancel the earlier run in favor of the next run.
#
# There's no point in testing an outdated version of the code. GitHub only allows
# a limited number of job runners to be active at the same time, so it's better to cancel
# pointless jobs early so that more useful jobs can run sooner.
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: '3.10'
      - id: files
        uses: Ana06/get-changed-files@v2.2.0
      - id: set-matrix
        run: |
          python .github/scripts/check_diff.py ${{ steps.files.outputs.all }} >> $GITHUB_OUTPUT
    outputs:
      dirs-to-run: ${{ steps.set-matrix.outputs.dirs-to-run }}
  codespell:
    name: cd ${{ matrix.working-directory }}
    needs: [build]
    strategy:
      matrix:
        working-directory: ${{ fromJson(needs.build.outputs.dirs-to-run) }}
    uses: ./.github/workflows/_codespell.yml
    with:
      working-directory: ${{ matrix.working-directory }}

  ci:
    name: cd ${{ matrix.working-directory }}
    needs: [ build ]
    strategy:
      matrix:
        working-directory: ${{ fromJson(needs.build.outputs.dirs-to-run) }}
    uses: ./.github/workflows/_all_ci.yml
    with:
      working-directory: ${{ matrix.working-directory }}