Skip to content

W7: packaging: executables for Linux and Windows, the wheel, releases - #15

Merged
Tecnologic merged 1 commit into
mainfrom
claude/unimoc-debug-gui-lrgfap
Oct 26, 2026
Merged

Tecnologic merged 1 commit into
mainfrom
claude/unimoc-debug-gui-lrgfap

Conversation

@Tecnologic

Copy link
Copy Markdown
Owner

The packaging part of phase W7 of docs/web_plan.md. This PR does not archive Tecnologic/cymon, the other part of W7. That step is the owner's.

Changes

  • python -m cypilot, and so the executable: without arguments it starts the web app and opens the browser, like cypilot; with arguments it is cypilot-ctl.

  • packaging/cypilot.spec: a one-file PyInstaller executable with the web UI.

    • No Qt.
    • No DSDL: the UNIMOC DSDL is GPL, so it is downloaded and compiled on the first start, as with the package. nunavut, pydsdl and pycyphal go in whole, for the compiled code.
    • The canable entry point comes along through the distribution metadata.
  • packaging/smoke_test.py, for the executable and for the installed wheel: --version, then the DSDL download (dsdl), then serve --demo 1. It checks the page, the API, the registers of the demo node and a recorded run.

  • .github/workflows/build.yml, smoke-testing each build:

    • the executables on ubuntu-22.04 (glibc 2.35, so newer distributions run them) and windows-2022;
    • the wheel on Python 3.11, installed outside the source tree.

    CI calls it, so every PR builds them.

  • .github/workflows/release.yml: a tag vX.Y.Z that equals the version in pyproject.toml and cypilot/__init__.py builds the files and creates the GitHub release with them.

  • README: four ways to install (executable, pipx, the Pi, a clone), and how a release is made. AGENTS and web_plan.md are updated.

Tests

  • Locally on Linux, the executable (46 MB) passed the smoke test with an empty cache, so it compiled the DSDL itself. The built wheel passed the smoke test in a fresh venv.
  • tests/unit/test_main.py: python -m cypilot --version and serve --help.
  • Locally: ruff, format and mypy clean; pytest 133 passed, 1 skipped.
  • The Windows executable is built and smoke-tested only by CI. The W7 acceptance test, an install on a clean Windows machine and a fresh Pi, is yours.

Generated by Claude Code

- python -m cypilot (and the executable): the web app without arguments,
  else cypilot-ctl.
- packaging/cypilot.spec: a one-file PyInstaller executable with the web
  UI, without Qt and without the DSDL (GPL: downloaded and compiled on the
  first start, as with the package).
- packaging/smoke_test.py: --version, the DSDL download, serve with a demo
  device, its registers and a recorded run; for the executable and for the
  installed wheel.
- .github/workflows/build.yml: the executables on ubuntu-22.04 (glibc 2.35)
  and windows-2022, the wheel on Python 3.11, each smoke-tested; called by
  CI and by release.yml, which makes the release on a tag vX.Y.Z equal to
  the version and attaches the files.
- README: the ways to install (executable, pipx, the Pi, a clone) and how a
  release is made; AGENTS and web_plan.
- Locally: the Linux executable (46 MB) and the wheel pass the smoke test,
  the executable with an empty cache (it compiles the DSDL itself).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WEh6hu8r51ZDjgfECmELvM
@Tecnologic
Tecnologic merged commit 6e57ac2 into main Oct 26, 2026
16 checks passed
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.

2 participants