Skip to content

Release TUI with cargo-dist, publish SDK to PyPI, add MIT license - #53

Merged
ekorman merged 6 commits into
mainfrom
update-release-workflow
Sep 30, 2026
Merged

ekorman merged 6 commits into
mainfrom
update-release-workflow

Conversation

@ekorman

@ekorman ekorman commented Sep 30, 2026

Copy link
Copy Markdown
Owner

Summary

  • TUI releases via cargo-dist. release.yml is now generated by cargo-dist 0.33. On a version tag it builds extty for macOS (arm64, x86_64), Linux (arm64, x86_64) and Windows (x86_64), and attaches .tar.xz/.zip archives plus checksums to a GitHub Release. dist-workspace.toml sits at the repo root with members = ["cargo:tui"] so the workflow can find the crate. This replaces the old manual-run build and the Cloudflare R2 upload.
  • SDK publishes to pypi.org. The new publish-python.yml builds the SDK with uv build and publishes it with pypa/gh-action-pypi-publish using trusted publishing, with no stored token. It runs in the pypi environment, matching the pending publisher registered on PyPI.
  • MIT license and PyPI metadata. Adds LICENSE at the root, plus readme, license, license-files and project URLs in sdk/pyproject.toml. sdk/LICENSE and sdk/README.md are symlinks to the root copies so setuptools includes them. tui/Cargo.toml also gets license = "MIT", and dist now puts LICENSE and README.md in every TUI archive.
  • .gitignore: un-ignores dist-workspace.toml, which the existing dist* pattern was hiding, and ignores the root /target where dist writes its output.

Versioning

The TUI and the SDK are released together. One v0.1.0 tag starts both workflows: the crate is 0.1.0, and setuptools_scm derives SDK 0.1.0 from the tag. All previous tags and GitHub Releases have been deleted so the public release starts at 0.1.0.

Testing

  • dist plan --tag=v0.1.0 announces extty 0.1.0 with all 5 targets. dist generate --check passes, so release.yml is in sync with the config.
  • In a scratch copy tagged v0.1.0, uv build --package extty produced extty-0.1.0.tar.gz and extty-0.1.0-py3-none-any.whl. The metadata shows License-Expression: MIT, and twine check --strict passes on both files.
  • cargo check in tui/ passes.
  • Not tested: the actual PyPI upload and the cargo-dist CI run. Both only happen when v0.1.0 is pushed.

🤖 Generated with Claude Code

ekorman and others added 6 commits September 30, 2026 12:11
- Replace the hand-rolled release workflow with cargo-dist 0.33, which
  builds the TUI for 5 targets and attaches archives to a GitHub Release
  on version tags. dist-workspace.toml lives at the repo root and points
  at tui/ so the generated workflow can find the crate.
- Add publish-python.yml, which builds the SDK with uv and publishes to
  pypi.org via trusted publishing (pypa/gh-action-pypi-publish).
- Add the MIT license and PyPI metadata (readme, license, project URLs).
  sdk/LICENSE and sdk/README.md symlink to the root copies so setuptools
  includes them.
- Un-ignore dist-workspace.toml, which the dist* pattern was hiding.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Covers pip/uv for the SDK, and prebuilt release binaries or
cargo install --git for the TUI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
setup-uv publishes only exact version tags, so @v10 does not resolve and
the PyPI build job would fail on the first release tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ekorman
ekorman merged commit a7783e3 into main Sep 30, 2026
5 checks passed
@ekorman
ekorman deleted the update-release-workflow branch September 30, 2026 18:40
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