Skip to content

Add a cron job for testing third-party users of typing_extensions #9

Add a cron job for testing third-party users of typing_extensions

Add a cron job for testing third-party users of typing_extensions #9

Workflow file for this run

# This workflow is a daily cron job.
# As well as running our own tests,
# we also run the tests of various third-party libraries that use us.
# This helps us spot regressions early,
# and helps flag when third-party libraries are making incorrect assumptions
# that might cause them to break when we cut a new release.
name: Daily tests
on:
schedule:
- cron: "0 0 * * *" # Midnight UTC
pull_request:
paths:
- ".github/workflows/daily.yml"
workflow_dispatch:
permissions:
contents: read
env:
PIP_DISABLE_PIP_VERSION_CHECK: 1
FORCE_COLOR: 1
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
typing-extensions:
name: Run our own tests
# Only run if 'schedule' was the trigger,
# and we're not running on a fork
if: >-
${{
github.repository == 'python/typing_extensions'
&& github.event_name == 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version:
- "3.7"
- "3.7.1"
- "3.8"
- "3.8.0"
- "3.9"
- "3.9.0"
- "3.10"
- "3.10.0"
- "3.11"
- "3.11.0"
- "3.12"
- "pypy3.9"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup 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
pydantic:
name: pydantic tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout pydantic
uses: actions/checkout@v3
with:
repository: pydantic/pydantic
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup pdm for pydantic tests
uses: pdm-project/setup-pdm@v3
with:
python-version: ${{ matrix.python-version }}
cache: true
- name: Add local version of typing_extensions as a dependency
run: pdm add ./typing-extensions-latest
- name: Install pydantic test dependencies
run: pdm install -G testing -G email
- name: List installed dependencies
run: pdm list -vv # pdm equivalent to `pip list`
- name: Run pydantic tests
run: pdm run pytest
typing_inspect:
name: typing_inspect tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout typing_inspect
uses: actions/checkout@v3
with:
repository: ilevkivskyi/typing_inspect
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install typing_inspect test dependencies
run: pip install -r test-requirements.txt
- name: Install typing_extensions latest
run: pip install ./typing-extensions-latest
- name: List all installed dependencies
run: pip freeze --all
- name: Run typing_inspect tests
run: pytest
pyanalyze:
name: pyanalyze tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Check out pyanalyze
uses: actions/checkout@v3
with:
repository: quora/pyanalyze
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install pyanalyze test requirements
run: pip install .[tests]
- name: Install typing_extensions latest
run: pip install ./typing-extensions-latest
- name: List all installed dependencies
run: pip freeze --all
- name: Run pyanalyze tests
run: pytest pyanalyze/
typeguard:
name: typeguard tests
if: false # TODO: unskip when typeguard's tests pass on typing_extensions>=4.6.0
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Check out typeguard
uses: actions/checkout@v3
with:
repository: agronholm/typeguard
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install typeguard test requirements
run: pip install -e .[test]
- name: Install typing_extensions latest
run: pip install ./typing-extensions-latest
- name: List all installed dependencies
run: pip freeze --all
- name: Run typeguard tests
run: pytest
typed-argument-parser:
name: typed-argument-parser tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Check out typed-argument-parser
uses: actions/checkout@v3
with:
repository: swansonk14/typed-argument-parser
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Configure git for typed-argument-parser tests
# typed-argument parser does this in their CI,
# and the tests fail unless we do this
run: |
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
- name: Install typed-argument-parser test requirements
run: |
pip install -e .
pip install pytest
- name: Install typing_extensions latest
run: pip install ./typing-extensions-latest
- name: List all installed dependencies
run: pip freeze --all
- name: Run typed-argument-parser tests
run: pytest
stubtest:
name: stubtest tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout mypy for stubtest tests
uses: actions/checkout@v3
with:
repository: python/mypy
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install mypy test requirements
run: |
pip install -r test-requirements.txt
pip install -e .
- name: Install typing_extensions latest
run: pip install ./typing-extensions-latest
- name: List all installed dependencies
run: pip freeze --all
- name: Run stubtest tests
run: pytest ./mypy/test/teststubtest.py
cattrs:
name: cattrs tests
if: >-
# if 'schedule' was the trigger,
# don't run it on contributors' forks
${{
github.repository == 'python/typing_extensions'
|| github.event_name != 'schedule'
}}
strategy:
fail-fast: false
matrix:
python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Checkout cattrs
uses: actions/checkout@v3
with:
repository: python-attrs/cattrs
- name: Checkout typing_extensions
uses: actions/checkout@v3
with:
path: typing-extensions-latest
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install poetry for cattrs
run: pip install poetry
- name: Add latest typing-extensions as a dependency
run: poetry add ./typing-extensions-latest
- name: Install cattrs test dependencies
run: poetry install -v --all-extras
- name: List all installed dependencies
run: poetry show
- name: Run cattrs tests
run: poetry run pytest tests
create-issue-on-failure:
name: Create an issue if daily tests failed
runs-on: ubuntu-latest
needs:
- typing-extensions
- pydantic
- typing_inspect
- pyanalyze
- typeguard
- typed-argument-parser
- stubtest
- cattrs
if: >-
${{
github.repository == 'python/typing_extensions'
&& always()
&& github.event_name == 'schedule'
&& (
needs.typing-extensions == 'failure'
|| needs.pydantic.result == 'failure'
|| needs.typing_inspect.result == 'failure'
|| needs.pyanalyze.result == 'failure'
|| needs.typeguard.result == 'failure'
|| needs.typed-argument-parser.result == 'failure'
|| needs.stubtest.result == 'failure'
|| needs.cattrs.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/daily.yml",
})