Skip to content

ci: add a smoke-test gate before the full test matrix - #895

Merged
nstarman merged 3 commits into
GalacticDynamics:mainfrom
nstarman:ci/smoke-test
Aug 17, 2026
Merged

ci: add a smoke-test gate before the full test matrix#895
nstarman merged 3 commits into
GalacticDynamics:mainfrom
nstarman:ci/smoke-test

Conversation

@nstarman

@nstarman nstarman commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Every package (unxt itself and each packages/* member) now has a tests/smoke/ folder (fast, broad checks: imports, public-API re-exports) alongside a tests/unit/ folder (everything else)
  • Add .github/workflows/ci.yml's smoke job, running right after format and gating the full multi-OS/multi-Python matrix (tests-unxt*, test-oldest, test-newest, test-interoperability)
  • The smoke job collects via 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 required
  • Existing test_public_api.py files (already smoke tests in substance, several already docstring-labeled "Smoke tests for...") move wholesale into smoke/ 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 — which previously had no public-API smoke check at all — get a new minimal smoke/test_public_api.py mirroring their siblings, with their existing behavior tests moved to unit/
  • noxfile.py and the full per-package test jobs need no changes: they already point at whole tests/ directories, which transparently include the new subfolders
  • docs and benchmark are left ungated — neither is part of "the test matrix" and both already run on their own narrower conditions

Test plan

  • pytest --collect-only tests/smoke packages/*/tests/smoke collects all 24 smoke tests with no errors (confirmed locally)
  • pytest tests/smoke packages/*/tests/smoke passes in ~2s locally
  • Spot-checked the moved/split unit/ files (unxts.api, unxts.hypothesis, unxts.interop.gala, unxts.interop.matplotlib, unxts.linalg) run and pass
  • smoke job runs and passes in CI on this PR, and the full matrix jobs correctly wait on it

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>
Copilot AI lite review requested due to automatic review settings August 17, 2026 16:15
@nstarman
nstarman requested a review from a team as a code owner August 17, 2026 16:15

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 smoke job 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 of smoke.
  • Updates the final status/“CI Pass” aggregation job to include the new smoke job.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml Outdated
Comment thread .github/workflows/ci.yml Outdated
@nstarman nstarman modified the milestones: v2.0.x, v2.1.0 Aug 17, 2026
@codecov

codecov Bot commented Aug 17, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.62%. Comparing base (c5a9d8d) to head (7d53648).
⚠️ Report is 2 commits behind head on main.

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

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>
@github-actions github-actions Bot added 👷 Add / update CI build system Add or update CI build system. 🔧 Add / update configuration Add or update configuration files. ✅ Add / update / pass tests Add, update, or pass tests. 🧩 unxts-hypothesis Issues/PRs affecting the unxts.hypothesis namespace package 🧩 unxts-interop-gala Issues/PRs affecting the unxts.interop.gala namespace package 🧩 unxts-interop-matplotlib Issues/PRs affecting the unxts.interop.matplotlib namespace package 🧩 unxts-interop-xarray Issues/PRs affecting the unxts.interop.xarray namespace package 🧩 unxts-api Issues/PRs affecting the unxts.api namespace package 🧩 unxts-parametric Issues/PRs affecting the unxts.parametric namespace package 🧩 unxts-linalg Issues/PRs affecting the unxts.linalg namespace package 💚 Fix CI build Fix CI Build. labels Aug 17, 2026
`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>
@github-actions github-actions Bot added the 🐛 Fix a bug Fix a bug. label Aug 17, 2026
@nstarman
nstarman merged commit 3438b00 into GalacticDynamics:main Aug 17, 2026
57 of 58 checks passed
@nstarman
nstarman deleted the ci/smoke-test branch August 17, 2026 18:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

👷 Add / update CI build system Add or update CI build system. 🔧 Add / update configuration Add or update configuration files. ✅ Add / update / pass tests Add, update, or pass tests. 🐛 Fix a bug Fix a bug. 💚 Fix CI build Fix CI Build. 🧩 unxts-api Issues/PRs affecting the unxts.api namespace package 🧩 unxts-hypothesis Issues/PRs affecting the unxts.hypothesis namespace package 🧩 unxts-interop-gala Issues/PRs affecting the unxts.interop.gala namespace package 🧩 unxts-interop-matplotlib Issues/PRs affecting the unxts.interop.matplotlib namespace package 🧩 unxts-interop-xarray Issues/PRs affecting the unxts.interop.xarray namespace package 🧩 unxts-linalg Issues/PRs affecting the unxts.linalg namespace package 🧩 unxts-parametric Issues/PRs affecting the unxts.parametric namespace package

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants