This guide explains how to create a new release of EasyHAProxy, including Docker images, Helm charts, and documentation updates.
- Overview
- Prerequisites
- Release Process
- Automated Release (Recommended)
- Manual Release
- Helm Chart Release
- Post-Release Checklist
- Troubleshooting
The EasyHAProxy release process uses GitHub Actions to automatically:
- Run tests
- Build multi-architecture Docker images (amd64, arm64)
- Publish Docker images to Docker Hub
- Update Helm chart versions
- Publish Helm charts
- Update documentation
Before creating a release, ensure you have:
-
Permissions:
- Write access to the GitHub repository
- Docker Hub credentials (for maintainers)
- Access to GitHub secrets (for CI/CD)
-
Local Setup:
- Git configured with your credentials
- Docker installed (for local testing)
- Python 3.x with pytest (for running tests)
-
Repository Secrets (for maintainers):
DOCKER_REGISTRY: Docker Hub registry URLDOCKER_REGISTRY_USER: Docker Hub usernameDOCKER_REGISTRY_TOKEN: Docker Hub access tokenDOC_TOKEN: GitHub token for documentation updates
EasyHAProxy follows Semantic Versioning:
- MAJOR.MINOR.PATCH (e.g.,
4.6.0)- MAJOR: Breaking changes or major architectural updates
- MINOR: New features, plugin additions, backward-compatible changes
- PATCH: Bug fixes, documentation updates, minor improvements
Current Version: 6.0.1 (as of Chart.yaml)
The automated release process is triggered by pushing a semantic version tag.
-
Ensure all changes are committed and pushed:
git status git add . git commit -m "Prepare release X.Y.Z" git push origin master
-
Run tests locally:
cd src/ pytest tests/ -vv -
Build and test Docker image locally:
make build # Or manually: docker build -t byjg/easy-haproxy:local -f deploy/docker/Dockerfile .
-
Run the bump script from the repo root:
./scripts/bump-version.sh 5.0.0
This updates image tags, docs, Helm chart
appVersion, and bumps the chart version patch. -
Review and commit the changes on a branch:
git status git add . git commit -m "Bump version to 5.0.0" git push origin <your-branch>
-
Open a PR to
masterand merge it. Branch protection requires merging through a PR; CI/CD no longer pushes directly. -
Tag from
masterafter the PR merges:git checkout master git pull git tag 5.0.0 git push origin 5.0.0
When you push a semantic version tag, GitHub Actions will:
-
Run Tests (
Testjob):- Install Python dependencies
- Run pytest on all tests
-
Build Multi-Arch Docker Images (
Buildjob):- Build for
linux/amd64andlinux/arm64 - Tag image with version number (e.g.,
byjg/easy-haproxy:4.7.0) - Push to Docker Hub
- Build for
-
Verify Versions (
Helmjob):- Ensures the repository already contains the tag version via
./scripts/bump-version.sh --verify <tag> - Fails fast if the repo was not prepared before tagging (no auto-commits)
- Ensures the repository already contains the tag version via
-
Publish Helm Chart (
HelmDeployjob):- Package Helm chart
- Publish to Helm repository at https://opensource.byjg.com/helm/
-
Update Documentation (
Documentationjob):- Publish documentation updates
-
Check Docker Hub:
docker pull byjg/easy-haproxy:4.7.0 docker images | grep easy-haproxy -
Verify Helm chart:
helm repo add byjg https://opensource.byjg.com/helm helm repo update helm search repo easyhaproxy
-
Create GitHub Release:
- Go to: https://github.com/byjg/docker-easy-haproxy/releases/new
- Select the tag you created
- Generate release notes
- Add highlights of changes
- Publish release
For emergency releases or when CI/CD is unavailable.
-
Set up environment:
export DOCKER_USERNAME=your-username export DOCKER_PASSWORD=your-token export DOCKER_REGISTRY=docker.io export VERSIONS="4.7.0"
-
Run multi-arch build:
./build-multiarch.sh
This script uses
buildahandpodmanto create multi-architecture images.
-
Update Chart.yaml:
cd helm/easyhaproxy/ # Update appVersion sed -i 's/appVersion: ".*"/appVersion: "4.7.0"/' Chart.yaml # Increment chart version # From: version: 0.1.9 # To: version: 0.1.10 nano Chart.yaml
-
Package and publish Helm chart:
helm package helm/easyhaproxy/ # Follow your Helm repository's publishing process
The Helm chart version is automatically managed by CI/CD, but you can manually control it:
-
Chart version (
versionin Chart.yaml):- Auto-incremented by CI/CD (patch version)
- Format:
0.1.Xwhere X increments with each Docker release - Manual override: Edit Chart.yaml before tagging
-
App version (
appVersionin Chart.yaml):- Set to Docker image version (e.g.,
4.7.0) - Automatically updated by CI/CD
- Set to Docker image version (e.g.,
- Chart Version:
0.1.9 - App Version:
4.6.0 - Repository: https://opensource.byjg.com/helm/
After a successful release:
- Verify Docker image on Docker Hub
- Test Docker image:
docker run byjg/easy-haproxy:X.Y.Z --version - Verify Helm chart availability
- Test Helm installation
- Create GitHub Release with changelog
- Update project README if needed
- Announce release (if major/minor)
- Update dependent projects (if applicable)
Problem: GitHub Actions build job fails
Solutions:
- Check test output in GitHub Actions logs
- Run tests locally:
cd src/ && pytest tests/ -vv - Fix failing tests and push changes
- Delete and recreate tag:
git tag -d 4.7.0 git push origin :refs/tags/4.7.0 git tag 4.7.0 git push origin 4.7.0
Problem: Cannot push to Docker Hub
Solutions:
- Verify Docker Hub credentials in GitHub secrets
- Check Docker Hub token permissions
- Ensure image name matches:
byjg/easy-haproxy
Problem: Helm chart doesn't appear in repository
Solutions:
- Check
HelmDeployjob logs in GitHub Actions - Verify
DOC_TOKENsecret is valid - Wait a few minutes for chart to propagate
- Clear Helm cache:
helm repo update
Problem: Version references not updated in docs/examples
Solutions:
- Check
Helmjob logs for sed command errors - Verify commit was pushed with
[skip ci]message - Manually update version references if needed:
find examples -type f -name '*.yml' -exec sed -i "s/\(byjg\/easy-haproxy:\)[0-9\.]*/\1X.Y.Z/g" {} \;
Problem: ARM64 build fails
Solutions:
- Verify QEMU is set up in GitHub Actions
- Check build logs for architecture-specific errors
- Test locally with Docker Buildx:
docker buildx create --use docker buildx build --platform linux/amd64,linux/arm64 -t test .
# Local build
make build
# Run tests
cd src/ && pytest tests/ -vv
# Create release tag
git tag 4.7.0 && git push origin 4.7.0
# Pull specific version
docker pull byjg/easy-haproxy:4.7.0
# Install Helm chart
helm install easyhaproxy byjg/easyhaproxy --version 0.1.10
# Check Helm chart info
helm show chart byjg/easyhaproxy- GitHub Repository: https://github.com/byjg/docker-easy-haproxy
- Docker Hub: https://hub.docker.com/r/byjg/easy-haproxy
- Helm Repository: https://opensource.byjg.com/helm/
- Documentation: https://opensource.byjg.com/devops/docker-easy-haproxy/
- GitHub Actions: https://github.com/byjg/docker-easy-haproxy/actions
| Version | Release Date | Type | Highlights |
|---|---|---|---|
| 6.0.1 | 2026-02-23 | Patch | HAProxy dashboard, real-time monitoring dashboard with live traffic charts, ACME e2e test fixes |
| 6.0.0 | 2026-XX-XX | Major | Python module refactoring (one-class-per-file), IngressClassName support (spec.ingressClassName + deprecated annotation fallback), modernized build system (uv/pyproject.toml), improved version management and release tooling, GitHub Actions workflow_dispatch push control |
| 5.0.0 | 2025-12-04 | Major | Plugin framework (builtin plugins: JWT, FastCGI, Cloudflare, IP whitelist, deny pages, cleanup), docs restructure, examples refreshed |
| 4.6.0 | 2024-11-27 | Minor | FastCGI plugin, JWT enhancements |
| 4.5.0 | 2024-XX-XX | Minor | Previous release |
| ... | ... | ... | ... |
Need Help?
- Open an issue: https://github.com/byjg/docker-easy-haproxy/issues
- Check documentation: https://opensource.byjg.com/devops/docker-easy-haproxy/