The Plone release process

Release process for Plone packages

To keep the Plone software stack maintainable, the Python egg release process must be automated to high degree. This happens by enforcing Python packaging best practices and then making automated releases using the zest.releaser tool. This is extended with Plone coredev specific features by plone.releaser <https://github.com/plone/plone.releaser>.

  • Anyone with necessary PyPi permissions must be able to make a new release by running the fullrelease command

... which includes ...

  • All releases must be hosted on PyPi
  • All versions must be tagged at version control
  • Each package must have README.rst with links to the version control repository and issue tracker
  • CHANGES.rst (docs/HISTORY.rst respectively .txt in some packages) must be always up-to-date and must contain list of functional changes which may affect package users.
  • CHANGES.rst must contain release dates
  • README.rst and CHANGES.rst 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 the zest.pocompile add-on, which should be installed together with zest.releaser.
  • .gitignore and MANIFEST.in must reflect the files going to egg (must include page template, po files)

More information:

Special packages

The Plone Release Team releases the core Plone packages. Several others also have the rights to release individual packages on https://pypi.python.org. 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, and plone.app.upgrade:
Please leave these to the release manager, Eric Steele.
plone.app.locales:
Please leave this to the i18n team lead, Vincent Fretin.

Plone core release process checklist

  1. Check Jenkins Status

Check latest Plone coredev job on jenkins.plone.org, it should be green, if it is not, fix the problem first.

  1. Check out buildout.coredev
git clone git@github.com:plone/buildout.coredev.git
cd buildout.coredev
git checkout 5.0
python bootstrap.py
bin/buildout -c release.cfg

Note that release.cfg installs plone.releaser which hooks into zest.releaser and adds a bin/manage script.

  1. Check Packages for Updates

Check all packages for updates, add to/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.

  1. Check packages individually

Use the bin/fullrelease script from the core development buildout. This includes extra checks that we have added in plone.releaser. It guides you through all the next steps.

  1. Check changelog

    Check if CHANGES.rst is up-to-date, all changes since the last release should be included, a Fixes and/or New header should be included, with the relevant changes under it. Upgrade notes are best placed here as well. Compare git log HEAD...<LAST_RELEASE_TAG> with CHANGES.rst. Or from zest.releaser: lasttaglog <optional tag if not latest>.

  2. Run pyroma

  3. Run check-manifest

  4. Check package “best practices” (README.rst, CHANGES.rst, src directory)

  • Check if version in setup.py is correct and follows our versioning best practice
  1. Make a release (zest.releaser: bin/fullrelease)
  2. Remove packages from auto-checkout section in checkouts.cfg and update versions.cfg.
  1. Make sure plone.app.upgrade contains an upgrade step for the future Plone release.
  2. Update CMFPlone version in profiles/default/metadata.xml
  3. Write an email to the translation team, asking them to do a plone.app.locales release.
  4. Ask Rok to make a plone.app.widgets release (TODO!)
  5. Create a pending release (directory) on dist.plone.org
  1. Copy all core packages there.
  2. Possibly make an alpha/beta release of CMFPlone.
  3. Copy the versions.cfg file from coredev there.
  1. Write an email to the Plone developers list announcing a pending release.
  2. Inform the QA team about a new pending release.
  3. Update plone.app.locales version.
  4. Make final release on dist.plone.org (remove “-pending”)
  5. Update the “-latest” link on dist.plone.org
  6. Create a unified changelog
bin/manage changelog
  1. Create new release on launchpad (https://launchpad.net/plone/)
  2. Create release page on http://plone.org/products/plone/releases
  3. Send links to installers list (plone-installers@lists.sourceforge.net <mailto:plone-installers@lists.sourceforge.net>)
  4. Wait for installers to be uploaded to Launchpad, link on plone.org release page
  5. Mark release page as “final” (launchpad?)
  1. Update PloneSoftwareCenter pointer to the newest release, so that it’s linked from the homepage
  2. Send out announcement to plone-announce
  3. Update #plone topic