Publishing
Python Package (PyPI)
Section titled “Python Package (PyPI)”Use the all-* Make commands to prepare a release, then publish:
make all-patch # or all-minor, all-majormake publishWhat the Commands Do
Section titled “What the Commands Do”Each all-* command automatically:
- Bumps the version (patch, minor, or major)
- Pushes to GitHub and pushes tags
- Creates a GitHub release
- Cleans old builds and builds the package
The wheel build runs npm ci against node_ui/package-lock.json in a
temporary directory. It includes only locked production dependencies and does
not use or change the source tree’s node_modules/ directory. A missing or
inconsistent lock file stops the build.
The built package includes its Node dependencies, so users do not need to run
npm install. They need Node.js 18 or newer.
After the build completes, run make publish to upload to PyPI. The command
loads PYPI_TOKEN from the primary Git checkout’s .env, passes it to uv
without printing it, and requires both wheel and source distributions in
dist/. Linked worktrees therefore share the primary checkout’s secret file;
you do not need to copy .env into each worktree.
To use another dotenv file, set PYPI_ENV_FILE:
make publish PYPI_ENV_FILE=~/.config/claude-code-tools/pypi.envRust Binaries (crates.io)
Section titled “Rust Binaries (crates.io)”aichat-search
Section titled “aichat-search”make aichat-search-publishThis command:
- Bumps the version (default: patch; override with
BUMP=minororBUMP=major) - Creates a
rust-v*git tag - Pushes to GitHub (triggers CI for binary releases)
- Publishes to crates.io
After publishing, users can install with:
cargo install aichat-searchOr via Homebrew:
brew install pchalasani/tap/aichat-searchmake lmsh-publishThis command:
- Bumps the patch version
- Publishes to crates.io
After publishing, users can install with:
cargo install lmshSee Also
Section titled “See Also”- Make Commands — full list of all available Make targets
- Testing — verify changes before publishing