Skip to content

Test and lint

Test and lint #653

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:
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"
- "pypy3.8"
- "pypy3.9"
- "pypy3.10"
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
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
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@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3"
cache: "pip"
cache-dependency-path: "test-requirements.txt"
- name: Install dependencies
run: |
pip install -r test-requirements.txt
# not included in test-requirements.txt as it depends on typing-extensions,
# so it's a pain to have it installed locally
pip install flake8-noqa
- name: Lint implementation
run: flake8 --color always
- name: Lint tests
run: flake8 --config=.flake8-tests src/test_typing_extensions.py --color always
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@v6
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",
})