name: Test Supported Distributions

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

permissions:
  contents: read

env:
  FORCE_COLOR: 1
  PYTHONUNBUFFERED: 1
  PYTHONUTF8: 1

jobs:
  smoke-tests:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
        with:
          fetch-depth: 0 # Differential ShellCheck requires full git history

      - name: Check scripts in repository are executable
        run: |
          IFS=$'\n';
          for f in $(find . -name '*.sh'); do if [[ ! -x $f ]]; then echo "$f is not executable" && FAIL=1; fi ;done
          unset IFS;
          # If FAIL is 1 then we fail.
          [[ $FAIL == 1 ]] && exit 1 || echo "Scripts are executable!"

      - name: Differential ShellCheck
        uses: redhat-plumbers-in-action/differential-shellcheck@d965e66ec0b3b2f821f75c8eff9b12442d9a7d1e #v5.5.6
        with:
          severity: warning
          display-engine: sarif-fmt

      - name: Secret Scanning with TruffleHog
        uses: trufflesecurity/trufflehog@47e7b7cd74f578e1e3145d48f669f22fd1330ca6 #v3.94.3
        with:
          extra_args: --results=verified,unknown

      - name: Spell-Checking
        uses: codespell-project/actions-codespell@8f01853be192eb0f849a5c7d721450e7a467c579 #v2.2
        with:
          ignore_words_file: .codespellignore

      - name: Get editorconfig-checker
        uses: editorconfig-checker/action-editorconfig-checker@840e866d93b8e032123c23bac69dece044d4d84c #v2.2.0

      - name: Run editorconfig-checker
        run: editorconfig-checker

      - name: Check python code formatting with black
        uses: psf/black@c6755bb741b6481d6b3d3bb563c83fa060db96c9 #26.3.1
        with:
          src: "./test"
          options: "--check --diff --color"

  distro-test:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    needs: smoke-tests
    strategy:
      fail-fast: false
      matrix:
        distro:
          [
            debian_11,
            debian_12,
            debian_13,
            ubuntu_20,
            ubuntu_22,
            ubuntu_24,
            centos_9,
            centos_10,
            fedora_40,
            fedora_41,
            fedora_42,
            fedora_43,
            alpine_3_21,
            alpine_3_22,
            alpine_3_23,
          ]
    env:
      DISTRO: ${{matrix.distro}}
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2

      - name: Set up Python
        uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 #v6.2.0
        with:
          python-version: "3.13"

      - name: Install wheel
        run:  pip install wheel

      - name: Install dependencies
        run: pip install -r test/requirements.txt

      - name: Test with tox
        run: tox -c test/tox.${DISTRO}.ini
