[doc] Add info about backport policies
Change-Id: Ic2ac2a2b3356f7d98cc5c17da925f90739b4c061
This commit is contained in:
75
doc/source/contributor/backporting.rst
Normal file
75
doc/source/contributor/backporting.rst
Normal file
@@ -0,0 +1,75 @@
|
||||
=================
|
||||
Backporting a Fix
|
||||
=================
|
||||
|
||||
**tl;dr:** Only propose a cherry pick from a *merged* commit, even if you
|
||||
want to backport the patch to multiple stable branches. Doing them all at
|
||||
once doesn't speed anything up, because the cinder-stable-maint team will
|
||||
**not** approve a backport to branch *n*-1 until the patch has been merged
|
||||
into branch *n*.
|
||||
|
||||
From time to time, you may find a bug that's been fixed in master, and you'd
|
||||
like to have that fix in the release you're currently using (for example,
|
||||
Wallaby). What you want to do is propose a **backport** of the fix.
|
||||
|
||||
.. note::
|
||||
The Cinder project observes the OpenStack `Stable Branch Policy
|
||||
<https://docs.openstack.org/project-team-guide/stable-branches.html>`_.
|
||||
Thus, not every change in master is backportable to the stable branches.
|
||||
In particular, features are *never* backportable. A really complicated
|
||||
bugfix may not be backportable if what it fixes is low-occurrence and
|
||||
there's a high risk that it may cause a regression elsewhere in the
|
||||
software.
|
||||
|
||||
How can you tell? Ask in the ``#openstack-cinder`` channel on IRC
|
||||
or during the open discussion part of the weekly Cinder team meeting.
|
||||
|
||||
Since we use git for source code version control, backporting is done by
|
||||
*cherry-picking* a change that has already been merged into one branch into
|
||||
another branch. The gerrit web interface makes it really easy to do this.
|
||||
In fact, maybe *too* easy. Here are some guidelines:
|
||||
|
||||
* Before you cherry-pick a change, make sure it has already **merged**
|
||||
to master. If the change hasn't merged yet, it may require further
|
||||
revision, and the commit you've cherry-picked won't be the correct
|
||||
commit to backport.
|
||||
|
||||
* Backports must be done in *reverse chronological order*. Since
|
||||
OpenStack releases are named alphabetically, this means reverse
|
||||
alphabetical order: ``stable/yoga``, ``stable/xena``, ``stable/wallaby``,
|
||||
etc.
|
||||
|
||||
* The cherry-pick must have **merged** into the closest most recent branch
|
||||
before it will be considered for a branch, that is, a cherry-pick to
|
||||
``stable/xena`` will **not** be considered until it has merged into
|
||||
``stable/yoga`` first.
|
||||
|
||||
* This is because sometimes a backport requires revision along the
|
||||
way. For example, different OpenStack releases support different
|
||||
versions of Python. So if a fix uses a language feature introduced
|
||||
in Python 3.8, it will merge just fine into current master (during zed
|
||||
development), but it will not pass unit tests in ``stable/yoga``
|
||||
(which supports Python 3.6). Likewise, if you already cherry-picked
|
||||
the patch from master directly to ``stable/xena``, it won't pass tests
|
||||
there either (because xena also supports Python 3.6).
|
||||
|
||||
So it's better to follow the policy and wait until the patch is merged
|
||||
into ``stable/yoga`` *before* you propose a backport to ``stable/xena``.
|
||||
|
||||
* You can propose backports directly from git instead of using the gerrit
|
||||
web interface, but if you do, you must include the fact that it's a
|
||||
cherry-pick in the commit message. Gerrit does this automatically for
|
||||
you *if you cherry-pick from a merged commit* (which is the only kind of
|
||||
commit you should cherry-pick from in Gerrit); git will do it for you if
|
||||
you use the ``-x`` flag when you do a manual cherry-pick.
|
||||
|
||||
This will keep the history of this backport intact as it goes from
|
||||
branch to branch. We want this information to be in the commit message
|
||||
and to be accurate, because if the fix causes a regression (which is
|
||||
always possible), it will be helpful to the poor sucker who has to fix
|
||||
it to know where this code came from without digging through a bunch of
|
||||
git history.
|
||||
|
||||
If you have questions about any of this, or if you have a bug to fix that
|
||||
is only present in one of the stable branches, ask for advice in
|
||||
``#openstack-cinder`` on IRC.
|
||||
@@ -29,6 +29,8 @@ Getting Started
|
||||
:maxdepth: 2
|
||||
|
||||
contributing
|
||||
backporting
|
||||
documentation
|
||||
|
||||
Writing Release Notes
|
||||
---------------------
|
||||
|
||||
Reference in New Issue
Block a user