Repository navigation
cmux TUI distribution: npx cmux / uvx cmux via prebuilt binaries - #7651
Conversation
Adds mux-tui-release.yml building the cmux-mux TUI for the five distribution targets (darwin arm64/x64, linux x64/arm64, windows x64-gnu) via cargo-zigbuild, and extends ghostty-vt-sys build.rs to map those targets to zig cross-targets. Foundation for npx cmux / uvx cmux (wrapper packaging follows once binaries build).
Main `cmux` package: bin shim resolves cmux-tui-<platform> optional dep and execs the prebuilt cmux-mux binary. Platform packages are generated in CI from the release binaries. Versions are placeholder (0.0.0-managed), synced at publish.
…platforms Windows bindgen fails on the nested ghostty vt headers under mingw clang; mark the matrix leg continue-on-error and drop win32-x64 from the launcher's platform map until fixed. darwin arm64/x64 + linux x64/arm64 all build.
package_npm.py generates the 4 platform packages + versioned launcher; package_pypi.py builds per-platform wheels (cmux console entry point exec'ing the bundled cmux-mux, RECORD/external_attr correct — judge-verified via real npm pack->install and pip install->run). mux-tui-release.yml gains a package job with binary + wheel smoke tests. tui-publish-npm.yml (dispatch-only, confirm_tui_cmux gate, latest takeover, github-hosted provenance, npm>=11.5.1) and tui-publish-pypi.yml (tag+dispatch, env pypi-tui). Dispatch inputs routed through env per judge review (injection surface). RELEASING-TUI.md documents registry setup.
tui-build-package.yml (reusable workflow_call) shared by release/publish/ nightly callers. tui-nightly.yml publishes 0.X.Y-nightly.YYYYMMDD.N to npm --tag nightly and PEP 440 .dev wheels to PyPI (default resolution ignores both; npx cmux@nightly opts in), pinned to one resolved sha across the matrix. tui-release-cut.yml computes the next version from cmux-tui-v* tags, creates the tag, and explicitly dispatches build + PyPI publish (GITHUB_TOKEN tag pushes never fire other workflows). tui-publish-npm.yml gains a strict stable-version gate so a nightly can never land on npm latest. Judge-approved (fable round 2 + re-verify).
std::fs::canonicalize returns extended-length paths on Windows; clang accepts the root header via \\?\ but cannot resolve its nested relative includes (ghostty/vt.h -> ghostty/vt/types.h file-not-found), which has failed the windows-experimental leg on main since at least 2026-07-06. Strip the verbatim prefix before handing paths to bindgen.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Caution Review failedAn error occurred during the review process. Please try again later. 📝 WalkthroughWalkthroughAdds seven new GitHub Actions workflows implementing a full cmux-tui release pipeline: version derivation, a reusable build/package workflow (npm, PyPI, optional Windows), and publish flows for releases, nightly builds, manual npm/PyPI publishing, and release cutting. Also updates ghostty-vt-sys build.rs for Windows path normalization and expanded Zig target mappings. ChangesTUI release build and publish workflows
Estimated code review effort: 4 (Complex) | ~60 minutes Windows build path and target mapping fix
Estimated code review effort: 2 (Simple) | ~10 minutes Sequence Diagram(s)sequenceDiagram
participant Trigger as Tag Push / Dispatch
participant VersionJob as version job
participant BuildPackage as tui-build-package.yml
participant PublishNpm as npm registry
participant PublishPyPI as PyPI
Trigger->>VersionJob: derive and validate version
VersionJob->>BuildPackage: call workflow_call(version, flags)
BuildPackage->>BuildPackage: build binaries per target matrix
BuildPackage->>BuildPackage: package npm / pypi artifacts
BuildPackage-->>VersionJob: upload artifacts
VersionJob->>PublishNpm: publish platform + launcher packages
VersionJob->>PublishPyPI: publish wheels with attestations
Possibly related PRs
Suggested reviewers: ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Greptile SummaryAdds end-to-end distribution for the
Confidence Score: 4/5Safe to merge; the two workflow design issues are operational annoyances rather than correctness failures, and the packaging and build.rs changes are well-structured. The
Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant Dev as Developer
participant RC as tui-release-cut.yml
participant MR as mux-tui-release.yml
participant PP as tui-publish-pypi.yml
participant PN as tui-publish-npm.yml
participant BPkg as tui-build-package.yml
participant PyPI
participant npm
Dev->>RC: dispatch (bump/version)
RC->>RC: compute next version, create annotated tag
RC->>RC: git push tag (GITHUB_TOKEN suppressed)
RC->>MR: gh workflow run (inspection build)
RC->>PP: gh workflow run
MR->>BPkg: build+package (npm+pypi artifacts)
Note over MR,BPkg: Artifacts uploaded but not consumed by publish
PP->>BPkg: build+package (pypi only)
BPkg-->>PP: pypi-wheels artifact
PP->>PyPI: pypa/gh-action-pypi-publish (OIDC)
Dev->>PN: "dispatch (version + confirm_tui_cmux=true)"
PN->>PN: validate-version
PN->>BPkg: build+package (npm only)
BPkg-->>PN: npm-packages artifact
PN->>npm: npm publish --provenance (no --tag, becomes latest)
Note over Dev,npm: Nightly path (daily schedule)
BPkg-->>BPkg: single build
BPkg-->>npm: publish --tag nightly
BPkg-->>PyPI: publish .dev version
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant Dev as Developer
participant RC as tui-release-cut.yml
participant MR as mux-tui-release.yml
participant PP as tui-publish-pypi.yml
participant PN as tui-publish-npm.yml
participant BPkg as tui-build-package.yml
participant PyPI
participant npm
Dev->>RC: dispatch (bump/version)
RC->>RC: compute next version, create annotated tag
RC->>RC: git push tag (GITHUB_TOKEN suppressed)
RC->>MR: gh workflow run (inspection build)
RC->>PP: gh workflow run
MR->>BPkg: build+package (npm+pypi artifacts)
Note over MR,BPkg: Artifacts uploaded but not consumed by publish
PP->>BPkg: build+package (pypi only)
BPkg-->>PP: pypi-wheels artifact
PP->>PyPI: pypa/gh-action-pypi-publish (OIDC)
Dev->>PN: "dispatch (version + confirm_tui_cmux=true)"
PN->>PN: validate-version
PN->>BPkg: build+package (npm only)
BPkg-->>PN: npm-packages artifact
PN->>npm: npm publish --provenance (no --tag, becomes latest)
Note over Dev,npm: Nightly path (daily schedule)
BPkg-->>BPkg: single build
BPkg-->>npm: publish --tag nightly
BPkg-->>PyPI: publish .dev version
|
Makes the cmux-mux TUI installable as
npx cmuxanduvx cmux.cmuxlauncher (esbuild-style) + 4 platform packages via optionalDependencies; publishing at 0.9.0 with no --tag deliberately takes overlatestfrom the 0.8.3 cloud-VM CLI (confirm_tui_cmux dispatch gate).cmuxconsole entry point exec'ing the bundled binary; 0.9.0 outranks the 0.1.x SDK so uvx resolves the TUI.nightlydist-tag and PEP 440 .dev wheels; default resolution never sees them.Verified in CI: full build+package pipeline green on tag cmux-tui-v0.0.2 (real binaries, linux binary executed, wheel pip-installed and
cmux --helprun). SDK relocation to cmux-sdk is a separate follow-up.Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.Note
Medium Risk
Publishing workflows can change npm
latestand PyPIcmuxresolution for all users once dispatched; gates and dist-tags mitigate mistakes but registry impact is real.Overview
Adds end-to-end distribution for the
cmux-muxTUI asnpx cmuxanduvx cmux, with GitHub Actions to build per-platform binaries, wrap them for npm/PyPI, and publish stable, nightly, and tag-driven releases.A reusable
tui-build-package.ymlmatrix-buildscmux-muxfor macOS (arm64/x64) and Linux (x64/arm64) via native/crosscargo-zigbuild, optionally an experimental Windows GNU binary, then runspackage_npm.py/package_pypi.pyto produce a launcher plus four platform npm packages and per-platform wheels, with CI smoke checks.mux-tui-release.yml,tui-nightly.yml,tui-publish-npm.yml,tui-publish-pypi.yml, andtui-release-cut.ymlwire version derivation, OIDC publishing (npmnightlyvs un-tagged stablelatestwithconfirm_tui_cmux), PyPI attestations, and explicit workflow dispatches after token-pushed tags.Packaging adds an npm
cmux.jsshim that execs optionalcmux-tui-*binaries, plusmux/dist/RELEASING-TUI.md.ghostty-vt-sys/build.rsstrips Windows\\?\paths for bindgen and extends zig cross-target mappings for release builds.Reviewed by Cursor Bugbot for commit 8aa8c8f. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by cubic
Ship the cmux TUI as prebuilt binaries so it runs with
npx cmuxanduvx cmux. Adds cross‑platform builds, packaging, nightly channel, and release workflows.New Features
cargo-zigbuild+ zig target map inghostty-vt-sys.cmuxlauncher that execs a per‑platform optional dependency (cmux-tui-darwin-*,cmux-tui-linux-*). Usenpx cmux.cmuxwheels with acmuxconsole entry point. Useuvx cmux.tui-build-package.yml; release buildermux-tui-release.yml; nightlytui-nightly.yml(npmnightlytag and PEP 440.devwheels);tui-publish-npm.yml(manual, confirm‑gated);tui-publish-pypi.yml;tui-release-cut.ymlto tagcmux-tui-vX.Y.Zand dispatch builds. Docs inmux/dist/RELEASING-TUI.md.Bug Fixes
\\?\verbatim prefixes so clang can resolve nested includes (fixes build failure); adds zig cross‑target mappings for release builds.Written for commit 8aa8c8f. Summary will update on new commits.
Summary by CodeRabbit
New Features
Bug Fixes