Release Process
This document describes how to publish a new release of LLM Proxy, including Docker images and Helm charts.
Overview
Releases are automated through GitHub Actions workflows that trigger on git tags:
- Docker Images: Published to
ghcr.io/sofatutor/llm-proxyon pushes tomainand tagsv* - Helm Charts: Published to
oci://ghcr.io/sofatutor/llm-proxyon tagsv*
Creating a Release
1. Prepare the Release
Ensure all changes are merged to main and tests pass:
# Update your local main branch
git checkout main
git pull origin main
# Verify all tests pass
make test
make lint
2. Create and Push a Version Tag
Use semantic versioning (e.g., v1.0.0, v1.2.3):
# Create an annotated tag
VERSION="1.0.0"
git tag -a "v${VERSION}" -m "Release v${VERSION}"
# Push the tag to GitHub
git push origin "v${VERSION}"
3. Automated Workflows
Pushing a tag triggers automated workflows:
Docker Workflow (.github/workflows/docker.yml)
- Builds multi-arch images (
linux/amd64,linux/arm64) - Publishes to
ghcr.io/sofatutor/llm-proxywith tags:v1.0.0(exact version)1.0(major.minor)sha-xxxxxxx(git commit SHA)latest(if from default branch)
Helm Chart Workflow (.github/workflows/helm-publish.yml)
- Updates
Chart.yamlversion and appVersion to match the git tag - Runs
helm lintand validation tests - Packages the chart
- Publishes to
oci://ghcr.io/sofatutor/llm-proxyas version1.0.0
4. Verify the Release
After the workflows complete (check GitHub Actions), verify:
Docker Image
# Pull the image
docker pull ghcr.io/sofatutor/llm-proxy:v1.0.0
# Verify it runs
docker run --rm ghcr.io/sofatutor/llm-proxy:v1.0.0 --version
Helm Chart
You can view available chart versions in the GitHub Container Registry UI at https://github.com/sofatutor/llm-proxy/pkgs/container/llm-proxy, or verify a specific version exists:
# Pull the chart
helm pull oci://ghcr.io/sofatutor/llm-proxy --version 1.0.0
# Verify the chart
helm show chart oci://ghcr.io/sofatutor/llm-proxy --version 1.0.0
5. Create GitHub Release (Optional)
While Docker and Helm publishing is automated, you may want to create a GitHub Release for visibility:
- Go to https://github.com/sofatutor/llm-proxy/releases/new
- Select the tag you just pushed
- Add release notes (what’s new, breaking changes, etc.)
- Publish the release
Versioning Strategy
We follow Semantic Versioning 2.0.0:
- MAJOR version (v1.0.0 → v2.0.0): Incompatible API changes
- MINOR version (v1.0.0 → v1.1.0): New functionality, backwards-compatible
- PATCH version (v1.0.0 → v1.0.1): Bug fixes, backwards-compatible
Helm Chart Versioning
The Helm chart version matches the application version. When you push a tag v1.2.3:
- Chart
versionis set to1.2.3 - Chart
appVersionis set to1.2.3 - Docker image default is
ghcr.io/sofatutor/llm-proxy:v1.2.3
Troubleshooting
Workflow Fails to Publish
Check the GitHub Actions logs for errors:
- https://github.com/sofatutor/llm-proxy/actions
Common issues:
- Missing
packages: writepermission (should be set in workflow) - Tag doesn’t match
v*pattern - Chart dependencies not building (workflow uses
helm dependency build)
Chart Not Found in GHCR
Charts are published to the organization’s GHCR, not the repository:
- Correct:
oci://ghcr.io/sofatutor/llm-proxy - Incorrect:
oci://ghcr.io/sofatutor/llm-proxy/llm-proxy
Version Mismatch
If the chart version doesn’t match the tag:
- Check the workflow logs to see what version was extracted
- Ensure tag follows the
v1.2.3format (leadingv, semantic version) - Re-run the workflow or delete and recreate the tag
Rolling Back a Release
If you need to roll back:
- Docker: Users can pull previous versions:
docker pull ghcr.io/sofatutor/llm-proxy:v1.0.0 - Helm: Users can install previous chart versions:
helm install llm-proxy oci://ghcr.io/sofatutor/llm-proxy --version 1.0.0 - Delete the tag (if release should not exist):
git tag -d v1.0.1 git push origin :refs/tags/v1.0.1Note: This doesn’t remove already-published artifacts from GHCR.
Future Improvements
See docs/issues/backlog/phase-7-release-plan.md for planned enhancements:
- Automated changelog generation
- GitHub Release creation from CI
- Makefile targets for version bumping
- Release validation tests