Skip to content

Versioning & Releases

SafeLLM follows Semantic Versioning (SemVer) to ensure predictable, auditable releases.

MAJOR.MINOR.PATCH
TypeWhen to incrementExample
PATCHBug fixes, no behavior changeRegex fix, crash fix
MINORNew features, backward compatibleNew L1 filter, new PII type
MAJORBreaking changesConfig format change, API change

The version is defined in a single file:

safellm-oss/VERSION

All other artifacts (Docker images, Helm charts, pyproject.toml) read from this file.

Terminal window
echo "2.0.0" > VERSION
Terminal window
git add VERSION
git commit -m "chore(release): v2.0.0"
Terminal window
git tag -a v2.0.0 -m "Release v2.0.0"
git push origin v2.0.0

Pushing the tag triggers GitHub Actions which:

  1. Builds multi-arch Docker image (amd64, arm64)
  2. Tags the image:
    • ghcr.io/safellmio/safellm-apisix-gateway-sidecar:2.0.0 (exact version)
    • ghcr.io/safellmio/safellm-apisix-gateway-sidecar:2.0 (minor)
    • docker.io/safellm/safellm-apisix-gateway-sidecar:2.0.0 (exact version)
    • docker.io/safellm/safellm-apisix-gateway-sidecar:2.0 (minor)
    • docker.io/safellm/safellm-apisix-gateway-sidecar:2 (major)
    • ghcr.io/safellmio/safellm-apisix-gateway-sidecar:latest (optional)
  3. Pushes to GHCR (and optionally Docker Hub)
  4. Creates GitHub Release with:
    • Release notes
    • Image digest (SHA256)
    • docker-compose.release.yaml
# docker-compose.yml (dev)
services:
sidecar:
build:
context: .
dockerfile: sidecar/Dockerfile
# docker-compose.release.yaml (prod)
services:
apisix:
image: apache/apisix:3.14.1-debian # Pinned
sidecar:
image: ghcr.io/safellmio/safellm-apisix-gateway-sidecar:2.0.0 # Pinned
redis:
image: redis:7.2-alpine # Pinned
services:
sidecar:
image: ghcr.io/safellmio/safellm-apisix-gateway-sidecar@sha256:abc123...

SafeLLM images are published to:

RegistryURLPurpose
GHCRghcr.io/safellmio/safellm-apisix-gateway-sidecarPrimary, GitHub integration
Docker Hubdocker.io/safellm/safellm-apisix-gateway-sidecarPublic distribution

Both registries have identical images with the same digest.

Helm charts follow the same version as the application:

Chart.yaml
apiVersion: v2
name: safellm-oss
version: 2.0.0 # Chart version
appVersion: '2.0.0' # App version (same)

Install specific version:

Terminal window
helm install safellm safellm/safellm-oss --version 2.0.0
Terminal window
docker inspect ghcr.io/safellmio/safellm-apisix-gateway-sidecar:2.0.0 --format='{{.RepoDigests}}'
Terminal window
docker inspect safellm/safellm-apisix-gateway-sidecar:2.0.0 --format='{{.RepoDigests}}'

Each GitHub Release includes the expected digest. Compare:

Terminal window
# From release notes
Expected: sha256:abc123...
# From your local pull
Actual: sha256:abc123...
VersionDateNotes
2.0.02026-02Current OSS release baseline
0.8.02026-01Initial OSS release

See CHANGELOG for detailed history.