From 7e96022b5e34345c9fffb7290a8f18334156e019 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Thu, 9 Jul 2026 07:47:19 +0800 Subject: [PATCH 1/2] ci(deps): use QPK pin script and enforce uv lock check Call canonical check_qpk_pin_consistency from checked-out QPK and fail CI when uv.lock drifts from pyproject/override pins. Co-Authored-By: Claude Co-authored-by: Cursor --- .github/workflows/ci.yml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d3b267..89b2a83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -91,11 +91,18 @@ jobs: set -euo pipefail uv run --no-sync ruff check --exclude external . + - name: Check QPK pin consistency + run: | + set -euo pipefail + uv run --no-sync python external/QuantPlatformKit/scripts/check_qpk_pin_consistency.py \ + --root . \ + --pin-file external/QuantPlatformKit/QPK_PIN + + - name: Ensure uv.lock matches pyproject.toml + run: uv lock --check + - name: Run tests run: uv run --no-sync python -m pytest -q - - name: Check QPK pin consistency - run: uv run --no-sync python scripts/check_qpk_pin_consistency.py - - name: Build package run: uv run --no-sync python -m build From bde5b84fc9ab5c23a0c043217bb72bf468e7a0b8 Mon Sep 17 00:00:00 2001 From: Pigbibi <20649888+Pigbibi@users.noreply.github.com> Date: Thu, 9 Jul 2026 07:55:32 +0800 Subject: [PATCH 2/2] test(ci): assert canonical QPK pin script path in workflow Co-Authored-By: Claude Co-authored-by: Cursor --- tests/test_dependency_pin_guard.py | 3 ++- tests/test_uv_dependency_workflow.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_dependency_pin_guard.py b/tests/test_dependency_pin_guard.py index b3f4053..234a66d 100644 --- a/tests/test_dependency_pin_guard.py +++ b/tests/test_dependency_pin_guard.py @@ -61,5 +61,6 @@ def test_dependency_pin_guard_is_blocking_in_ci() -> None: next_step = workflow.find("\n - name:", step_start + 1) step = workflow[step_start : next_step if next_step != -1 else len(workflow)] - assert "uv run --no-sync python scripts/check_qpk_pin_consistency.py" in step + assert "external/QuantPlatformKit/scripts/check_qpk_pin_consistency.py" in step + assert "--pin-file external/QuantPlatformKit/QPK_PIN" in step assert "continue-on-error" not in step diff --git a/tests/test_uv_dependency_workflow.py b/tests/test_uv_dependency_workflow.py index 0beeab7..240ed42 100644 --- a/tests/test_uv_dependency_workflow.py +++ b/tests/test_uv_dependency_workflow.py @@ -21,7 +21,8 @@ def test_ci_docker_and_env_sync_use_uv_lock() -> None: assert "uv sync --frozen --extra test" in ci assert "uv pip check" in ci assert "uv run --no-sync ruff check --exclude external ." in ci - assert "uv run --no-sync python scripts/check_qpk_pin_consistency.py" in ci + assert "external/QuantPlatformKit/scripts/check_qpk_pin_consistency.py" in ci + assert "uv lock --check" in ci assert "uv run --no-sync python -m build" in ci assert "uv sync --frozen --no-dev" in env_sync assert "uv run --no-sync python scripts/build_cloud_run_env_sync_plan.py --json" in env_sync