This information can also be found in sticky locked issues in the
collection GitHub repositories:
https://github.com/ansible-collections/community.general/issues/582
https://github.com/ansible-collections/community.network/issues/81
## Introduction
This mail describes *how* and *when* community.general and
community.network are released. Updates to this, as well information on
planned releases, is added to the above issues. Please subscribe to
them to receive regular updates.
## Next release
1.0.0 (last week of July 2020)
## Releasing schedule for major and minor versions
- 2020-06-20: 0.2.0 (a couple of days after ansible-base 2.10 beta 1 is
out; released from `master` branch)
- last week of 2020-07: 1.0.0 **major release**
From then on:
* release minor versions every two months
* major versions every 6 months.
The precise dates will be announced on time. Before Ansible releases we
might introduce additional minor releases to fix issues.
- (maybe 2020-08-xx: 1.1.0 - around ansible-base 2.10 final release; if
we release 1.1.0 then, the next minor versions will get adjusted)
- 2020-09-xx: 1.1.0
- 2020-11-xx: 1.2.0
- 2021-01-xx: 2.0.0 **major release**
- mid of 2021: 3.0.0 **major release**
- beginning of 2022: 4.0.0 **major release**
- mid of 2022: 5.0.0 **major release**
- ...
If no new commit has been merged for a minor release, it **must** be
skipped. Major versions **must not** be skipped.
The schedule for minor versions might be adjusted in the future (maybe
once per month, maybe something else). The release schedule for patch
versions (see below) would be adjusted.
## Releasing schedule for patch versions
- Patch versions `x.y.z` until the last minor release of a major
release branch will only be released when necessary. The intended
frequency is *never*, they are reserved for packaging failures, or
fixing major breakage / security problems.
- Once the last minor release of a major release branch (usually
`x.2.0`, generally `x.Y.0`) has been released, there will be bugfix
releases `x.Y.z`.
- These releases will happen every two months and when necessary.
## Versioning
- `galaxy.yml` in the `master` branch will always contain the version
of the **next** major or minor release. It will be updated right after
a release.
- `version_added` needs to be used for every new feature and
module/plugin, and needs to coincide with the next minor/major release
version. (This will eventually be enforced by CI.)
## Branching
- Releasing minor and major releases is done from `stable-x` branches.
- Shortly (usually a few hours) before a new major release,
`stable-x` is branched.
- New features can be backported to the current `stable-x` release
branch after `x.0.0`, and until the last minor release for `stable-x`
has been released.
- Once a new major version is released, there will be no more minor
releases for previous `stable-x` branches.
- From then on, only bugfixes are allowed for ~6 months (backporting
to the current two major releases).
- After that, only major bugfixes security fixes are allowed for
another ~12 months (backporting to the current three major releases).
- New features **must not break backwards compatibility**!
- Backporting process:
- Until `x.2.0`, maintainers can merge backports themselves via bot.
The bot will hopefully also allow to create backports automatically (if
possible without conflicts). (We hope that they know the rules: no
breaking of backwards compatibility!)
- From `x.2.0` on, only RM will merge backports.
## Deprecation
- Deprecations are done by version number (not by date).
- New deprecations can be added during every minor release, under the
condition that they **do not break backwards compatibility**.
- Deprecations are expected to have a deprecation cycle of at least 2
major versions (i.e. ~1 year). Maintainers can use a longer deprecation
cycle if they want to support the old code for that long.
## Changelogs
- Every change that does not only affect docs or tests must have a
changelog fragment.
- Exception: fixing/extending a feature that already has a changelog
fragment and has not yet been released. Such PRs **must** always link
to the original PR(s) they update.
- Use your common sense!
- (This might change later. The `trivial` category should then be
used to document changes which are not important enough to end up in
the text version of the changelog.)
- Fragments must not be added for new module PRs and new plugin PRs.
The only exception are test and filter plugins: these are not
automatically documented yet.
- The `(x+1).0.0` changelog continues the `x.0.0` changelog.
- A `x.y.0` changelog with `y > 0` is not part of a changelog of a
later `X.*.*` (with `X > x`) or `x,Y,*` (with `Y > y`) release.
- A `x.y.z` changelog with `z > 0` is not part of a changelog of a
later `(x+1).*.*` or `x.Y.z` (with `Y > y`) release.
- Since everything adding to the minor/patch changelogs are
backports, the same changelog fragments of these minor/patch
releases will be in the next major release's changelog. (This is the
same behavior as in ansible/ansible.)
- Changelogs do not contain previous major releases, and only use the
`ancestor` feature (in `changelogs/changelog.yaml`) to point to the
previous major release.
- Changelog fragments are removed after a release is made.