2022-06-30 22:27:24 +02:00
|
|
|
# Wagtail's release process
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Official releases
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
Release numbering works as follows:
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Versions are numbered in the form `A.B` or `A.B.C`.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- `A.B` is the _feature release_ version number. Each version will be mostly
|
|
|
|
backwards compatible with the previous release. Exceptions to this rule will
|
|
|
|
be listed in the release notes.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- `C` is the _patch release_ version number, which is incremented for bugfix
|
|
|
|
and security releases. These releases will be 100% backwards-compatible with
|
|
|
|
the previous patch release. The only exception is when a security or data
|
|
|
|
loss issue can't be fixed without breaking backwards-compatibility. If this
|
|
|
|
happens, the release notes will provide detailed upgrade instructions.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Before a new feature release, we'll make at least one release candidate
|
|
|
|
release. These are of the form `A.BrcN`, which means the
|
|
|
|
`Nth` release candidate of version `A.B`.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
In git, each Wagtail release will have a tag indicating its version number.
|
|
|
|
Additionally, each release series has its
|
2022-06-30 22:27:24 +02:00
|
|
|
own branch, called `stable/A.B.x`, and bugfix/security releases will be
|
2016-05-03 18:57:31 +02:00
|
|
|
issued from those branches.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
**Feature release**
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
Feature releases (A.B, A.B+1, etc.) happen every three months
|
|
|
|
-- see [release process](release-process) for details. These releases will contain new
|
|
|
|
features and improvements to existing features.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
**Patch release**
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
Patch releases (A.B.C, A.B.C+1, etc.) will be issued as needed, to fix
|
|
|
|
bugs and/or security issues.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
These releases will be 100% compatible with the associated feature release,
|
|
|
|
unless this is impossible for security reasons or to prevent data loss.
|
|
|
|
So the answer to "should I upgrade to the latest patch release?" will always
|
|
|
|
be "yes."
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
**Long-term support release**
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
Certain feature releases will be designated as long-term support (LTS)
|
|
|
|
releases. These releases will get security and data loss fixes applied for
|
|
|
|
a guaranteed period of time, typically six months.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Release cadence
|
|
|
|
|
|
|
|
Wagtail uses a loose form of [semantic versioning](https://semver.org/).
|
2016-05-03 18:57:31 +02:00
|
|
|
SemVer makes it easier to see at a glance how compatible releases are with each
|
|
|
|
other. It also helps to anticipate when compatibility shims will be removed.
|
|
|
|
It's not a pure form of SemVer as each feature release will continue to have a
|
|
|
|
few documented backwards incompatibilities where a deprecation path isn't
|
|
|
|
possible or not worth the cost.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Deprecation policy
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
A feature release may deprecate certain features from previous releases. If a
|
|
|
|
feature is deprecated in feature release A.B, it will continue to work in
|
|
|
|
the following version but raise warnings. Features deprecated in release A.B
|
|
|
|
will be removed in the A.B+2 release to ensure deprecations are done
|
|
|
|
over at least 2 feature releases.
|
|
|
|
|
|
|
|
So, for example, if we decided to start the deprecation of a function in
|
|
|
|
Wagtail 1.4:
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Wagtail 1.4 will contain a backwards-compatible replica of the function which
|
|
|
|
will raise a `RemovedInWagtail16Warning`.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Wagtail 1.5 will still contain the backwards-compatible replica.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Wagtail 1.6 will remove the feature outright.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
The warnings are silent by default. You can turn on display of these warnings
|
2022-06-30 22:27:24 +02:00
|
|
|
with the `python -Wd` option.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Supported versions
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
At any moment in time, Wagtail's developer team will support a set of releases to
|
|
|
|
varying levels.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- The current development `main` will get new features and bug fixes
|
|
|
|
requiring non-trivial refactoring.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Patches applied to the `main` branch must also be applied to the last feature
|
|
|
|
release branch, to be released in the next patch release of that feature
|
|
|
|
series, when they fix critical problems:
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Security issues.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Data loss bugs.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Crashing bugs.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Major functionality bugs in newly-introduced features.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Regressions from older versions of Wagtail.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
The rule of thumb is that fixes will be backported to the last feature
|
|
|
|
release for bugs that would have prevented a release in the first place
|
|
|
|
(release blockers).
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Security fixes and data loss bugs will be applied to the current `main`, the
|
|
|
|
last feature release branch, and any other supported long-term
|
|
|
|
support release branches.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Documentation fixes generally will be more freely backported to the last
|
|
|
|
release branch. That's because it's highly advantageous to have the docs for
|
|
|
|
the last release be up-to-date and correct, and the risk of introducing
|
|
|
|
regressions is much less of a concern.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
As a concrete example, consider a moment in time halfway between the release of
|
|
|
|
Wagtail 1.6 and 1.7. At this point in time:
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Features will be added to `main`, to be released as Wagtail 1.7.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Critical bug fixes will be applied to the `stable/1.6.x` branch, and
|
|
|
|
released as 1.6.1, 1.6.2, etc.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Security fixes and bug fixes for data loss issues will be applied to
|
|
|
|
`main` and to the `stable/1.6.x` and `stable/1.4.x` (LTS) branches.
|
|
|
|
They will trigger the release of `1.6.1`, `1.4.8`, etc.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Documentation fixes will be applied to `main`, and, if easily backported, to
|
|
|
|
the latest stable branch, `1.6.x`.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Supported versions of Django
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2016-05-06 19:05:01 +02:00
|
|
|
Each release of Wagtail declares which versions of Django it supports.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2016-05-06 19:05:01 +02:00
|
|
|
Typically, a new Wagtail feature release supports the last long-term support version and
|
|
|
|
all following versions of Django.
|
|
|
|
|
|
|
|
For example, consider a moment in time before release of Wagtail 1.5
|
|
|
|
and after the following releases:
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
- Django 1.8 (LTS)
|
|
|
|
- Django 1.9
|
|
|
|
- Wagtail 1.4 (LTS) - Released before Django 1.10 and supports Django 1.8 and 1.9
|
|
|
|
- Django 1.10
|
2016-05-06 19:05:01 +02:00
|
|
|
|
|
|
|
Wagtail 1.5 will support Django 1.8 (LTS), 1.9, 1.10.
|
|
|
|
Wagtail 1.4 will still support only Django 1.8 (LTS) and 1.9.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
(release-process)=
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
## Release process
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
Wagtail uses a [time-based release schedule](https://github.com/wagtail/wagtail/wiki/Release-schedule),
|
2019-06-19 15:30:11 +02:00
|
|
|
with feature releases every three months.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
After each feature release, the release manager will announce a timeline for
|
|
|
|
the next feature release.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
### Release cycle
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
Each release cycle consists of three parts:
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
#### Phase one: feature proposal
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
The first phase of the release process will include figuring out what major
|
|
|
|
features to include in the next version. This should include a good deal of
|
|
|
|
preliminary work on those features -- working code trumps grand design.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
#### Phase two: development
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
The second part of the release schedule is the "heads-down" working period.
|
|
|
|
Using the roadmap produced at the end of phase one, we'll all work very hard to
|
|
|
|
get everything on it done.
|
|
|
|
|
|
|
|
At the end of phase two, any unfinished features will be postponed until the
|
|
|
|
next release.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
At this point, the `stable/A.B.x` branch will be forked from `main`.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
#### Phase three: bugfixes
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
The last part of a release cycle is spent fixing bugs -- no new features will
|
|
|
|
be accepted during this time.
|
|
|
|
|
|
|
|
Once all known blocking bugs have been addressed, a release candidate will be
|
|
|
|
made available for testing. The final release will usually follow two weeks later,
|
|
|
|
although this period may be extended if the further release blockers are found.
|
|
|
|
|
|
|
|
During this phase, committers will be more and more conservative with
|
|
|
|
backports, to avoid introducing regressions. After the release candidate, only
|
|
|
|
release blockers and documentation fixes should be backported.
|
|
|
|
|
|
|
|
Developers should avoid adding any new translatable strings after the release
|
|
|
|
candidate - this ensures that translators have the full period between the release
|
|
|
|
candidate and the final release to bring translations up to date. Translations
|
|
|
|
will be re-imported immediately before the final release.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
In parallel to this phase, `main` can receive new features, to be released
|
|
|
|
in the `A.B+1` cycle.
|
2016-05-03 18:57:31 +02:00
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
### Bug-fix releases
|
2016-05-03 18:57:31 +02:00
|
|
|
|
|
|
|
After a feature release (e.g. A.B), the previous release will go into bugfix
|
|
|
|
mode.
|
|
|
|
|
2022-06-30 22:27:24 +02:00
|
|
|
The branch for the previous feature release (e.g. `stable/A.B-1.x`) will
|
|
|
|
include bugfixes. Critical bugs fixed on `main` must _also_ be fixed on the
|
2016-05-03 18:57:31 +02:00
|
|
|
bugfix branch; this means that commits need to cleanly separate bug fixes from
|
2022-06-30 22:27:24 +02:00
|
|
|
feature additions. The developer who commits a fix to `main` will be
|
2019-06-19 10:24:03 +02:00
|
|
|
responsible for also applying the fix to the current bugfix branch.
|