Skip to content

Test and lint

Test and lint #1723

Workflow file for this run

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: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.event_name != 'schedule'
|| (
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.8"
- "3.8.0"
- "3.9"
- "3.9.0"
- "3.10"
- "3.10.0"
- "3.11"
- "3.11.0"
- "3.12"
- "3.12.0"
- "3.13"
- "3.13.0"
- "pypy3.8"
- "pypy3.9"
- "pypy3.10"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
- name: Test typing_extensions
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 -m unittest test_typing_extensions.py
- 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
linting:
name: Lint
# no reason to run this as a cron job
if: github.event_name != 'schedule'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3"
cache: "pip"
cache-dependency-path: "test-requirements.txt"
- name: Install dependencies
run: pip install -r test-requirements.txt
- name: Lint implementation
run: ruff check
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@v7
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",
})