name: ci

on:
  push:
  pull_request:

jobs:
  check:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run checks
        run: make check

      - name: Run tests
        run: python3 -m unittest discover -s tests -p "test_*.py"

      - name: Show dependency plan
        run: make deps-plan

  shell-lint:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install shellcheck
        run: |
          sudo apt-get update
          sudo apt-get install -y shellcheck

      - name: Run shell lint
        run: make lint-shell

  shell-fmt:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install shfmt
        run: |
          set -euo pipefail
          version=3.13.1
          arch="$(uname -m)"
          case "$arch" in
            x86_64) shfmt_arch=amd64 ;;
            aarch64|arm64) shfmt_arch=arm64 ;;
            *) echo "unsupported architecture: $arch" >&2; exit 1 ;;
          esac
          curl -fsSL \
            -o /tmp/shfmt \
            "https://github.com/mvdan/sh/releases/download/v${version}/shfmt_v${version}_linux_${shfmt_arch}"
          sudo install -m 0755 /tmp/shfmt /usr/local/bin/shfmt

      - name: Check shell formatting
        run: make check-shellfmt

  docker-smoke:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Docker dependency smoke test
        run: make docker-deps-check
