Skip to main content

1. Update the changelog

Move entries from [Unreleased] under a new version heading in CHANGELOG.md, and bump version in pyproject.toml.

2. Run tests

scripts/test-core.sh
scripts/test-sdk.sh
scripts/test-cli.sh
scripts/test-rest.sh

3. Build

uv build
This produces a wheel and sdist in dist/.

4. Validate

uvx twine check dist/*

5. Publish

# Test PyPI first
uvx twine upload --repository testpypi dist/*

# Then PyPI
uv publish

Installing from Test PyPI

Test PyPI does not host all dependencies, so resolve dependencies from real PyPI:
uv pip install \
  --index-url https://test.pypi.org/simple/ \
  --extra-index-url https://pypi.org/simple/ \
  --index-strategy unsafe-best-match \
  "ragrails[voyage]==<version>"