Atlantis follows a monthly release cadence to provide regular, predictable updates while maintaining stability for users.
- Frequency: Once per month
- Timing: First week or last week of the month, but only once per month
- Release Day: Typically Tuesday or Wednesday to allow for weekend buffer
Atlantis follows Semantic Versioning (SemVer):
- Major releases (
x.0.0): Breaking changes - Minor releases (
0.x.0): Backward-compatible new features - Patch releases (
0.0.x): Bug fixes, security patches, documentation, dependency updates, and runtime image refreshes
- Main branch: Contains the latest development work
- Release branches: Created for major/minor releases, for example
release-0.44 - Hotfixes: Applied to both
mainand relevant release branches when an older release line also needs the fix
- Release Announcements: Posted on GitHub Releases and community channels
- Breaking Changes: Clearly documented in release notes and migration guides
- Security Updates: Communicated through security advisories when appropriate
A release is ready when:
- Tests: All required tests pass.
- Documentation: Documentation is updated for user-visible changes.
- Release notes: Release notes are current and reviewed.
- Critical bugs: No known critical bugs remain open for the release line.
- Security: Security scans pass.
- Performance: Benchmarks are acceptable for performance-sensitive changes.
In case of critical security vulnerabilities or severe bugs:
- Immediate Assessment: Evaluate severity and impact.
- Hotfix Development: Create a targeted fix.
- Expedited Testing: Focus validation on the affected behavior.
- Emergency Release: Release outside the normal cadence if necessary.
- Feature Requests: Submit early in the month for consideration.
- Bug Reports: Report immediately for faster resolution.
- Testing: Help test release candidates.
- Documentation: Contribute release notes and migration guidance.
For detailed information about contributing to Atlantis, see CONTRIBUTING.md.
-
Fetch the latest default branch, release branches, and tags:
git fetch origin --tags --prune \ +refs/heads/main:refs/remotes/origin/main \ '+refs/heads/release-*:refs/remotes/origin/release-*' -
Confirm the latest release and verify the new tag does not already exist:
gh release list --repo runatlantis/atlantis --limit 5 git ls-remote --tags origin refs/tags/vX.Y.Z
-
Choose the release target:
- For a major or minor release, create or update the release branch, for example
release-0.44. - For a patch on the current release line, release from
main. - For a patch on an older release line, release from that release branch and do not mark it as the latest release.
- For a major or minor release, create or update the release branch, for example
-
Review the commits since the previous release on the chosen target branch:
git log --first-parent --reverse --oneline vPREVIOUS..origin/TARGET_BRANCH
-
Choose the version increment:
- Use a major release for breaking changes.
- Use a minor release for backward-compatible new user-facing features.
- Use a patch release for fixes, security updates, documentation, dependency updates, and runtime image refreshes.
-
Verify GitHub Actions on the release target before publishing. At minimum, check the current
mainorrelease-*branch runs fortester,website,CodeQL,atlantis-image, andtesting-env-image. For releases frommain, also confirm the latest Scorecard run is passing.
- Start from GitHub generated notes for the chosen tag and previous tag.
- Curate the generated notes before publishing. PR labels can put changes in noisy or incorrect sections.
- Add a short Highlights section when the release includes important provider behavior, apply/plan safety changes, runtime image changes, security updates, or compatibility fixes.
- Keep contributor attribution and the full changelog link from the generated notes.
- Call out runtime image base changes explicitly, including Debian or Alpine base updates and notable pinned package updates.
Use the Highlights section for changes users should notice before scanning the full changelog. Keep it short, usually two to five bullets, and prefer concrete outcomes over PR titles. Good highlight candidates include:
- New or improved VCS hosting support, such as GitHub Enterprise Server compatibility.
- Apply, plan, policy-check, locking, or mergeability behavior changes.
- Runtime image changes, including Debian or Alpine image updates.
- Security fixes, fail-closed behavior, or dependency hardening.
- Operational fixes that reduce noisy failures, stuck plans, or incorrect commit statuses.
- Go to GitHub Releases and draft a new release, or use
gh release create. - Prefix the version with
v, for examplev0.44.1. - Use the tag as the release title.
- Set the target to the chosen release target branch or commit.
- Mark the release as latest only when it is the newest release on the current release line.
- Publish the release.
Example CLI flow:
gh release create vX.Y.Z \
--repo runatlantis/atlantis \
--target TARGET_BRANCH \
--title vX.Y.Z \
--notes-file release-notes.md \
--latestAfter publishing, verify the release itself, the tag, and the workflows triggered by the tag:
gh release view vX.Y.Z --repo runatlantis/atlantis
git ls-remote --tags origin refs/tags/vX.Y.Z
gh release list --repo runatlantis/atlantis --limit 5Confirm these workflows complete successfully:
.github/workflows/release.yml, which runs GoReleaser and uploads release assets..github/workflows/atlantis-image.yml, which publishes versioned andlatestimage tags for Alpine and Debian images.
After publishing an Atlantis release, check the official Helm chart in runatlantis/helm-charts:
- Update
charts/atlantis/Chart.yaml. - Set
appVersionto the new Atlantis release tag. - Bump the chart
versionfor the chart release. - Run chart documentation and lint checks.
- Open a separate pull request in
runatlantis/helm-charts.
Typical chart validation:
make docs
helm lint charts/atlantis
helm template atlantis charts/atlantis
git diff --checkAtlantis uses a cherry-pick-bot from Google. The bot assists in maintaining changes across release branches by cherry-picking merged pull requests into new pull requests.
Maintainers and core contributors can add a comment to a pull request:
/cherry-pick target-branch-nametarget-branch-name is the branch to cherry-pick to. The bot will cherry-pick the merged commit to a new branch created from the target branch and open a pull request.
The bot immediately tries to cherry-pick a merged pull request. On an unmerged pull request, it waits until merge. You can comment multiple times on a pull request for multiple release branches.
The bot can fail to cherry-pick if the feature branch history is not linear. In that case, manually cherry-pick the squashed merge commit from main to the release branch.
- Switch to the release branch intended for the fix.
- Run
git cherry-pick <sha>with the commit hash frommain. - Push the newly cherry-picked commit to the remote release branch.
For detailed information about past releases, see GitHub Releases.
This document is maintained by the Atlantis maintainers. For questions about the release process, please open an issue or contact the maintainers.