Skip to content

ci: speed up job matrix (issue #1082)#1084

Merged
lmeyerov merged 5 commits intomasterfrom
ci/speedup-jobs-1082
Apr 7, 2026
Merged

ci: speed up job matrix (issue #1082)#1084
lmeyerov merged 5 commits intomasterfrom
ci/speedup-jobs-1082

Conversation

@lmeyerov
Copy link
Copy Markdown
Contributor

@lmeyerov lmeyerov commented Apr 6, 2026

Closes #1082.

What changed and why

Sentinel gate split

test-minimal-python (231s, critical path gate) was split into:

  • test-minimal-lite.sh — fast smoke gate excluding 5 heavy files + GFQL-core files. Gates all downstream jobs.
  • Full suite deferred to test-minimal-python-rest pool (runs in parallel with downstream).

Critical path: 719s → ~550s (−23%).

test-pandas-compat redesigned (coverage + speed)

Before: ran bin/test-minimal.sh — ~1700 tests per matrix row, most with no pandas API sensitivity. Wasted CI minutes running pandas-insensitive tests 3× across the version matrix.

After: explicit pandas-API-sensitive file list only (~400–600 tests per row):

  • test_plotter.py — core DataFrame ingestion, binding, type coercion
  • test_compute_chain.py — chain computation (105 pandas API hits)
  • test_hypergraph.py — hypergraph construction
  • test_compute_hops.py, test_compute_collapse.py, test_compute_filter_by_dict.py — compute layer
  • test_bolt_util.py, test_nodexl.py — connectors/formats

Matrix: py3.9+pandas 2.2.3 (legacy), py3.13+pandas 2.3.3 (rapids-aligned), py3.14+pandas 3.x (latest).

~65% fewer tests per row. Pandas-insensitive tests are covered by test-core-python instead.

test-pandas-compat-gfql (new job)

Full GFQL stack tested across pandas edge versions (2.2.3/py3.9 and 3.x/py3.14). Skips rapids-aligned since test-gfql-core already resolves ~2.3.x via uv.

Covers:

  • Query layer: gfql/cypher/test_lowering.py, test_parser.py, gfql/test_row_pipeline_ops.py
  • Execution engine: compute/test_hop.py, test_chain.py, test_chain_let.py, test_chain_concat.py, test_dataframe_primitives.py
  • Schema layer: gfql/test_schema_changers.py, gfql/test_let_schema_changers.py

Fixes coverage gap: test_chain_let.py (62 pandas hits) had no pandas-version coverage before.

test-gfql-core expanded

Previously only ran 3 query-layer files. Now runs the full GFQL stack (same file list as test-pandas-compat-gfql) at baseline pandas (~2.3.x resolved by uv) on py3.12 + py3.14.

test-full-ai consolidated

4 sequential shell scripts → single pytest -vv -n auto invocation. Eliminates 3× pytest startup + HuggingFace model cold-start overhead.

Expected: ~300s → ~150s.

Other cleanups

  • Dropped 9 redundant git lfs pull steps (checkout already has lfs: true)
  • Fixed test-dgl-cpu duplicate test runs (was running same files via direct pytest then again via shell scripts)
  • Added PIP_EXCLUDE_NEWER: "6 days" globally (alongside existing UV_EXCLUDE_NEWER)
  • Dedicated per-label lockfiles for pandas-compat matrix rows

Before / After

Job Before After
test-minimal-python (sentinel) 231s ~60s (lite gate only)
test-pandas-compat (per row) ~429s (~1700 tests) ~150s (~500 tests)
test-pandas-compat-gfql (per row) ~120s (new)
test-full-ai ~300s (4 sequential scripts) ~150s (single pytest -n auto)
Critical path 719s ~550s (−23%)
Wallclock 725s ~575s (−21%)

Confirmed green run: https://github.com/graphistry/pygraphistry/actions/runs/24059417800

🤖 Generated with Claude Code

lmeyerov and others added 5 commits April 6, 2026 15:56
…fs/dgl steps

- test-minimal-python sentinel: switch to bin/test-minimal-lite.sh (excludes
  test_hyper_dask, test_compute_chain, test_chain_let, test_hop, test_plotter).
  Target: <60s gate (was 231s). Deferred files run in test-minimal-python-rest.
- test-minimal-python-rest: now runs full bin/test-minimal.sh including deferred
  heavy files, covering all 7 versions in parallel with downstream.
- test-full-ai: consolidate 4 sequential shell scripts into single pytest -n auto
  call. Eliminates 3x pytest startup + redundant HF model warm-up overhead.
- test-dgl-cpu: remove duplicate direct pytest call (test-embed.sh/test-dgl.sh
  already run the same files).
- All jobs: remove 9 redundant 'git lfs pull' steps (checkout lfs:true suffices).
- timeout-minutes on sentinel: 15 → 5 (matches new target).

Closes part of #1082.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…, should be ~1700)

bin/test-minimal.sh was missing --ignore for the 3 GFQL-core files that have
their own dedicated job (test-gfql-core). pandas-compat calls test-minimal.sh
directly so was running ~1400 extra GFQL tests = ~200s wasted per job.

Fix: bake GFQL ignores into test-minimal.sh and test-minimal-lite.sh so any
caller gets the right scope. Simplify CI step to drop redundant --ignore args.

Expected: pandas-compat 429s → ~200s.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New parallel job runs GFQL core tests against pandas 2.2.3 (py3.9)
and pandas>=3.x (py3.14). Skips rapids-aligned (2.3.3/py3.13) since
test-gfql-core already resolves ~2.3.x via uv for those versions.

Adds test-compat-gfql-legacy and test-compat-gfql-latest lockfile
profiles to generate-lockfiles.sh.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
test-pandas-compat: replace full test-minimal.sh run (~1700 tests)
with explicit pandas-API-sensitive files only (~400-600 tests):
test_plotter, test_compute_chain, test_hypergraph, test_compute_hops,
test_compute_collapse, test_compute_filter_by_dict, test_bolt_util,
test_nodexl. ~65% reduction in test count per matrix row.

test-pandas-compat-gfql: expand from 3 query-layer files to full GFQL
stack: query layer + execution engine (test_hop, test_chain,
test_chain_let, test_chain_concat, test_dataframe_primitives) +
schema layer (test_schema_changers, test_let_schema_changers).
Fixes gap where test_chain_let (62 pandas hits) had no compat coverage.

test-gfql-core: same expansion — now covers full GFQL stack at
baseline pandas (~2.3.x resolved by uv).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@lmeyerov lmeyerov marked this pull request as ready for review April 7, 2026 01:36
@lmeyerov lmeyerov merged commit cfee9d3 into master Apr 7, 2026
113 checks passed
@lmeyerov lmeyerov deleted the ci/speedup-jobs-1082 branch April 7, 2026 01:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ci: next round of job speedups (minimal gate, pandas-compat, core-python, full-ai)

1 participant