# Release Guide ## 📋 Prerequisites Before releasing, ensure: 1. ✅ All code changes are committed and pushed 2. ✅ CI has passed on the latest commit (check [Actions](https://github.com/yichuan-w/LEANN/actions/workflows/ci.yml)) 3. ✅ You have determined the new version number ### Required: PyPI Configuration To enable PyPI publishing: 1. Get a PyPI API token from https://pypi.org/manage/account/token/ 2. Add it to repository secrets: Settings → Secrets → Actions → New repository secret - Name: `PYPI_API_TOKEN` - Value: Your PyPI token (starts with `pypi-`) ### Optional: TestPyPI Configuration To enable TestPyPI testing (recommended but not required): 1. Get a TestPyPI API token from https://test.pypi.org/manage/account/token/ 2. Add it to repository secrets: Settings → Secrets → Actions → New repository secret - Name: `TEST_PYPI_API_TOKEN` - Value: Your TestPyPI token (starts with `pypi-`) **Note**: TestPyPI testing is optional. If not configured, the release will skip TestPyPI and proceed. ## 🚀 Recommended: Manual Release Workflow ### Via GitHub UI (Most Reliable) 1. **Verify CI Status**: Check that the latest commit has a green checkmark ✅ 2. Go to [Actions → Manual Release](https://github.com/yichuan-w/LEANN/actions/workflows/release-manual.yml) 3. Click "Run workflow" 4. Enter version (e.g., `0.1.1`) 5. Toggle "Test on TestPyPI first" if desired 6. Click "Run workflow" **What happens:** - ✅ Downloads pre-built packages from CI (no rebuild needed!) - ✅ Updates all package versions - ✅ Optionally tests on TestPyPI - ✅ **Publishes directly to PyPI** - ✅ Creates tag and GitHub release ### Via Command Line ```bash gh workflow run release-manual.yml -f version=0.1.1 -f test_pypi=true ``` ## ⚡ Quick Release (One-Line) For experienced users who want the fastest path: ```bash ./scripts/release.sh 0.1.1 ``` This script will: 1. Update all package versions 2. Commit and push changes 3. Create GitHub release 4. **Manual Release workflow will automatically publish to PyPI** ⚠️ **Note**: If CI fails, you'll need to manually fix and re-tag ## Manual Testing Before Release For testing specific packages locally (especially DiskANN on macOS): ```bash # Build specific package locally ./scripts/build_and_test.sh diskann # or hnsw, core, meta, all # Test installation in a clean environment python -m venv test_env source test_env/bin/activate pip install packages/*/dist/*.whl # Upload to Test PyPI (optional) ./scripts/upload_to_pypi.sh test # Upload to Production PyPI (use with caution) ./scripts/upload_to_pypi.sh prod ``` ## First-time setup 1. Install GitHub CLI: ```bash brew install gh gh auth login ``` 2. Set PyPI token in GitHub: ```bash gh secret set PYPI_API_TOKEN # Paste your PyPI token when prompted ```