name: test on: push: branches: - main - "[0-9]+.[0-9]+.x" - "test-me-*" tags: - "[0-9]+.[0-9]+.[0-9]+" - "[0-9]+.[0-9]+.[0-9]+rc[0-9]+" pull_request: branches: - main - "[0-9]+.[0-9]+.x" env: PYTEST_ADDOPTS: "--color=yes" # Cancel running jobs for the same workflow and branch. concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true # Set permissions at the job level. permissions: {} jobs: package: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - name: Build and Check Package uses: hynek/build-and-inspect-python-package@v1.5.4 build: needs: [package] runs-on: ${{ matrix.os }} timeout-minutes: 45 permissions: contents: read strategy: fail-fast: false matrix: name: [ "windows-py38", "windows-py38-pluggy", "windows-py39", "windows-py310", "windows-py311", "windows-py312", "ubuntu-py38", "ubuntu-py38-pluggy", "ubuntu-py38-freeze", "ubuntu-py39", "ubuntu-py310", "ubuntu-py311", "ubuntu-py312", "ubuntu-pypy3", "macos-py38", "macos-py39", "macos-py310", "macos-py312", "doctesting", "plugins", ] include: - name: "windows-py38" python: "3.8" os: windows-latest tox_env: "py38-unittestextras" use_coverage: true - name: "windows-py38-pluggy" python: "3.8" os: windows-latest tox_env: "py38-pluggymain-pylib-xdist" - name: "windows-py39" python: "3.9" os: windows-latest tox_env: "py39-xdist" - name: "windows-py310" python: "3.10" os: windows-latest tox_env: "py310-xdist" - name: "windows-py311" python: "3.11" os: windows-latest tox_env: "py311" - name: "windows-py312" python: "3.12-dev" os: windows-latest tox_env: "py312" - name: "ubuntu-py38" python: "3.8" os: ubuntu-latest tox_env: "py38-lsof-numpy-pexpect" use_coverage: true - name: "ubuntu-py38-pluggy" python: "3.8" os: ubuntu-latest tox_env: "py38-pluggymain-pylib-xdist" - name: "ubuntu-py38-freeze" python: "3.8" os: ubuntu-latest tox_env: "py38-freeze" - name: "ubuntu-py39" python: "3.9" os: ubuntu-latest tox_env: "py39-xdist" - name: "ubuntu-py310" python: "3.10" os: ubuntu-latest tox_env: "py310-xdist" - name: "ubuntu-py311" python: "3.11" os: ubuntu-latest tox_env: "py311" use_coverage: true - name: "ubuntu-py312" python: "3.12-dev" os: ubuntu-latest tox_env: "py312" use_coverage: true - name: "ubuntu-pypy3" python: "pypy-3.8" os: ubuntu-latest tox_env: "pypy3-xdist" - name: "macos-py38" python: "3.8" os: macos-latest tox_env: "py38-xdist" - name: "macos-py39" python: "3.9" os: macos-latest tox_env: "py39-xdist" use_coverage: true - name: "macos-py310" python: "3.10" os: macos-latest tox_env: "py310-xdist" - name: "macos-py312" python: "3.12-dev" os: macos-latest tox_env: "py312-xdist" - name: "plugins" python: "3.9" os: ubuntu-latest tox_env: "plugins" - name: "doctesting" python: "3.8" os: ubuntu-latest tox_env: "doctesting" use_coverage: true steps: - uses: actions/checkout@v4 with: fetch-depth: 0 persist-credentials: false - name: Download Package uses: actions/download-artifact@v3 with: name: Packages path: dist - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} check-latest: ${{ endsWith(matrix.python, '-dev') }} - name: Install dependencies run: | python -m pip install --upgrade pip pip install tox coverage - name: Test without coverage if: "! matrix.use_coverage" shell: bash run: tox run -e ${{ matrix.tox_env }} --installpkg `find dist/*.tar.gz` - name: Test with coverage if: "matrix.use_coverage" shell: bash run: tox run -e ${{ matrix.tox_env }}-coverage --installpkg `find dist/*.tar.gz` - name: Generate coverage report if: "matrix.use_coverage" run: python -m coverage xml - name: Upload coverage to Codecov if: "matrix.use_coverage" uses: codecov/codecov-action@v3 continue-on-error: true with: fail_ci_if_error: true files: ./coverage.xml verbose: true