blumeops/docs/how-to/use-pypi-proxy.md
Erich Blume dc46eb7def Update all docs titles to human-readable (#117)
## Summary
- Updated frontmatter `title:` in all 63 doc cards from slug-case to human-readable (e.g. `borgmatic` → `Borgmatic`, `ai-assistance-guide` → `AI Assistance Guide`)
- Titles now closely match file stems so `[[wiki-links]]` render naturally without alternate anchor text
- Corrected titles that diverged from stems (e.g. `host-inventory` → `Hosts`, `grafana-alloy` → `Alloy`, `argocd-applications` → `Apps`)
- Deleted `title-test-alpha.md` and `title-test-beta.md` test cards and removed their reference index entry

## Deployment and Testing
- [x] `docs-check-links` passes — all wiki-links valid
- [x] `docs-check-index` passes
- [x] `docs-check-filenames` passes
- [ ] Verify titles render correctly on docs site after deploy

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/117
2026-02-07 21:44:57 -08:00

1.2 KiB

title tags
Use PyPI Proxy
how-to
python

Use the PyPI Proxy

How to configure clients and publish packages to devpi.

Configure pip/uv

Point pip and uv at the proxy via environment variables:

export PIP_INDEX_URL="https://pypi.ops.eblu.me/root/pypi/+simple/"
export UV_INDEX_URL="https://pypi.ops.eblu.me/root/pypi/+simple/"

Unset both to fall back to public PyPI (e.g. when indri is offline).

The dotfiles repo has shell config that manages this toggle.

Upload Packages

# Build and publish with uv
cd ~/code/personal/your-package
uv build
uv publish --publish-url https://pypi.ops.eblu.me/eblume/dev/

# First time: uv will prompt for credentials

Create Users/Indices

# Login as root
uvx devpi use https://pypi.ops.eblu.me
uvx devpi login root

# Create user (prompts for password - store in 1Password)
uvx devpi user -c USERNAME email=EMAIL

# Create index inheriting from PyPI mirror
uvx devpi index -c USERNAME/dev bases=root/pypi

Verify Cache

# Check if devpi is caching
curl -s https://pypi.ops.eblu.me/+api | jq
  • devpi - Service reference