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@v6 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@671740ac38dd9b0130fbe1cec585b89eea48d3de if: >- github.repository == 'python/typing_extensions' && (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", })