This document describes the release process for Synapse, its Helm chart, and the Synapse operator controller. Each component has its own independent release process.
The Synapse project consists of three independently versioned components:
- Synapse - The main Rust application (reverse proxy and firewall)
- Chart - The Helm chart for deploying Synapse and the operator
- Controller - The Kubernetes operator (Go-based)
Each component can be released independently using the Makefile targets. Releases create Git tags that trigger GitHub Actions workflows for building and publishing artifacts.
Releases the main Synapse application.
Command:
make release-synapse VERSION=x.y.zWhat it does:
- Updates
Cargo.tomlversion field - Updates
install.shVERSION variable - Runs
cargo update -p synapseto update Cargo.lock - Commits changes with message:
chore: release synapse x.y.z - Creates Git tag:
vx.y.z - Pushes commit and tag to
origin/main
GitHub Workflow:
- Triggers
.github/workflows/release.yaml - Builds Docker images for multiple platforms (linux/amd64, linux/arm64)
- Builds binary artifacts for multiple architectures
- Creates GitHub release with artifacts
Example:
make release-synapse VERSION=0.1.0Releases the Helm chart for deploying Synapse and the operator.
Command:
make release-chart VERSION=x.y.zWhat it does:
- Updates
synapse-operator/helm/Chart.yaml:versionfield (chart version)appVersionfield (application version)dependencies[].versionfor the synapse subchart
- Updates
synapse-operator/helm/charts/synapse/Chart.yaml:versionfield (chart version)appVersionfield (application version)
- Commits changes with message:
chore: release chart x.y.z - Creates Git tag:
chart/vx.y.z - Pushes commit and tag to
origin/main
GitHub Workflow:
- Triggers
.github/workflows/synapse-chart-release.yaml - Uses
helm/chart-releaser-actionto package and publish the chart - Publishes to GitHub Pages (chart repository)
Example:
make release-chart VERSION=0.2.0Releases the Synapse operator (Kubernetes controller).
Command:
make release-controller VERSION=x.y.zWhat it does:
- Creates an empty commit (controller doesn't have version files to update)
- Commits with message:
chore: release controller x.y.z - Creates Git tag:
controller/vx.y.z - Pushes commit and tag to
origin/main
GitHub Workflow:
- Triggers
.github/workflows/synapse-operator-release.yaml - Builds Docker image for multiple platforms (linux/amd64, linux/arm64)
- Builds binary artifacts for multiple architectures
- Creates GitHub release with artifacts
Example:
make release-controller VERSION=0.1.0Before releasing, ensure:
-
Working directory is clean:
git status
All changes should be committed before running a release.
-
You're on the main branch:
git checkout main git pull origin main
-
You have push permissions:
- Must be able to push to
origin/main - Must be able to create tags
- Must be able to push to
-
Version follows semantic versioning:
- Format:
MAJOR.MINOR.PATCH(e.g.,1.2.3) - Follow Semantic Versioning guidelines
- Format:
-
Prepare your release:
- Ensure all changes are committed
- Test your changes thoroughly
- Update CHANGELOG if maintained
-
Choose the appropriate release command:
- For Synapse application:
make release-synapse VERSION=x.y.z - For Helm chart:
make release-chart VERSION=x.y.z - For Controller:
make release-controller VERSION=x.y.z
- For Synapse application:
-
Verify the release:
- Check that the tag was created:
git tag -l - Check GitHub Actions for workflow execution
- Verify artifacts are published correctly
- Check that the tag was created:
- Synapse releases:
vx.y.z(e.g.,v0.1.0) - Chart releases:
chart/vx.y.z(e.g.,chart/v0.2.0) - Controller releases:
controller/vx.y.z(e.g.,controller/v0.1.0)
- MAJOR version: Incompatible API changes
- MINOR version: New functionality in a backwards compatible manner
- PATCH version: Backwards compatible bug fixes
- Ensure you're providing the VERSION parameter:
make release-synapse VERSION=x.y.z
- Commit or stash your changes before running a release
- Delete the tag locally:
git tag -d vx.y.z - Delete the tag remotely:
git push origin --delete vx.y.z - Then retry the release
- Check that the tag format matches the expected pattern
- Verify GitHub Actions is enabled for the repository
- Check workflow file conditions match the tag pattern
- All releases push to the
mainbranch - Releases are automated via GitHub Actions after tag creation
- Chart releases require the chart to be packaged correctly
- Controller releases create empty commits since there are no version files to update