Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions .github/workflows/mypy-new-errors.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
name: Mypy New Error Check

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]


jobs:
mypy-diff:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13',]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
uses: astral-sh/setup-uv@v5

- name: Generate Baseline (Main)
run: |
# Switch to main branch to generate baseline
git checkout origin/main

git checkout ${{ github.sha }} -- pyproject.toml

# Install dependencies for main
uv venv .venv
source .venv/bin/activate
uv sync --all-extras

# Run mypy, filter for errors only, remove line numbers (file:123: -> file::), and sort
# We ignore exit code (|| true) because we expect errors on main
uv run mypy . | grep "error:" | sed 's/:\([0-9]\+\):/::/g' | sort > main_errors.txt || true

echo "Found $(wc -l < main_errors.txt) errors on main."

- name: Check PR Branch
run: |
# Switch back to the PR commit
git checkout ${{ github.sha }}

# Re-sync dependencies in case the PR changed them
source .venv/bin/activate
uv sync --all-extras

# Run mypy on PR code, apply same processing
uv run mypy . | grep "error:" | sed 's/:\([0-9]\+\):/::/g' | sort > pr_errors.txt || true

echo "Found $(wc -l < pr_errors.txt) errors on PR branch."

- name: Compare and Fail on New Errors
run: |
# 'comm -13' suppresses unique lines in file1 (main) and common lines,
# leaving only lines unique to file2 (PR) -> The new errors.
comm -13 main_errors.txt pr_errors.txt > new_errors.txt

if [ -s new_errors.txt ]; then
echo "::error::The following NEW mypy errors were introduced:"
cat new_errors.txt
exit 1
else
echo "Great job! No new mypy errors introduced."
fi
32 changes: 32 additions & 0 deletions .github/workflows/mypy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Mypy Type Check

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
mypy:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ['3.10', '3.11', '3.12', '3.13',]

steps:
- uses: actions/checkout@v4

- name: Install uv
uses: astral-sh/setup-uv@v1

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
run: uv sync --all-extras

- name: Run mypy

run: uv run mypy . --strict
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,9 @@ asyncio_mode = "auto"

[tool.mypy]
python_version = "3.10"
exclude = "tests/"
exclude = ["tests/", "contributing/samples/"]
plugins = ["pydantic.mypy"]
# Start with non-strict mode, and swtich to strict mode later.
# strict = true
strict = true
disable_error_code = ["import-not-found", "import-untyped", "unused-ignore"]
follow_imports = "skip"
Loading