b872f50b96
Previously the tempest plugins were driven by the legacy `cycle-automatic` model. However this model have been abandoned. The cycle-automatic release model is now better described by the `cycle-with-intermediary` model combined with `stable-branch-type: none` The `cycle-automatic` model was used by specific technical deliverables that needed to be automatically released once at the end of a cycle. the tempest-plugin are branchless and `cycle-with-intermediary` however our process doesn't handle them at the end of the cycle like did the `cycle-automatic`. These changes clarifying that point. Change-Id: I6b3619a44d0aea1fa4852e650cbafcb08c853353
229 lines
8.7 KiB
ReStructuredText
229 lines
8.7 KiB
ReStructuredText
================
|
|
Release Models
|
|
================
|
|
|
|
Development in OpenStack is organized around 6-month cycles (like
|
|
"kilo"). At the end of every 6-month cycle, a synchronized release
|
|
of all OpenStack components is produced, along with a common stable
|
|
branch, providing a convenient reference point for downstream teams
|
|
(stable branch maintenance, vulnerability management) and downstream
|
|
users (in particular packagers of OpenStack distributions).
|
|
|
|
Most deliverables follow the cycle. If their "final" release is their
|
|
only release of the development cycle, they can produce release
|
|
candidates in the final stages of the release cycle (`cycle-with-rc`_
|
|
release model). Otherwise they can opt to release directly and
|
|
whenever appropriate (`cycle-with-intermediary`_ release model).
|
|
|
|
The deadline for producing this "final" release varies depending on
|
|
the type of the deliverable. In a development cycle, non-client
|
|
libraries ("library" type) are first, then client libraries
|
|
("client-library" type), then services and other main deliverables
|
|
("service" and "other" types), then release-trailing deliverables
|
|
("trailing" type).
|
|
|
|
Finally, some deliverables that are generally useful and not strictly
|
|
tied to the OpenStack development cycle can release independently
|
|
from it using the `independent`_ release model.
|
|
|
|
A number of rules apply based on what the deliverable is and which
|
|
bucket of the OpenStack map it falls in:
|
|
|
|
* Components appearing in the *openstack* bucket in the `OpenStack map`_
|
|
form the main components of an OpenStack cloud, and therefore must follow
|
|
the release cycle. They need to pick between `cycle-with-rc`_
|
|
or `cycle-with-intermediary`_ models.
|
|
* Libraries cannot use RCs. They need to pick between
|
|
`cycle-with-intermediary`_ and `independent`_ release models. Libraries
|
|
with strong ties to OpenStack should prefer the `cycle-with-intermediary`_
|
|
model, while generally-useful libraries should prefer the `independent`_
|
|
model.
|
|
* Trailing deliverables trail the release, so they cannot, by definition,
|
|
be independent. They need to pick between `cycle-with-rc`_ or
|
|
`cycle-with-intermediary`_ models.
|
|
|
|
.. _`OpenStack map`: https://www.openstack.org/openstack-map
|
|
|
|
.. _cycle-with-rc:
|
|
|
|
cycle-with-rc
|
|
=============
|
|
|
|
The "cycle-with-rc" model describes projects that produce a single release at
|
|
the end of the cycle, with one or more release candidates (RC) close to the end
|
|
of the cycle and optional development milestone betas published on a
|
|
per-project need.
|
|
|
|
* "cycle-with-rc" projects commit to publish at least one release candidate
|
|
following a predetermined schedule published by the Release Management team
|
|
before the start of the cycle.
|
|
* "cycle-with-rc" projects commit to produce a release to match the end of the
|
|
development cycle.
|
|
* Release tags for deliverables using this tag are reviewed and applied by the
|
|
Release Management team.
|
|
|
|
.. _cycle-with-intermediary:
|
|
|
|
cycle-with-intermediary
|
|
=======================
|
|
|
|
The "cycle-with-intermediary" model describes projects that produce
|
|
multiple full releases during the development cycle, with a final
|
|
release to match the end of the cycle.
|
|
|
|
* "cycle-with-intermediary" projects commit to produce a
|
|
release near the end of the 6-month development cycle to be used
|
|
with projects using the other cycle-based release models that are
|
|
required to produce a release at that time.
|
|
* Release tags for deliverables using this tag are reviewed and
|
|
applied by the Release Management team.
|
|
|
|
.. _independent:
|
|
|
|
independent
|
|
===========
|
|
|
|
Some projects opt to completely bypass the 6-month cycle and release
|
|
independently. For example, that is the case of projects that support
|
|
the development infrastructure. The "independent" model describes such
|
|
projects.
|
|
|
|
* "independent" projects produce releases from time to time.
|
|
* Release tags for deliverables using this tag are managed without
|
|
oversight from the Release Management team.
|
|
|
|
.. _abandoned:
|
|
|
|
abandoned
|
|
=========
|
|
|
|
As time passes, some deliverables are abandoned, as they are
|
|
no longer useful, or their functionality is absorbed by another deliverable.
|
|
For cycle-tied release models they just disappear in the next cycle. However
|
|
deliverables with a cycle-independent model just stay around.
|
|
|
|
The 'abandoned' release model describes a formally-independent deliverable
|
|
that will no longer be released, because it changed release models or
|
|
because it was abandoned.
|
|
|
|
* "abandoned" deliverables never produce new releases.
|
|
|
|
.. _untagged:
|
|
|
|
untagged
|
|
========
|
|
|
|
Some CI tools are used only from source and never tag releases, but
|
|
need to create stable branches.
|
|
|
|
Transition between release models
|
|
=================================
|
|
|
|
OpenStack-related libraries
|
|
---------------------------
|
|
|
|
Libraries with strong ties with OpenStack are released with a
|
|
`cycle-with-intermediary`_ model, so that:
|
|
|
|
* they can be released early and often
|
|
* services consuming those libraries can take advantage of their new
|
|
features
|
|
* we detect integration bugs early rather than late
|
|
|
|
This works well while libraries see lots of changes, however it is a bit
|
|
heavy-handed for feature-complete, stable libraries: it forces those to
|
|
release multiple times per year even if they have not seen any change.
|
|
|
|
Once libraries are deemed feature-complete and stable, they should be
|
|
switched to an `independent`_ release model (like all our third-party
|
|
libraries). Those would see releases purely as needed for the occasional
|
|
corner case bugfix. They won't be released early and often, there is no
|
|
new feature to take advantage of, and new integration bugs should be
|
|
very rare.
|
|
|
|
This transition should be definitive in most cases. In rare cases where
|
|
a library were to need large feature development work again, we'd have
|
|
two options: develop the new feature in a new library depending on the
|
|
stable one, or grant an exception and switch it back to the
|
|
`cycle-with-intermediary`_ model.
|
|
|
|
Legacy release models
|
|
=====================
|
|
|
|
Those models were available in previous development cycles, but were
|
|
replaced or abandoned.
|
|
|
|
.. _cycle-trailing:
|
|
|
|
cycle-trailing
|
|
--------------
|
|
|
|
.. note::
|
|
|
|
The cycle-trailing release model has been replaced by a specific
|
|
"trailing" deliverable type that can be applied to cycle-with-rc
|
|
or cycle-with-intermediary release models.
|
|
|
|
The "cycle-trailing" model was used by projects producing OpenStack
|
|
packaging, installation recipes or lifecycle management tools. Those
|
|
still do one release for every development cycle, but they can't
|
|
release until OpenStack itself is released.
|
|
|
|
* "cycle-trailing" projects commit to produce a release no later than
|
|
3 months after the main release.
|
|
* Release tags for deliverables using this tag are reviewed and
|
|
applied by the Release Management team.
|
|
|
|
.. _cycle-automatic:
|
|
|
|
cycle-automatic
|
|
---------------
|
|
|
|
.. note::
|
|
|
|
The cycle-automatic release model is now better described by the
|
|
cycle-with-intermediary model combined with stable-branch-type: none
|
|
|
|
The "cycle-automatic" model is used by specific technical deliverables
|
|
that need to be automatically released once at the end of a cycle.
|
|
Those may, optionally, also be released in the middle of the cycle.
|
|
Those do not need a stable branch created. This may be applied only
|
|
to ``tempest-plugin`` or ``other`` deliverables.
|
|
|
|
* "cycle-automatic" deliverables will be automatically released by the
|
|
release team once at the end of a cycle, using the current HEAD of the
|
|
repository. No stable branch will be automatically created.
|
|
* Release tags for deliverables using this model are reviewed and
|
|
applied by the Release Management team.
|
|
|
|
|
|
.. _cycle-with-milestones:
|
|
|
|
cycle-with-milestones
|
|
---------------------
|
|
|
|
.. note::
|
|
|
|
The cycle-with-milestones release model has been replaced by the
|
|
cycle-with-rc model.
|
|
|
|
The "cycle-with-milestones" model described projects that produced a
|
|
single release at the end of the cycle, with development milestones
|
|
published at predetermined times in the cycle schedule.
|
|
|
|
* "cycle-with-milestones" projects committed to publish development
|
|
milestones following a predetermined schedule published by the Release
|
|
Management team before the start of the 6-month cycle.
|
|
* "cycle-with-milestones" projects committed to produce a release to
|
|
match the end of the 6-month development cycle.
|
|
* Release tags for deliverables using this tag were reviewed and
|
|
applied by the Release Management team.
|
|
* Projects using milestones were expected to tag at least 2 out of the
|
|
3 for each cycle, or risk being dropped as an official project. The
|
|
release team would remind projects that miss the first milestone, and
|
|
create tags on any later milestones for the project team by tagging
|
|
HEAD at the time of the deadline. If the release team force-created
|
|
2 tags for a project in the same given development cycle, the
|
|
project would be treated as inactive and the release team would
|
|
recommend dropping it from the official project list.
|