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.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-devel/20200625133150.249134e9%40rovaniemi.

Reply via email to