Release¶
Fully automated via release-please.
A single workflow (.github/workflows/release-please.yml) owns the end-to-end flow:
- Land commits on
mainusing Conventional Commits (feat:,fix:,feat!:for breaking, …). - release-please opens/updates a
chore(main): release X.Y.ZPR that bumpspyproject.toml, updatesCHANGELOG.md, and advances.release-please-manifest.json. - Merging that PR creates the git tag and the GitHub Release in the same workflow run.
- Downstream jobs in the same run build PyInstaller binaries for 4 targets, build the wheel + sdist, generate SHA256 sums, and upload everything as release assets.
No manual tagging or separate tag-triggered workflow is needed.
Post-install smoke¶
Unit + integration tests run against the source tree under uv sync, so
they never see release regressions that only show up after install: missing
entry-points in pyproject.toml, wrong package layout, sdist MANIFEST
gaps, or a wheel built without the web adapter's bundled Vite assets
(src/yaya/plugins/web/static/).
The post-install smoke (tests/e2e/) closes that gap. Every PR's CI runs
the matrix E2E smoke (ubuntu/macos/windows) job which:
- Downloads the built wheel + sdist from the
Build wheel + sdistjob. - Creates a fresh venv (no project source on
PYTHONPATH). pip install dist/*.whlinto the venv.- Runs
pytest tests/e2e -v. - On Ubuntu only, repeats steps 2–4 for
dist/*.tar.gz(sdist parity).
What the smoke covers:
yaya version/yaya --json version— entry-point wiring, version string shape.yaya doctor/yaya --json doctor— kernel bus boot round-trip + per-plugin health report.yaya --json plugin list— asserts every bundled plugin in the 0.1 catalog loads with the declared category (tests/e2e/test_plugin_list_smoke.py).yaya --help— every kernel subcommand advertised.tests/e2e/test_broken_binary_gate.py— AC-03 self-test that proves the gate actually fails on a broken binary.
Reproducing the smoke locally¶
Requires uv installed (provides uvx).
# Wheel + sdist, two fresh venvs:
scripts/post_install_smoke.sh
# Wheel only:
scripts/post_install_smoke.sh wheel
# Against the PyInstaller onefile binary:
just build-bin
YAYA_BIN=$(pwd)/dist/yaya pytest tests/e2e -v
The tests/e2e/test_binary_smoke.py module skips automatically unless
YAYA_BIN points at an executable, so the standard pytest tests/e2e
invocation stays focused on the installed wheel.