Skip to content

ci: gate releases on the built wheel actually running - #2

Merged
rigidlab merged 1 commit into
mainfrom
ci/release-workflow
Aug 15, 2026
Merged

rigidlab merged 1 commit into
mainfrom
ci/release-workflow

Conversation

@rigidlab

Copy link
Copy Markdown
Owner

Adds a release pipeline that publishes only if the built wheel installs and
runs.

build → smoke (Ubuntu + Windows) → publish, with publish declaring
needs: smoke, so a wheel that doesn't start means no Release and no
attached artifacts — a red X rather than a broken download.

The smoke test (scripts/smoke_test.py) installs the wheel into a clean venv
and checks what the source-tree tests structurally cannot:

  • the runtime assets (terminal.html, xterm.js, …) are in the installed
    package
  • both entry points resolve on PATH
  • the app launches and stays up — a terminal that exits on its own has
    crashed

Verified locally both ways: exit 1 with an asset removed, exit 0 intact.

Also checks the tag and the wheel version agree, so @v1.0.0 can never
install something reporting a different version.

This PR runs the pipeline itself (publish is skipped — it's tag-only), which
is the point of the pull_request path filter.

🤖 Generated with Claude Code

https://claude.ai/code/session_01M8UgLA68nRCYg3qFTyW8ms

The test suite runs against src/, so nothing in CI could see a packaging
mistake: an asset the build backend leaves out, a missing entry point, a
package that imports but will not start. Those surface on the user's machine,
after the release.

On a v* tag: build, then install the wheel into a clean venv on Ubuntu and
Windows and smoke test it, and only then publish. publish needs smoke, so a
wheel that does not run produces a red X instead of a broken download.

The smoke test is a script rather than inline YAML so it can be run locally
and reviewed. It asserts the runtime assets are in the *installed* package,
that both entry points resolve, and that the app stays up when launched -
not that it exits 0, since a terminal that exits on its own has crashed.
Verified both ways locally: exit 1 with an asset removed, exit 0 intact.

It also runs on PRs that touch the release machinery, because a pipeline
only exercised by releases is one you debug during a release.

Code assisted by Opus 5.
@rigidlab
rigidlab merged commit 985b908 into main Aug 15, 2026
7 checks passed
@rigidlab
rigidlab deleted the ci/release-workflow branch August 15, 2026 20:02
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.

1 participant