# Ansible Release Management: Cadence, Versioning, and Process
Ansible now maintains two coordinated release streams: **ansible-core** (the engine and core modules) and the **Ansible Community Package** (the Ansible 2.10+ “umbrella” package that bundles ansible-core plus Collections). These run on different versioning schemes and lifecycles.
The community package adopted **Semantic Versioning** at 2.10 (with versions like `3.0.0`, `4.0.0`, etc.), whereas **ansible-core** continues the classic `X.Y.Z` numbering inherited from Ansible 2.9 and before.
- Major **ansible-core** releases (the `Y` in `X.Y.Z`) occur roughly twice per year, and are **not guaranteed backward-compatible** to the previous major.
- Community-package releases then follow each new ansible-core, bundling the latest compatible Collections.
---
## Release Cycle
The release cycle works roughly as follows:
1. Cut a new ansible-core major (e.g., `2.11`, `2.12`, …).
- At this point, the new core and the two previous core majors enter a **maintenance phase**.
2. Impose a freeze on new Collection versions for the community package.
3. Produce release candidate(s) for the Ansible community package.
4. Publish the new community major (e.g., **Ansible 4.0.0** on **ansible-core 2.11**).
- After this, only the newest community major is supported.
In parallel:
- Regular **patch releases** happen about every four weeks.
- Security/bugfix patches are provided for the last three ansible-core majors.
- Minor point releases are published for the current community package.
-> Example: After **Ansible 4.0.0** (community) is released, only `4.x` will get updates. Older `3.x` becomes **EOL**. Occasionally, a final maintenance release may be issued for an EOL version.
---
## Versioning Rules
- **Community Package** → uses **strict semver** (`major.minor.patch`)
- Minor bumps only introduce backwards-compatible Collection updates.
- **ansible-core** → uses classic `X.Y.Z`
- `X` = internal architecture (e.g., 1 vs 2)
- `Y` = release number (not guaranteed compatible to previous Y).
Patch (`Z`) releases on both streams carry only **bug and security fixes**.
- ansible-core patches follow a **fixed 4-week schedule**.
- Each new ansible-core release also brings rolling support for the latest Python versions, while older versions are phased out.
---
## Release Process
The release process is **highly automated** but coordinated across multiple components:
- **[ansible-build-data](https://github.com/ansible-community/ansible-build-data)** → central repo tracking:
- Included Collections (`ansible.in` list)
- Release dates
- Blocker issues
- Release engineers use:
- **antsibull-build** (to assemble the community package from Collections + ansible-core)
- **antsibull-changelog** (to generate changelogs from repo fragments)
- Release artifacts:
- Built as `ansible-x.y.z` wheels and tarballs
- Uploaded to **PyPI** via `twine`
- Git tags pushed to repos
- Announcements:
- Posted on the **Ansible Forum (News & Announcements)** and **Matrix** (via “Bullhorn” bot).
- Documentation (ansible-documentation repo) and **Porting Guides** updated in lockstep.
---
## Execution Environment (EE) Images
The **Execution Environment (EE) images** follow a cadence aligned with ansible-core:
- Two community EE images are published:
- `community-ee-minimal` → only ansible-core
- `community-ee-base` → ansible-core + a small set of core Collections (e.g., `ansible.posix`, `ansible.utils`, `ansible.windows`).
- These are **Fedora-based container images**, versioned by included ansible-core version (e.g., `2.18.9-1` contained ansible-core `2.18.9`).
- Each EE release announcement includes:
- Fedora base image
- ansible-core version
- Collection versions
- Image digests
- `docker pull` / `podman pull` commands for GHCR.io tags.
- EE images are rebuilt whenever a new ansible-core is released, and announcements are posted to the Ansible Forum.
---
## Communication
Communication is a **key pillar** of the release process:
- Public Forum → especially *News & Announcements*
- Matrix chat rooms → `#release-management`, `#community`, etc.
- Docs → Official **Release and Maintenance** documentation.
- Each major release has a **roadmap** and **porting guide**
In short, **ansible-core** and the **Ansible Community Package** are released on **synchronized but distinct cadences**, with clear versioning rules and automated tooling (**antsibull-build**, **antsibull-changelog**, **ansible-build-data**) tying everything together.
---
## Sources
- [Releases and Maintenance — Ansible Community Docs](https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html)
- [ansible-build-data repo](https://github.com/ansible-community/ansible-build-data)
- [Manual Release Process](https://ansible.readthedocs.io/projects/ansible-build-data/release-process/)
- [antsibull-changelog repo](https://github.com/ansible-community/antsibull-changelog)
- [EE Release Announcement 2.18.9-1](https://forum.ansible.com/t/release-announcement-ansible-community-execution-environment-base-and-minimal-2-18-9-1/44478)
- [EE Images Availability Guide](https://forum.ansible.com/t/execution-environments-getting-started-guide-community-ee-images-availability/1341)
- [EE Release Announcement 2.19.1-1](https://forum.ansible.com/t/release-announcement-ansible-community-execution-environment-base-and-minimal-2-19-1-1-latest/44479)
---
✍️ [*Abhay Dandge*](https://www.linkedin.com/in/abhaydandge/)