# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt name: "Tests" on: push: branches: - master - nedbat/* pull_request: workflow_dispatch: defaults: run: shell: bash env: PIP_DISABLE_PIP_VERSION_CHECK: 1 COVERAGE_IGOR_VERBOSE: 1 FORCE_COLOR: 1 # Get colored pytest output permissions: contents: read concurrency: group: "${{ github.workflow }}-${{ github.ref }}" cancel-in-progress: true jobs: tests: name: "${{ matrix.python-version }} on ${{ matrix.os }}" runs-on: "${{ matrix.os }}-latest" strategy: matrix: os: - ubuntu - macos - windows python-version: # When changing this list, be sure to check the [gh] list in # tox.ini so that tox will run properly. PYVERSIONS # Available versions: # https://github.com/actions/python-versions/blob/main/versions-manifest.json # https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#available-versions-of-python-and-pypy - "3.7" - "3.8" - "3.9" - "3.10" - "3.11" - "pypy-3.7" - "pypy-3.9" exclude: # Windows PyPy-3.9 always gets killed. - os: windows python-version: "pypy-3.9" fail-fast: false steps: - name: "Check out the repo" uses: "actions/checkout@v3" - name: "Set up Python" uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" cache: pip cache-dependency-path: 'requirements/*.pip' - name: "Install dependencies" run: | set -xe python -VV python -m site python -m pip install -r requirements/tox.pip # For extreme debugging: # python -c "import urllib.request as r; exec(r.urlopen('https://bit.ly/pydoctor').read())" - name: "Run tox for ${{ matrix.python-version }}" run: | python -m tox -- -rfsEX - name: "Retry tox for ${{ matrix.python-version }}" if: failure() run: | # `exit 1` makes sure that the job remains red with flaky runs python -m tox -- -rfsEX --lf -vvvvv && exit 1 # This job aggregates test results. It's the required check for branch protection. # https://github.com/marketplace/actions/alls-green#why # https://github.com/orgs/community/discussions/33579 success: name: Tests successful if: always() needs: - tests runs-on: ubuntu-latest steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe with: jobs: ${{ toJSON(needs) }}