diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index c7862b0..667eaa4 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -36,7 +36,7 @@ jobs: - name: Install dependencies and dev tools run: | uv venv --python ${{ matrix.python-version }} - uv pip install -r requirements-dev.lock.txt ruff + uv pip install -r requirements-dev.lock.txt - name: Lint with ruff run: .venv/bin/ruff check . diff --git a/requirements-dev.lock.txt b/requirements-dev.lock.txt index 9d5b0a2..74ab52d 100644 --- a/requirements-dev.lock.txt +++ b/requirements-dev.lock.txt @@ -9,12 +9,15 @@ Pygments==2.21.0 pytest==9.1.1 referencing==0.37.0 rpds-py==2026.6.3 -contourpy==1.4.0 +ruff==0.16.9 +contourpy==1.4.0; python_version >= "3.12" +contourpy==1.3.3; python_version < "3.12" cycler==0.12.1 fonttools==4.65.0 kiwisolver==1.5.1 matplotlib==3.10.9 -numpy==2.5.3 +numpy==2.5.3; python_version >= "3.12" +numpy==2.4.6; python_version < "3.12" pandas==2.3.3 pillow==12.3.0 pyparsing==3.3.2 diff --git a/tools/claim_receipt.py b/tools/claim_receipt.py index 6ddf0a3..53085d8 100644 --- a/tools/claim_receipt.py +++ b/tools/claim_receipt.py @@ -17,7 +17,7 @@ import hmac import json import secrets -from datetime import datetime, timezone +from datetime import UTC, datetime from pathlib import Path SECRET_ENV = "FLYPYTHON_CLAIM_SECRET" @@ -85,7 +85,7 @@ def make_receipt( }, "impl_sha256": impl_hash, "solution_match": (impl_hash == solution_hash) if solution_hash else False, - "created_at": datetime.now(timezone.utc).isoformat(timespec="milliseconds").replace("+00:00", "Z"), + "created_at": datetime.now(UTC).isoformat(timespec="milliseconds").replace("+00:00", "Z"), "nonce": secrets.token_hex(16), } receipt["sig"] = hmac.new( diff --git a/tools/verify_courses.py b/tools/verify_courses.py index 1cf4f96..e86093e 100644 --- a/tools/verify_courses.py +++ b/tools/verify_courses.py @@ -376,8 +376,9 @@ def check_shared_core(courses: list[Path]) -> list[str]: shapes.append(list(zip( re.findall(r'"id":\s*"(l\d+|capstone)"', verify), re.findall(r'"gate":\s*"([a-z-]+)"', verify), + strict=False, ))) - for member, shape in zip(members[1:], shapes[1:]): + for member, shape in zip(members[1:], shapes[1:], strict=True): if shape != shapes[0]: problems.append( f"core-group {group}: {member.name} checkpoint ids/gates differ from {members[0].name}"