ci: add a smoke-test gate before the full test matrix - #895
Merged
Conversation
A handful of fast, broad checks (package imports, public-API re-exports) across every workspace package, run once on the newest supported Python before the multi-OS/multi-Python matrix. Catches a broadly broken workspace in well under a minute instead of waiting on the full matrix. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR adds a new smoke GitHub Actions job intended to quickly detect “workspace is broadly broken” failures (imports / public API re-exports) before running the full multi-OS, multi-Python test matrix.
Changes:
- Introduces a
smokejob that installs the workspace and runs a small set of representative tests across packages. - Gates the full test matrix (
tests-unxt*,test-oldest,test-newest,test-interoperability) on successful completion ofsmoke. - Updates the final
status/“CI Pass” aggregation job to include the newsmokejob.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #895 +/- ##
===========================================
- Coverage 100.00% 99.62% -0.38%
===========================================
Files 4 82 +78
Lines 25 3997 +3972
Branches 0 312 +312
===========================================
+ Hits 25 3982 +3957
- Misses 0 10 +10
- Partials 0 5 +5 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
The smoke job introduced in the previous commit hardcoded a list of specific test files in the workflow -- brittle, and it papered over two packages (unxts.interop.gala, unxts.interop.matplotlib) that had no public-API smoke check at all. Every package (unxt itself and each packages/* member) now has: - tests/smoke/ -- fast, broad checks: imports, public-API re-exports - tests/unit/ -- everything else Existing test_public_api.py files (already smoke tests in substance) move wholesale where every test in them qualifies; unxts.api and unxts.hypothesis get split, since each had one file mixing re-export checks with real behavior/property-based tests. unxts.interop.gala and unxts.interop.matplotlib get a new minimal smoke/test_public_api.py (mirroring their siblings), and their existing behavior tests move to unit/. The CI smoke step now collects via `tests/smoke packages/*/tests/smoke` instead of an enumerated file list -- a new package's smoke coverage is just adding the folder, no workflow edit required. The full test-matrix jobs and noxfile.py path resolution are untouched: they already pointed at whole `tests/` directories, which transparently pick up the new subfolders. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
`uv sync` installs the `dev` dependency-group by default unless `--no-default-groups` is passed -- every other install step in this workflow already does so; the smoke job's didn't, so it was quietly installing docs/lint tooling on top of `test`, undermining its own "well under a minute" goal. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
unxtitself and eachpackages/*member) now has atests/smoke/folder (fast, broad checks: imports, public-API re-exports) alongside atests/unit/folder (everything else).github/workflows/ci.yml'ssmokejob, running right afterformatand gating the full multi-OS/multi-Python matrix (tests-unxt*,test-oldest,test-newest,test-interoperability)pytest tests/smoke packages/*/tests/smoke— proper directory-based collection, not an enumerated file list. A new package's smoke coverage is just adding the folder; no workflow edit requiredtest_public_api.pyfiles (already smoke tests in substance, several already docstring-labeled "Smoke tests for...") move wholesale intosmoke/where every test in them qualifies.unxts.apiandunxts.hypothesisget split, since each had one file mixing re-export checks with real behavior/property-based tests.unxts.interop.galaandunxts.interop.matplotlib— which previously had no public-API smoke check at all — get a new minimalsmoke/test_public_api.pymirroring their siblings, with their existing behavior tests moved tounit/noxfile.pyand the full per-package test jobs need no changes: they already point at wholetests/directories, which transparently include the new subfoldersdocsandbenchmarkare left ungated — neither is part of "the test matrix" and both already run on their own narrower conditionsTest plan
pytest --collect-only tests/smoke packages/*/tests/smokecollects all 24 smoke tests with no errors (confirmed locally)pytest tests/smoke packages/*/tests/smokepasses in ~2s locallyunit/files (unxts.api,unxts.hypothesis,unxts.interop.gala,unxts.interop.matplotlib,unxts.linalg) run and passsmokejob runs and passes in CI on this PR, and the full matrix jobs correctly wait on it