Skip to content

Commit dd235b1

Browse files
fluffy314cursoragent
authored andcommitted
ci: make local checks a GitHub subset
Run the exact repository-owned local CI script inside Actions so coverage, Lean, and platform-neutral test commands cannot drift between developer machines and required PR checks. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 8472d69 commit dd235b1

2 files changed

Lines changed: 42 additions & 39 deletions

File tree

.github/workflows/ci.yaml

Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,10 @@ jobs:
4949
| sh -s -- -y --default-toolchain none
5050
echo "$HOME/.elan/bin" >> "$GITHUB_PATH"
5151
52-
- name: Restore mathlib cache and build Lean gate
52+
- name: Restore mathlib cache
5353
run: |
5454
lake update
5555
lake exe cache get
56-
lake build
5756
5857
- name: Set up Python ${{ matrix.python-version }}
5958
uses: actions/setup-python@v5
@@ -83,43 +82,7 @@ jobs:
8382
# SDK as a separate package — both layouts work, and the
8483
# PYTHONPATH route avoids a setuptools build step in CI.
8584
PYTHONPATH: .:sdks/python
86-
run: |
87-
# PR-N1/N2/N3/N4 (ADR 0008) cleanup: this gate covers ONLY
88-
# verifier-independent code. The Linux runner cannot load
89-
# real Qwen3 weights; the cleanup PRs retired the
90-
# FakeVerifier / DeterministicEngine / DeterministicTokenizer
91-
# / _MinimalVerifierStub test doubles. Verifier-dependent
92-
# modules — ``inference_engine.session.coordinator``,
93-
# ``inference_engine.session.generator``,
94-
# ``inference_engine.scheduler.scheduler``,
95-
# ``inference_engine.server.{app, engine, tokenizer, streaming}``,
96-
# ``kakeya.{client, session}`` — move to the
97-
# tests/integration/ suite, gated on Mac M4 / CUDA hosts.
98-
#
99-
# Coverage is invoked via ``coverage run -m pytest`` rather
100-
# than ``pytest --cov=`` to avoid a torch+pytest-cov race
101-
# at conftest-import time on the hosted Linux runner.
102-
coverage run -m pytest \
103-
tests/inference_engine/server/ \
104-
tests/inference_engine/memory/ \
105-
tests/inference_engine/scheduler/ \
106-
tests/inference_engine/pipeline/ \
107-
tests/inference_engine/session/ \
108-
tests/inference_engine/bench/ \
109-
tests/inference_engine/setup/ \
110-
tests/inference_engine/bridge/ \
111-
tests/inference_engine/distributed/ \
112-
tests/inference_engine/network/ \
113-
tests/sdk/python/ \
114-
tests/training/repr_align/ \
115-
tests/backends/mlx/test_env.py \
116-
--junitxml=junit.xml \
117-
-v
118-
coverage report \
119-
--include='inference_engine/server/auth.py,inference_engine/server/config.py,inference_engine/server/errors.py,inference_engine/server/grpc_app.py,inference_engine/server/metrics.py,inference_engine/server/schemas.py,inference_engine/server/proto_gen/**/*.py,inference_engine/memory/*,inference_engine/bridge/*,inference_engine/distributed/*,inference_engine/network/*,inference_engine/scheduler/config.py,inference_engine/scheduler/session.py,inference_engine/pipeline/*,inference_engine/session/store.py,inference_engine/setup/*,sdks/python/kakeya/__init__.py,sdks/python/kakeya/errors.py,training/repr_align/*' \
120-
--fail-under=100
121-
coverage xml -o coverage.xml \
122-
--include='inference_engine/server/auth.py,inference_engine/server/config.py,inference_engine/server/errors.py,inference_engine/server/grpc_app.py,inference_engine/server/metrics.py,inference_engine/server/schemas.py,inference_engine/server/proto_gen/**/*.py,inference_engine/memory/*,inference_engine/bridge/*,inference_engine/distributed/*,inference_engine/network/*,inference_engine/scheduler/config.py,inference_engine/scheduler/session.py,inference_engine/pipeline/*,inference_engine/session/store.py,inference_engine/setup/*,sdks/python/kakeya/__init__.py,sdks/python/kakeya/errors.py,training/repr_align/*'
85+
run: ./scripts/run_local_ci.sh
12386

12487
- name: Upload coverage artifact
12588
if: always()

scripts/run_local_ci.sh

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5+
cd "$ROOT"
6+
7+
PYTHON="${PYTHON:-python}"
8+
export PYTHONPATH="${PYTHONPATH:-.:sdks/python}"
9+
10+
# This script is the canonical local CI subset. GitHub Actions invokes this
11+
# exact file, then adds Docker, package, proto, TypeScript, and Mac integration
12+
# jobs around it.
13+
lake build
14+
15+
"$PYTHON" -m coverage erase
16+
"$PYTHON" -m coverage run -m pytest \
17+
tests/inference_engine/server/ \
18+
tests/inference_engine/memory/ \
19+
tests/inference_engine/scheduler/ \
20+
tests/inference_engine/pipeline/ \
21+
tests/inference_engine/session/ \
22+
tests/inference_engine/bench/ \
23+
tests/inference_engine/setup/ \
24+
tests/inference_engine/bridge/ \
25+
tests/inference_engine/distributed/ \
26+
tests/inference_engine/network/ \
27+
tests/sdk/python/ \
28+
tests/training/repr_align/ \
29+
tests/backends/mlx/test_env.py \
30+
--junitxml=junit.xml \
31+
-v
32+
33+
COVERAGE_INCLUDE='inference_engine/server/auth.py,inference_engine/server/config.py,inference_engine/server/errors.py,inference_engine/server/grpc_app.py,inference_engine/server/metrics.py,inference_engine/server/schemas.py,inference_engine/server/proto_gen/**/*.py,inference_engine/memory/*,inference_engine/bridge/*,inference_engine/distributed/*,inference_engine/network/*,inference_engine/scheduler/config.py,inference_engine/scheduler/session.py,inference_engine/pipeline/*,inference_engine/session/store.py,inference_engine/setup/*,sdks/python/kakeya/__init__.py,sdks/python/kakeya/errors.py,training/repr_align/*'
34+
35+
"$PYTHON" -m coverage report \
36+
--include="$COVERAGE_INCLUDE" \
37+
--fail-under=100
38+
"$PYTHON" -m coverage xml \
39+
-o coverage.xml \
40+
--include="$COVERAGE_INCLUDE"

0 commit comments

Comments
 (0)