Skip to content

fix: migrate CI off legacy isee-based workflow onto wads-managed uv CI - #11

Merged
thorwhalen merged 2 commits into
masterfrom
fix/migrate-ci-to-wads-uv
Sep 22, 2026
Merged

thorwhalen merged 2 commits into
masterfrom
fix/migrate-ci-to-wads-uv

Conversation

@thorwhalen

Copy link
Copy Markdown
Member

Summary

Fixes #8: the legacy .github/workflows/ci.yml pinned Python 3.8 and installed an unpinned isee (which pulls in wads); the currently-published wads uses dict[str, Any] at module level, a TypeError on 3.8. Every push/PR has shown red CI for this reason regardless of what changed (since before #9 landed, gated on a local pytest run instead per that PR's own notes).

Migration (the durable-fix option from #8, following the wads-migrate skill):

  • setup.cfg/setup.py → pyproject.toml (wads-migrate setup-to-pyproject), with the known rough edges fixed by hand: SPDX license string instead of the deprecated [project.license] table; project_name set to "oplot"; testpaths widened to ["oplot", "tests"] (the old CI actually ran pytest --doctest-modules $PROJECT_NAME, i.e. the package itself, so this preserves that doctest coverage); disabled the dead [tool.wads.ci.metrics] gate (config_path points at a file that doesn't exist, same pattern already fixed in git2py/focal).
  • .github/workflows/ci.yml → the modern uv-based template (wads-migrate ci-to-uv).

Widening test collection to the package surfaced two real, pre-existing bugs invisible under the broken CI:

  • oplot/my.py: import nympy as np (typo) made an already-orphaned, unimported module fail to even import. Fixed the typo; the module is still dead code (not referenced from oplot/__init__.py) and its one function (vlines) is still broken at runtime for an unrelated reason (a removed matplotlib hold= kwarg) — filed as a separate follow-up, oplot/my.py: vlines() is dead code and still broken (hold= kwarg removed from matplotlib) #10, rather than fixed here.
  • oplot/plot_stats.py: smooth_scores's doctest asserted numpy<2.0's bare scalar repr ([1.5], [2, 3]); currently-installed numpy 2.x reprs scalars as np.float64(1.5) / np.int64(2). Not a logic bug — updated the expected values to match current numpy's actual (correct) behavior.

Also applied ruff format fleet-wide (quote style, blank lines) to satisfy the new CI's format-check gate — no logic changes.

Review

Independently reviewed by a second agent before landing. It ran the full suite (87 passed), spot-checked every format-only diff for semantic changes (none found), verified the numpy repr fix empirically (values unchanged, only display differs), confirmed all of wads-migrate's documented rough edges were actually addressed, and diffed the old vs. new CI workflow for dropped functionality (none beyond intentional, in-file-documented changes — Pages publish step restructuring and PyPI auth method, both called out in the new workflow's own MIGRATION NOTE comments). It flagged oplot/my.py's deeper brokenness (not blocking, dead code) — filed as #10.

Dependents check: oplot's one known local dependent, shaded, only imports oplot.plot_data_set.scatter_and_color_according_to_y (untouched by this change); its test suite runs clean (2 skipped — missing audio fixtures, unrelated — 0 failed) against this branch.

Test plan

  • wads ci-local: 87 passed, format/lint green (3.10 + 3.12).
  • Independent review: build-step failure in that pass was a local-disk-space artifact (/tmp at 100%), not a defect — uv build is standard and expected to succeed on a GitHub Actions runner.
  • gh pr checks --watch green before merge.

Closes #8

🤖 Generated with Claude Code

https://claude.ai/code/session_011HSBVhDjRU4apSLcRkavv9

thorwhalen and others added 2 commits September 22, 2026 14:34
Fixes #8: the legacy .github/workflows/ci.yml pinned Python 3.8 and
installed an unpinned isee (which pulls in wads); the currently-published
wads uses dict[str, Any] at module level, a TypeError on 3.8. Every push/PR
has shown red CI for this reason regardless of what changed, since before
#9 landed (gated on a local pytest run instead, per that PR's own notes).

Migration (durable fix option from #8, following the wads-migrate skill):
- setup.cfg/setup.py -> pyproject.toml (wads-migrate setup-to-pyproject),
  with the known rough edges fixed by hand: SPDX license string instead of
  the deprecated [project.license] text table; project_name set to "oplot";
  testpaths widened to ["oplot", "tests"] (the old CI actually ran
  `pytest --doctest-modules $PROJECT_NAME`, i.e. the package itself, so this
  preserves that doctest coverage rather than narrowing it to tests/ only);
  disabled the dead [tool.wads.ci.metrics] gate (config_path points at a
  file that doesn't exist, same pattern already fixed in git2py/focal).
- .github/workflows/ci.yml -> the modern uv-based template
  (wads-migrate ci-to-uv).

Widening test collection to the package surfaced two real, pre-existing
bugs invisible under the broken CI:
- oplot/my.py: `import nympy as np` (typo) made an already-orphaned,
  unimported module fail to even import. Fixed the typo; the module is
  still dead code (not referenced from oplot/__init__.py), out of scope
  here.
- oplot/plot_stats.py: smooth_scores's doctest asserted numpy<2.0's bare
  scalar repr (`[1.5]`, `[2, 3]`); currently-installed numpy 2.x reprs
  scalars as `np.float64(1.5)` / `np.int64(2)`. Not a logic bug -- updated
  the expected values to match current numpy's actual (correct) behavior.

Also applied `ruff format` fleet-wide (quote style, blank lines) to satisfy
the new CI's format-check gate -- no logic changes.

Dependents check: oplot's one known local dependent, `shaded`, only imports
`oplot.plot_data_set.scatter_and_color_according_to_y` (a module untouched
by this change); its test suite runs clean (2 skipped, needs audio fixtures
not present, 0 failed) against this branch.

Closes #8

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The Windows leg (just enabled by this branch's CI migration -- the old
workflow never had a Windows job at all) hung indefinitely instead of
completing: several oplot modules' doctests call plt.show(), and with no
non-interactive backend forced, matplotlib picked a GUI backend on the
Windows runner that blocked rather than no-op'ing (unlike Linux, which
has no DISPLAY and falls back to Agg automatically).

Set MPLBACKEND=Agg via [tool.wads.ci.env.defaults] (re-ran
wads-migrate ci-to-uv to wire it into the generated workflow's env: block).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@thorwhalen
thorwhalen merged commit 1cc58df into master Sep 22, 2026
12 checks passed
@thorwhalen
thorwhalen deleted the fix/migrate-ci-to-wads-uv branch September 22, 2026 15:01
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.

Legacy CI pipeline is broken independent of any code change (Validation py3.8 fails at Install dependencies)

1 participant