name: Test on: push: branches: - main pull_request: types: - opened - synchronize workflow_dispatch: inputs: debug_enabled: description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' required: false default: 'false' schedule: # cron every week on monday - cron: "0 0 * * 1" env: UV_SYSTEM_PYTHON: 1 jobs: test: strategy: matrix: os: [ ubuntu-latest, windows-latest, macos-latest ] python-version: [ "3.14" ] include: - os: windows-latest python-version: "3.9" - os: ubuntu-latest python-version: "3.10" - os: macos-latest python-version: "3.11" - os: windows-latest python-version: "3.12" - os: ubuntu-latest python-version: "3.13" - os: macos-latest python-version: "3.13" fail-fast: false runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - name: Setup uv uses: astral-sh/setup-uv@v7 with: version: "0.4.15" enable-cache: true cache-dependency-glob: | requirements**.txt pyproject.toml # Allow debugging with tmate - name: Setup tmate session uses: mxschmitt/action-tmate@v3 if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled == 'true' }} with: limit-access-to-actor: true - name: Install Dependencies run: uv pip install -r requirements-tests.txt - run: mkdir coverage - name: Test run: bash scripts/test.sh env: COVERAGE_FILE: coverage/.coverage.${{ runner.os }}-py${{ matrix.python-version }}-${{ matrix.pydantic-version }} CONTEXT: ${{ runner.os }}-py${{ matrix.python-version }} - name: Store coverage files uses: actions/upload-artifact@v6 with: name: coverage-${{ runner.os }}-${{ matrix.python-version }}-${{ matrix.pydantic-version }} path: coverage include-hidden-files: true coverage-combine: needs: - test runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 with: python-version: '3.13' - name: Setup uv uses: astral-sh/setup-uv@v7 with: version: "0.4.15" enable-cache: true cache-dependency-glob: | requirements**.txt pyproject.toml - name: Get coverage files uses: actions/download-artifact@v7 with: pattern: coverage-* path: coverage merge-multiple: true - name: Install Dependencies run: uv pip install -r requirements-tests.txt - run: ls -la coverage - run: coverage combine coverage - run: coverage html --title "Coverage for ${{ github.sha }}" - name: Store coverage HTML uses: actions/upload-artifact@v6 with: name: coverage-html path: htmlcov include-hidden-files: true - run: coverage report --fail-under=99 # https://github.com/marketplace/actions/alls-green#why alls-green: # This job does nothing and is only used for the branch protection if: always() needs: - coverage-combine runs-on: ubuntu-latest steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }}