Plone release process#
This chapter describes the process to release Plone and its packages.
Release process for Plone packages#
To keep the Plone software stack maintainable, the Python egg release process must be automated to a high degree.
This happens by enforcing Python packaging best practices, and then making automated releases using zest.releaser
.
Plone coredev specific features extend on that using plone.releaser
.
Anyone with necessary PyPI permissions must be able to make a new release by running the fullrelease
command.
This command includes the following requirements.
Note
All files mentioned in this list may be written in Markdown or reStructuredText and have the appropriate file name suffix.
All releases must be hosted on PyPI.
All versions must be tagged in version control.
Each package must have a
README
file with links to the version control repository and issue tracker.CHANGES
(ordocs/HISTORY
) must be always up-to-date and must contain list of functional changes which may affect package users.CHANGES
must contain release dates.README
andCHANGES
must be visible on PyPI.Released eggs must contain generated gettext
.mo
files, but these files must not be committed to the repository. The.mo
files can be created with thezest.pocompile
add-on, which should be installed together withzest.releaser
..gitignore
andMANIFEST.in
must reflect the files going in to the package (must include page template and.po
files).
Special packages#
The Plone Release Team releases the core Plone packages. Several other people also have the rights to release individual packages on PyPI. If you have those rights on your account, you should feel free to make releases.
Some packages need special care, or should be done only by specific people, as they know what they are doing. These are:
Products.CMFPlone
,Plone
, andplone.app.upgrade
Please leave these to the release managers, Eric Steele and Maurits van Rees.
plone.app.locales
Please leave this to the i18n team lead, Mikel Larreategi
@erral
.plone.staticresources
,mockup
,plonetheme.barceloneta
,plone.classicui
:Please leave this to the Classic UI team, especially Peter Mathis
@petschki
, Johannes Raggam@thet
, and Maik Derstappen@MrTango
.plone.restapi
andplone.volto
:Please leave these to Timo Stollenwerk
@tisto
or David Glick@davisagli
.
Plone core release process checklist#
Check Jenkins status. Check the latest Plone coredev job on Jenkins. It should be green, but if it is not, fix the problem first.
Clone
buildout.coredev
, then check out and build the version to be released.git clone git@github.com:plone/buildout.coredev.git cd buildout.coredev git checkout 6.1 ./bootstrap.sh bin/buildout -c buildout.cfg
Check packages for updates. Add to or remove from
checkouts.cfg
accordingly. This script may help:bin/manage report --interactive
This step should not be needed, because we do the check for every single commit, but people may still have forgotten to add a package to the
checkouts.cfg
file.Check packages individually.
Use the
bin/fullrelease
script from the core development buildout. This includes extra checks that we have added inplone.releaser
. It guides you through all the next steps.Check changelog. Check if
CHANGES
is up-to-date. All changes since the last release should be included. A "Fixes" or "New" header should be included, with the relevant changes under it. Upgrade notes are best placed here as well. Comparegit log HEAD...<LAST_RELEASE_TAG>
withCHANGES
, or fromzest.releaser
use the commandlasttaglog <optional tag if not latest>
.Run pyroma.
Run check-manifest.
Check package "best practices" (
README
,CHANGES
,src
directory).Check if the version in
setup.py
is correct and follows our versioning best practice.Make a release with
zest.releaser
:bin/fullrelease
.Remove packages from the
auto-checkout
section incheckouts.cfg
, and updateversions.cfg
.
Make sure
plone.app.upgrade
contains an upgrade step for the future Plone release.Update CMFPlone version in
profiles/default/metadata.xml
.Create an issue in collective/plone.app.locales#issues to ask the i18n team lead
@erral
to do aplone.app.locales
release.Create a pending release (directory) on dist.plone.org.
Copy all core packages there.
Possibly make an alpha or beta release of CMFPlone.
Copy the
versions.cfg
file from coredev to there.
Write an email to the Plone developers list announcing a pending release.
Create a post on the Plone Community Forum announcing a pending release.
Update
plone.app.locales
version.Create a unified changelog.
bin/manage changelog
Make the final release on dist.plone.org (remove "-pending")
Update the "-latest" link on dist.plone.org.
For Plone 5.x versions only, create the new release on Launchpad.
Create a release page on plone.org
Wait for installers to be uploaded to Launchpad, with a link to the plone.org release page.
Publish release page on plone.org.
Update plone.org homepage links to point to the new release.
Send out announcement to the plone-announce email distribution list for the final release.
Create a post on the Plone Community Forum announcing the final release.
Ask the security team to update the Hotfixes page in the configuration control panel.