===============
Release process
===============

The document describes the technical aspect of making a flashrom release,
and it assumes that the team of active core maintainers is in agreement to commence the process.

To go through the process, at least two maintainers are needed to be closely involved,
because it includes sending and approving patches in Gerrit.

Set up the timeline and announce on the mailing list
====================================================

Decide on the bug-fixing and testing window (3-4 weeks), decide exact dates of start and end of the window,
and announce it on the mailing list. Ideally make an announcement a few weeks in advance.

During the testing and bug-fixing window only bug fixes are merged, and no new features are added.
Typically it's fine to push new features for review, and reviews are fine too,
but merging new features will be delayed until the release is done.
*This should be very clearly explained in the announcement.*

Start testing and bug-fixing window
===================================

* Double-check and merge all the patches that are fully ready (see also :ref:`merge-checklist`)

* Update VERSION file to first release candidate. The name pattern is: ``v{version_number}-rc{rc_number}``.

  * As an example, the version name of the first release candidate can be ``v1.4.0-rc1``.
  * To update the VERSION file, push a patch to Gerrit, and another maintainer should review and approve.

* After submitting the change to the VERSION file, tag this commit. Tag name should be the same as
  version name, for example above ``v1.4.0-rc1``.

* Write an announcement on the mailing list. Be very clear about:

  * start and end date of the window, and what does it mean
  * any help with :ref:`building-and-testing` is very much appreciated

**From this moment and until the release cut, the highest priority is for building and testing on various environments, and bug-fixing.**

Release candidates
==================

If any bugs are found and fixed (or reverted), then the second, or third release candidate will be needed.
The process is the same as with the first candidate:

* Update the VERSION file, and submit this
* Tag the commit which updates the VERSION file
* Post an announcement on mailing list

Release notes
=============

During the time in-between releases, ideally most updates are accumulated in the doc :doc:`/release_notes/devel`.
While this doc is helpful, it is not a replacement for a human to go through all development history
since the previous release and prepare release notes. One maintainer is preparing the release notes
and sending them for review, and at least one other maintainer needs to review that (it can be more than one reviewer).

Ideally the patch with release notes should be prepared, reviewed and approved before the release cut,
so that it can be published by the time of final release announcement.

For inspiration to write release notes, have a look at prior art :doc:`/release_notes/index`.

There is one section in release notes, Download, which is not possible to complete before the actual release cut.
Leave it as TODO, but complete the rest.

Cut the release
===============

Wait for at least a week (or two) since the last release candidate. if everything is alright:

* Submit the release notes, and in the same patch restart :doc:`/release_notes/devel` document.
  This way everyone who is syncing the repository by the release tag will have release notes in the tree.

* Update VERSION file to release version, name pattern is: ``v{version_name}``
  (for example, it can be ``v1.4.0``), and submit this.

* Tag the commit which updates the VERSION file. Tag name should be the same as version name,
  for example above ``v1.4.0``.

* Create the tarball:

  * At the moment of writing, the command we use ``meson dist --include-subprojects``,
    more details are in `meson docs <https://mesonbuild.com/Creating-releases.html#creating-releases>`_.
  * Check that tarball name follows the pattern ``flashrom-v{version_name}.tar.xz``, for example ``flashrom-v1.4.0.tar.xz``.

* Sign the tarball, and upload to the server together with the signature.

* Update release notes with the link to download tarball, signature, and fingerprint. Submit this and check that final release notes are published on the website.

* Write the release announcement, don't forget to:

  * Link to download the tarball, signature and fingerprint.
  * Say thank you to everyone who is helping and supporting flashrom
  * Add link to published release notes on the website

Start the next cycle of development
===================================

* Update the VERSION file to the development version. For example, the name pattern is: ``v{version_name}-devel``,
  for example ``v1.5.0-devel``, and submit this.

* Submit all the patches that have been ready and waiting.

* Celebrate :)
