Test and lint #2419
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Test and lint | |
on: | |
schedule: | |
- cron: "0 2 * * *" # 2am UTC | |
push: | |
branches: | |
- main | |
pull_request: | |
workflow_dispatch: | |
permissions: | |
contents: read | |
env: | |
FORCE_COLOR: 1 | |
PIP_DISABLE_PIP_VERSION_CHECK: 1 | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
tests: | |
name: Run tests | |
# if 'schedule' was the trigger, | |
# don't run it on contributors' forks | |
if: >- | |
github.repository == 'python/typing_extensions' | |
|| github.event_name != 'schedule' | |
strategy: | |
fail-fast: false | |
matrix: | |
# We try to test on the earliest available bugfix release of each | |
# Python version, because typing sometimes changed between bugfix releases. | |
# For available versions, see: | |
# https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json | |
python-version: | |
- "3.9" | |
- "3.9.12" | |
- "3.10" | |
- "3.10.4" | |
- "3.11" | |
- "3.11.0" | |
- "3.12" | |
- "3.12.0" | |
- "3.13" | |
- "3.13.0" | |
- "3.14" | |
- "pypy3.9" | |
- "pypy3.10" | |
- "pypy3.11" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v5 | |
with: | |
persist-credentials: false | |
- name: Set up Python | |
uses: actions/setup-python@v6 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
- name: Install coverage | |
run: | | |
# Be wary that this does not install typing_extensions in the future. | |
# 'toml' extra is needed to read settings from pyproject.toml on Python <3.11 | |
pip install 'coverage[toml]' | |
- name: Test typing_extensions with coverage | |
run: | | |
# Be wary of running `pip install` here, since it becomes easy for us to | |
# accidentally pick up typing_extensions as installed by a dependency | |
cd src | |
python --version # just to make sure we're running the right one | |
# Run tests under coverage | |
python -m coverage run -m unittest test_typing_extensions.py | |
# Create xml file for Codecov | |
coverage xml --rcfile=../pyproject.toml --fail-under=0 | |
- name: Test CPython typing test suite | |
# Test suite fails on PyPy even without typing_extensions | |
if: ${{ !startsWith(matrix.python-version, 'pypy') }} | |
run: | | |
cd src | |
# Run the typing test suite from CPython with typing_extensions installed, | |
# because we monkeypatch typing under some circumstances. | |
python -c 'import typing_extensions; import test.__main__' test_typing -v | |
- name: Upload coverage reports to Codecov | |
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 | |
if: ${{ (github.event_name == 'push' || github.event_name == 'pull_request') }} | |
with: | |
token: ${{ secrets.CODECOV_ORG_TOKEN }} | |
flags: ${{ matrix.python-version }} | |
directory: src | |
fail_ci_if_error: true | |
verbose: true | |
create-issue-on-failure: | |
name: Create an issue if daily tests failed | |
runs-on: ubuntu-latest | |
needs: [tests] | |
if: >- | |
${{ | |
github.repository == 'python/typing_extensions' | |
&& always() | |
&& github.event_name == 'schedule' | |
&& needs.tests.result == 'failure' | |
}} | |
permissions: | |
issues: write | |
steps: | |
- uses: actions/github-script@v8 | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
await github.rest.issues.create({ | |
owner: "python", | |
repo: "typing_extensions", | |
title: `Daily tests failed on ${new Date().toDateString()}`, | |
body: "Runs listed here: https://github.com/python/typing_extensions/actions/workflows/ci.yml", | |
}) |