name: CI
on: [push, pull_request]
permissions:
    contents: read # to fetch code (actions/checkout)

jobs:
    test:
        name: Test on ${{ matrix.os }}
        runs-on: ${{ matrix.os }}
        strategy:
            matrix:
                os: [ubuntu-latest, macos-latest, windows-latest]
        steps:
            - name: Checkout source code
              uses: actions/checkout@v7.0.1
              with:
                fetch-depth: 10
                persist-credentials: false

            - name: Set up Python
              uses: actions/setup-python@v7.0.0
              with:
                python-version: "3.14"

            - name: Install calibre dependencies
              run:
                  python setup/unix-ci.py install

            - name: Bootstrap calibre
              run:
                  python setup/unix-ci.py bootstrap

            - name: Test calibre
              env:
                PYTHONWARNINGS: error
                CALIBRE_SHOW_DEPRECATION_WARNINGS: 1
              run:
                  python setup/unix-ci.py test

    archtest:
        name: Test on Arch
        runs-on: ubuntu-latest
        container:
            image: 'archlinux/archlinux:latest'
            env:
                CI: 'true'
        steps:
            - name: Setup container
              run: |
                pacman -Syu --noconfirm
                pacman -S --noconfirm tar

            - name: Checkout source code
              uses: actions/checkout@v7.0.1
              with:
                fetch-depth: 10
                persist-credentials: false

            - name: Install calibre dependencies
              run: setup/arch-ci.sh

            - name: Bootstrap calibre
              run: runuser -u ci -- python setup.py bootstrap --ephemeral --debug --sanitize

            - name: Run type checker
              run: ./setup.py type_check

            - name: Run linter
              run: ./setup.py check

            - name: Run format checker
              run: ./setup.py fmt --check-only

            - name: Test calibre
              env:
                PYTHONWARNINGS: error
                CALIBRE_SHOW_DEPRECATION_WARNINGS: 1
              run: |
                  set -xe
                  runuser -u ci -- python setup.py test --under-sanitize
                  echo "Running test_rs"
                  runuser -u ci -- python setup.py test_rs
