summaryrefslogtreecommitdiff
path: root/.github/workflows/testsuite.yml
blob: e560325c8bda83e7cf4d9ea6ec4675bad0546ff1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# 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 --require-hashes -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) }}