check workflow (tox-dev/tox)
The check workflow from tox-dev/tox, explained and optimized by Latchkey.
A
CI health: A - excellent
Run this on Latchkey for self-healing, caching, and up to 58% lower cost.
Grade your own workflow free or run it on Latchkey →What it does
This is the check workflow from the tox-dev/tox repository, a real project running GitHub Actions. It is shown here with attribution under its MIT license.
Below, Latchkey shows a faster, safer version produced by its optimization engine.
The workflow
workflow (.yml)
name: check
on:
workflow_dispatch:
push:
branches: ["main"]
tags-ignore: ["**"]
pull_request:
schedule:
- cron: "0 8 * * *"
permissions:
contents: read
env:
FORCE_COLOR: 1
concurrency:
group: check-${{ github.ref }}
cancel-in-progress: true
jobs:
test:
name: test ${{ matrix.py }} on ${{ matrix.os.name }}
runs-on: ${{ matrix.os.image }}
strategy:
fail-fast: false
matrix:
py:
- "3.14"
- "3.13"
- "3.12"
- "3.11"
- "3.10"
os:
- { image: ubuntu-24.04, name: ubuntu }
- { image: windows-2025-vs2026, name: windows }
- { image: macos-15, name: macos }
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
- name: Install the latest version of uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
enable-cache: false
cache-dependency-glob: "pyproject.toml"
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Cache wheel downloads
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5
with:
path: .wheel_cache
key: wheel-cache-${{ runner.os }}-${{ matrix.py }}-${{ hashFiles('pyproject.toml') }}
restore-keys: |
wheel-cache-${{ runner.os }}-${{ matrix.py }}-
wheel-cache-${{ runner.os }}-
lookup-only: true
- name: Add .local/bin to Windows PATH
if: runner.os == 'Windows'
shell: bash
run: echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH
- name: Install tox@self
run: uv tool install --python-preference only-managed --python ${{ matrix.py }} tox@.
- name: Setup test suite
run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.py }}
- name: Run test suite
run: tox run --skip-pkg-install -e ${{ matrix.py }}
env:
PYTEST_ADDOPTS: "-vv --durations=20"
DIFF_AGAINST: HEAD
PYTEST_XDIST_AUTO_NUM_WORKERS: 0
check:
name: tox env ${{ matrix.tox_env }} on ${{ matrix.os.name }}
runs-on: ${{ matrix.os.image }}
strategy:
fail-fast: false
matrix:
tox_env:
- type
- type-min
- dev
- docs
- pkg_meta
os:
- { image: ubuntu-24.04, name: ubuntu }
- { image: windows-2025-vs2026, name: windows }
exclude:
- { os: { image: windows-2025-vs2026, name: windows }, tox_env: docs }
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
persist-credentials: false
- name: Install the latest version of uv
uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0
with:
enable-cache: false
cache-dependency-glob: "pyproject.toml"
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Cache wheel downloads
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5
with:
path: .wheel_cache
key: wheel-cache-${{ runner.os }}-3.14-${{ hashFiles('pyproject.toml') }}
restore-keys: |
wheel-cache-${{ runner.os }}-3.14-
wheel-cache-${{ runner.os }}-
lookup-only: true
- name: Add .local/bin to Windows PATH
if: runner.os == 'Windows'
shell: bash
run: echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH
- name: Install tox@self
run: uv tool install --python-preference only-managed --python 3.14 tox@.
- name: Install Python 3.10 for type-min
if: matrix.tox_env == 'type-min'
run: uv python install 3.10
- name: Setup check suite
run: tox r -vv --notest --skip-missing-interpreters false -e ${{ matrix.tox_env }}
- name: Run check for ${{ matrix.tox_env }}
run: tox r --skip-pkg-install -e ${{ matrix.tox_env }}
The same workflow, on Latchkey
Removes redundant runs and caps runaway jobs. Added and changed lines are highlighted.
name: check on: workflow_dispatch: push: branches: ["main"] tags-ignore: ["**"] pull_request: schedule: - cron: "0 8 * * *" permissions: contents: read env: FORCE_COLOR: 1 concurrency: group: check-${{ github.ref }} cancel-in-progress: true jobs: test: timeout-minutes: 30 name: test ${{ matrix.py }} on ${{ matrix.os.name }} runs-on: ${{ matrix.os.image }} strategy: fail-fast: false matrix: py: - "3.14" - "3.13" - "3.12" - "3.11" - "3.10" os: - { image: ubuntu-24.04, name: ubuntu } - { image: windows-2025-vs2026, name: windows } - { image: macos-15, name: macos } steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 persist-credentials: false - name: Install the latest version of uv uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0 with: enable-cache: false cache-dependency-glob: "pyproject.toml" github-token: ${{ secrets.GITHUB_TOKEN }} - name: Cache wheel downloads uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5 with: path: .wheel_cache key: wheel-cache-${{ runner.os }}-${{ matrix.py }}-${{ hashFiles('pyproject.toml') }} restore-keys: | wheel-cache-${{ runner.os }}-${{ matrix.py }}- wheel-cache-${{ runner.os }}- lookup-only: true - name: Add .local/bin to Windows PATH if: runner.os == 'Windows' shell: bash run: echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH - name: Install tox@self run: uv tool install --python-preference only-managed --python ${{ matrix.py }} tox@. - name: Setup test suite run: tox run -vv --notest --skip-missing-interpreters false -e ${{ matrix.py }} - name: Run test suite run: tox run --skip-pkg-install -e ${{ matrix.py }} env: PYTEST_ADDOPTS: "-vv --durations=20" DIFF_AGAINST: HEAD PYTEST_XDIST_AUTO_NUM_WORKERS: 0 check: timeout-minutes: 30 name: tox env ${{ matrix.tox_env }} on ${{ matrix.os.name }} runs-on: ${{ matrix.os.image }} strategy: fail-fast: false matrix: tox_env: - type - type-min - dev - docs - pkg_meta os: - { image: ubuntu-24.04, name: ubuntu } - { image: windows-2025-vs2026, name: windows } exclude: - { os: { image: windows-2025-vs2026, name: windows }, tox_env: docs } steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: fetch-depth: 0 persist-credentials: false - name: Install the latest version of uv uses: astral-sh/setup-uv@fac544c07dec837d0ccb6301d7b5580bf5edae39 # v8.2.0 with: enable-cache: false cache-dependency-glob: "pyproject.toml" github-token: ${{ secrets.GITHUB_TOKEN }} - name: Cache wheel downloads uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v5 with: path: .wheel_cache key: wheel-cache-${{ runner.os }}-3.14-${{ hashFiles('pyproject.toml') }} restore-keys: | wheel-cache-${{ runner.os }}-3.14- wheel-cache-${{ runner.os }}- lookup-only: true - name: Add .local/bin to Windows PATH if: runner.os == 'Windows' shell: bash run: echo "$USERPROFILE/.local/bin" >> $GITHUB_PATH - name: Install tox@self run: uv tool install --python-preference only-managed --python 3.14 tox@. - name: Install Python 3.10 for type-min if: matrix.tox_env == 'type-min' run: uv python install 3.10 - name: Setup check suite run: tox r -vv --notest --skip-missing-interpreters false -e ${{ matrix.tox_env }} - name: Run check for ${{ matrix.tox_env }} run: tox r --skip-pkg-install -e ${{ matrix.tox_env }}
What changed
- Add a job timeout so a hung step cannot burn hours of runner time.
This workflow runs 2 jobs (25 with the matrix expanded) per trigger. On Latchkey the same minutes cost up to 58% less than GitHub-hosted, with zero queue time.