| # 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 }}-${{ matrix.os-version || 'latest' }}" |
| # Don't run tests if the branch name includes "-notests" |
| if: "!contains(github.ref, '-notests')" |
| 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.8" |
| - "3.9" |
| - "3.10" |
| - "3.11" |
| - "3.12" |
| - "3.13" |
| - "pypy-3.8" |
| - "pypy-3.9" |
| - "pypy-3.10" |
| exclude: |
| # Windows pypy 3.9 and 3.10 get stuck with PyPy 7.3.15. I hope to |
| # unstick them, but I don't want that to block all other progress, so |
| # skip them for now. These excludes can be removed once GitHub uses |
| # PyPy 7.3.16 on Windows. https://github.com/pypy/pypy/issues/4876 |
| - os: windows |
| python-version: "pypy-3.9" |
| - os: windows |
| python-version: "pypy-3.10" |
| # If we need to tweak the os version we can do it with an include like |
| # this: |
| # include: |
| # - python-version: "3.8" |
| # os: "macos" |
| # os-version: "13" |
| |
| fail-fast: false |
| |
| steps: |
| - name: "Check out the repo" |
| uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 |
| |
| - name: "Set up Python" |
| uses: actions/setup-python@39cd14951b08e74b54015e9e001cdefcf80e669f # v5.1.1 |
| with: |
| python-version: "${{ matrix.python-version }}" |
| allow-prereleases: true |
| # At a certain point, installing dependencies failed on pypy 3.9 and |
| # 3.10 on Windows. Commenting out the cache here fixed it. Someday |
| # try using the cache again. |
| #cache: pip |
| #cache-dependency-path: 'requirements/*.pip' |
| |
| - name: "Show environment" |
| run: | |
| set -xe |
| python -VV |
| python -m site |
| # For extreme debugging: |
| # python -c "import urllib.request as r; exec(r.urlopen('https://bit.ly/pydoctor').read())" |
| env | sort |
| |
| - name: "Install dependencies" |
| run: | |
| set -xe |
| python -m pip install -r requirements/tox.pip |
| |
| - 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 |
| # The tests didn't run if the branch name includes "-notests" |
| if: "!contains(github.ref, '-notests')" |
| needs: |
| - tests |
| runs-on: ubuntu-latest |
| steps: |
| - name: Decide whether the needed jobs succeeded or failed |
| uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2 |
| with: |
| jobs: ${{ toJSON(needs) }} |