# Build & Publish `litellm-proxy-extras`

This runbook covers building and publishing a new version of the `litellm-proxy-extras` PyPI package. For use by litellm engineers only.

## Prerequisites

- All `schema.prisma` files are in sync (see [migration_runbook.md](./migration_runbook.md) Step 0)
- Migration has been generated and committed
- You are in the `litellm-proxy-extras/` directory

## Step 1: Bump the Version

### Option A: Automatic Version Bump (Recommended)

Use commitizen to automatically bump the version across all files:

```bash
cd litellm-proxy-extras
cz bump --increment patch
```

This will automatically:
- Bump the version in `pyproject.toml` (both `[project].version` and `[tool.commitizen].version`)
- Update the version in `../pyproject.toml` (root)
- Create a git commit with the version bump

Then skip to Step 3 (Clean Old Artifacts).

### Option B: Manual Version Bump

Update the version in `pyproject.toml`:

```bash
cd litellm-proxy-extras

# Check current version
grep 'version' pyproject.toml
```

Edit `pyproject.toml` and bump the version (both `[project].version` and `[tool.commitizen].version`).

#### Step 2: Update Version in the Root Package Metadata (Manual Only)

After bumping the version in `litellm-proxy-extras/pyproject.toml`, you **must** also update the version reference in the root `pyproject.toml`:

| File | Line to update |
|------|---------------|
| `pyproject.toml` (root) | `litellm-proxy-extras==X.Y.Z` in `[project.optional-dependencies].proxy` |

```bash
# From the repo root — replace OLD with NEW version
sed -i '' 's/litellm-proxy-extras==OLD/litellm-proxy-extras==NEW/' pyproject.toml
```

> **Do NOT skip this step.** The main `litellm` package pins the extras version — if you don't update these, users will install the old version.

## Step 3: Clean Old Artifacts

```bash
rm -rf dist/ build/ *.egg-info
```

## Step 4: Build the Package

```bash
uv build
```

This creates `.tar.gz` and `.whl` files in the `dist/` directory.

Verify the build output:

```bash
ls -la dist/
```

## Step 5: Upload to PyPI

```bash
uv tool run --from 'twine==6.2.0' twine upload dist/*
```

You will be prompted for your PyPI API token:

```
Enter your API token: pypi-...
```

> Use `__token__` as the username and your PyPI API token as the password.

## Quick Reference (Copy-Paste)

```bash
cd litellm-proxy-extras
rm -rf dist/ build/ *.egg-info
uv build
uv tool run --from 'twine==6.2.0' twine upload dist/*
```

---

## Do you want to build and publish a new `litellm-proxy-extras` package? (y/n)

If **yes**, run the following commands in order:

```bash
cd litellm-proxy-extras
rm -rf dist/ build/ *.egg-info
uv build
uv tool run --from 'twine==6.2.0' twine upload dist/*
```

When `twine upload` runs, enter your PyPI credentials:
- **Username:** `__token__`
- **Password:** *(paste your PyPI API key)*

If **no**, you're done — no package publish needed.
