diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 140c4549..04191fee 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -1,132 +1,136 @@ name: Build and test +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + on: - # Only on pushes to main or one of the release branches we build on push - push: - branches: - - main - - "[0-9].[0-9]+-branch" - tags: - - "*" - # Build pull requests - pull_request: + # Only on pushes to main or one of the release branches we build on push + push: + branches: + - main + - "[0-9].[0-9]+-branch" + tags: + - "*" + # Build pull requests + pull_request: jobs: - test: - strategy: - matrix: - py: - - "3.9" - - "3.10" - - "3.11" - - "3.12" - - "3.13" - - "pypy-3.9" - - "pypy-3.10" - # Pre-release - os: - - "ubuntu-22.04" - - "windows-latest" - - "macos-14" # arm64 - - "macos-13" # x64 - architecture: - - x64 - - x86 - - arm64 - include: - - py: "pypy-3.9" - toxenv: "pypy39" - - py: "pypy-3.10" - toxenv: "pypy310" - exclude: - # Ubuntu does not have x86/arm64 Python - - os: "ubuntu-22.04" - architecture: x86 - - os: "ubuntu-22.04" - architecture: arm64 - # MacOS we need to make sure to remove x86 on all - # We need to run no arm64 on macos-13 (Intel), but some - # Python versions: 3.9/3.10 - # - # From 3.11 onward, there is support for running x64 and - # arm64 on Apple Silicon based systems (macos-14) - - os: "macos-13" - architecture: x86 - - os: "macos-13" - architecture: arm64 - - os: "macos-14" - architecture: x86 - - os: "macos-14" - architecture: x64 - py: "3.9" - - os: "macos-14" - architecture: x64 - py: "3.10" - # Windows does not have arm64 releases - - os: "windows-latest" - architecture: arm64 - # Don't run all PyPy versions except latest on - # Windows/macOS. They are expensive to run. - - os: "windows-latest" - py: "pypy-3.9" - - os: "macos-13" - py: "pypy-3.9" - - os: "macos-14" - py: "pypy-3.9" + test: + strategy: + matrix: + py: + - "3.9" + - "3.10" + - "3.11" + - "3.12" + - "3.13" + - "pypy-3.9" + - "pypy-3.10" + # Pre-release + os: + - "ubuntu-22.04" + - "windows-latest" + - "macos-14" # arm64 + - "macos-13" # x64 + architecture: + - x64 + - x86 + - arm64 + include: + - py: "pypy-3.9" + toxenv: "pypy39" + - py: "pypy-3.10" + toxenv: "pypy310" + exclude: + # Ubuntu does not have x86/arm64 Python + - os: "ubuntu-22.04" + architecture: x86 + - os: "ubuntu-22.04" + architecture: arm64 + # MacOS we need to make sure to remove x86 on all + # We need to run no arm64 on macos-13 (Intel), but some + # Python versions: 3.9/3.10 + # + # From 3.11 onward, there is support for running x64 and + # arm64 on Apple Silicon based systems (macos-14) + - os: "macos-13" + architecture: x86 + - os: "macos-13" + architecture: arm64 + - os: "macos-14" + architecture: x86 + - os: "macos-14" + architecture: x64 + py: "3.9" + - os: "macos-14" + architecture: x64 + py: "3.10" + # Windows does not have arm64 releases + - os: "windows-latest" + architecture: arm64 + # Don't run all PyPy versions except latest on + # Windows/macOS. They are expensive to run. + - os: "windows-latest" + py: "pypy-3.9" + - os: "macos-13" + py: "pypy-3.9" + - os: "macos-14" + py: "pypy-3.9" + name: "Python: ${{ matrix.py }}-${{ matrix.architecture }} on ${{ matrix.os }}" + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.py }} + architecture: ${{ matrix.architecture }} + - run: pip install tox + - name: Running tox with specific toxenv + if: ${{ matrix.toxenv != '' }} + env: + TOXENV: ${{ matrix.toxenv }} + run: tox + - name: Running tox for current python version + if: ${{ matrix.toxenv == '' }} + run: tox -e py - name: "Python: ${{ matrix.py }}-${{ matrix.architecture }} on ${{ matrix.os }}" - runs-on: ${{ matrix.os }} - steps: - - uses: actions/checkout@v4 - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.py }} - architecture: ${{ matrix.architecture }} - - run: pip install tox - - name: Running tox with specific toxenv - if: ${{ matrix.toxenv != '' }} - env: - TOXENV: ${{ matrix.toxenv }} - run: tox - - name: Running tox for current python version - if: ${{ matrix.toxenv == '' }} - run: tox -e py + coverage: + runs-on: ubuntu-22.04 + name: Validate coverage + steps: + - uses: actions/checkout@v4 + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + architecture: x64 + - run: pip install tox + - run: tox -e py313,coverage - coverage: - runs-on: ubuntu-22.04 - name: Validate coverage - steps: - - uses: actions/checkout@v4 - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: "3.13" - architecture: x64 + docs: + runs-on: ubuntu-22.04 + name: Build the documentation + steps: + - uses: actions/checkout@v4 + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + architecture: x64 + - run: pip install tox + - run: tox -e docs - - run: pip install tox - - run: tox -e py313,coverage - docs: - runs-on: ubuntu-22.04 - name: Build the documentation - steps: - - uses: actions/checkout@v4 - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: "3.13" - architecture: x64 - - run: pip install tox - - run: tox -e docs - lint: - runs-on: ubuntu-22.04 - name: Lint the package - steps: - - uses: actions/checkout@v4 - - name: Setup python - uses: actions/setup-python@v5 - with: - python-version: "3.13" - architecture: x64 - - run: pip install tox - - run: tox -e lint + lint: + runs-on: ubuntu-22.04 + name: Lint the package + steps: + - uses: actions/checkout@v4 + - name: Setup python + uses: actions/setup-python@v5 + with: + python-version: "3.13" + architecture: x64 + - run: pip install tox + - run: tox -e lint diff --git a/setup.cfg b/setup.cfg index 415c8d70..7bdc08c6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,7 +53,7 @@ where=src testing = pytest pytest-cov - coverage>=5.0 + coverage>=7.6.0 docs = Sphinx>=1.8.1 diff --git a/tests/test_functional.py b/tests/test_functional.py index 33b96aa9..5c65801f 100644 --- a/tests/test_functional.py +++ b/tests/test_functional.py @@ -29,22 +29,9 @@ def emit(self, record): def start_server(app, svr, queue, **kwargs): # pragma: no cover """Run a fixture application.""" logging.getLogger("waitress").addHandler(NullHandler()) - try_register_coverage() svr(app, queue, **kwargs).run() -def try_register_coverage(): # pragma: no cover - # Hack around multiprocessing exiting early and not triggering coverage's - # atexit handler by always registering a signal handler - - if "COVERAGE_PROCESS_START" in os.environ: - - def sigterm(*args): - sys.exit(0) - - signal.signal(signal.SIGTERM, sigterm) - - class FixtureTcpWSGIServer(server.TcpWSGIServer): """A version of TcpWSGIServer that relays back what it's bound to."""