> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ragrails.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Release

> Build and publish Ragrails.

## 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

```bash theme={null}
scripts/test-core.sh
scripts/test-sdk.sh
scripts/test-cli.sh
scripts/test-rest.sh
```

## 3. Build

```bash theme={null}
uv build
```

This produces a wheel and sdist in `dist/`.

## 4. Validate

```bash theme={null}
uvx twine check dist/*
```

## 5. Publish

```bash theme={null}
# 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:

```bash theme={null}
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>"
```
