The Problem
Production deployments need more ceremony than staging, but that doesn’t mean they should be painful:- Manual release processes: Someone maintains a changelog, bumps versions, creates tags, and hopes they didn’t miss anything.
- Changelog drift: The changelog is always out of date because updating it is tedious and easy to forget.
- Version confusion: What’s actually in production? What commits are included in v1.2.3? Good luck piecing that together from Git history.
- Risky deployments: Without a clear release boundary, production deployments become “let’s deploy main and hope for the best.”
How Kube Starter Kit Addresses This
I’ve integrated release-please to automate release management with a simple, controlled workflow: Automatic release PRs: As commits land on main, release-please maintains a PR that accumulates changes and auto-generates a changelog. Conventional commits drive versioning: Commit messages determine version bumps.fix: bumps patch, feat: bumps minor, feat!: or BREAKING CHANGE bumps major.
Merge to release: When you’re ready for production, merge the release PR. That’s it.
Production deployment on release: Merging the release PR triggers the production build and deployment pipeline, rendering manifests for production and letting ArgoCD sync.
What’s Included
Release-Please Configuration
How It Works
1
Commits land on main
Developers merge PRs with conventional commit messages (
feat:, fix:, chore:, etc.).2
Release PR updates
release-please automatically updates (or creates) a release PR that includes all pending changes with a generated changelog.
3
Review the release
The release PR shows exactly what will be released: version bump, changelog entries, and all included commits.
4
Merge when ready
Merging the release PR creates a Git tag and GitHub release.
5
Production pipeline triggers
The release triggers the production build workflow, which renders manifests and deploys to production via ArgoCD.
Conventional Commits
The versioning is driven by commit message prefixes:
Note:
chore: commits bump the patch version to ensure pre-release image tags (e.g., 1.2.4-rc0001-g4b5d2e7) always reflect the upcoming release version.
Release PR Example
When commits accumulate, the release PR looks like:Production Deployment Flow
Multi-Application Releases
In a monorepo with multiple applications, each application has its own version and receives separate Git tags (e.g.,services/go-backend@1.2.3). However, release-please groups all pending releases into a single PR.
This gives you:
- Independent versioning: Each application’s version reflects its own changes
- Coordinated releases: One PR to review and merge for all applications ready to release
- Simpler workflow: No need to manage multiple release PRs
Key Design Decisions
Workflow Summary
This separation gives you fast iteration on staging while maintaining controlled, auditable production releases.