Merge "Change release model to independent releases"
This commit is contained in:
commit
bfdd94f2af
260
specs/liberty/feature-based-releases.rst
Normal file
260
specs/liberty/feature-based-releases.rst
Normal file
@ -0,0 +1,260 @@
|
||||
..
|
||||
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
||||
License.
|
||||
|
||||
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||
|
||||
============================================
|
||||
Move Ironic to a feature-based release model
|
||||
============================================
|
||||
|
||||
https://blueprints.launchpad.net/ironic/+spec/feature-based-releases
|
||||
|
||||
At the Liberty design summit in Vancouver, the Ironic team generally agreed
|
||||
to move the Ironic project to a feature-based release model.[0] This is an
|
||||
informational spec to lay out why we are doing this and how it will work.
|
||||
|
||||
|
||||
Problem description
|
||||
===================
|
||||
|
||||
Ironic currently uses the traditional OpenStack release model.[1]
|
||||
This involves:
|
||||
|
||||
* One release every six months.
|
||||
|
||||
* A feature freeze prior to cutting this release, typically for a duration
|
||||
of six weeks. Only bug fix work and docs work should be done in this period.
|
||||
|
||||
* An optional spec freeze a few weeks prior to the feature freeze.
|
||||
|
||||
* After the feature freeze period, a stable branch is forked from master and a
|
||||
release candidate period begins. Critical bugs fixed on master during this
|
||||
period may be backported to the stable branch for the final release.
|
||||
|
||||
* After about four weeks of iterating on release candidates, the final version
|
||||
is released. This stable release may receive critical bug fixes for a longer
|
||||
period of 9-15 months.
|
||||
|
||||
This model creates a few problems. The primary problem created is that
|
||||
development happens in peaks and valleys. Developers and vendors realize that
|
||||
the feature freeze is coming up, and attempt to merge features quickly before
|
||||
the freeze. This creates a flurry of both patches and reviews, which has the
|
||||
tendency to burn out core reviewers. Then feature freeze begins. Features
|
||||
cannot be landed and development slows, almost to a halt. This typically takes
|
||||
six weeks. Once the next cycle opens for feature development, code starts to
|
||||
trickle through but most folks are working on summit planning and taking a
|
||||
break from the stress of the last release. This essentially causes *10 weeks*
|
||||
of developer downtime *per cycle*, or 20/52 weeks per year.
|
||||
|
||||
|
||||
Proposed change
|
||||
===============
|
||||
|
||||
We should release Ironic (roughly) following the independent release model
|
||||
defined by the OpenStack governance.[2]
|
||||
|
||||
There are a few things of note here.
|
||||
|
||||
* We should release Ironic when major features or bug fixes are complete on
|
||||
the master branch. This will be at the discretion of Ironic's PTL or a
|
||||
designated release manager.
|
||||
|
||||
* We should continue to release a "final" release every six months,
|
||||
to continue to be part of the coordinated release.[3]
|
||||
|
||||
* In lieu of a feature freeze, Ironic's "stable" release should come from a
|
||||
"normal" Ironic release that happens around the same time that other
|
||||
integrated projects begin the release candidate period. For example, for
|
||||
Liberty[4], Ironic should aim to make a release in the second half of
|
||||
September. This will become equivalent to the stable/liberty branch.
|
||||
Release candidates should be built from this branch and may receive bug
|
||||
fixes. Stable releases should be eligible for receiving backports following
|
||||
the current process.
|
||||
|
||||
* Ironic releases should roughly follow SemVer[5] -- the difference being that
|
||||
the major version should be bumped for significant changes in Ironic's
|
||||
functionality or code. Ironic should never do a release without an upgrade
|
||||
path from a prior release, so in traditional SemVer the major version would
|
||||
never change. We should bump minor and patch versions as needed for
|
||||
minor feature and bug fix releases.
|
||||
|
||||
* Ironic releases should be published to PyPI.
|
||||
|
||||
* Specs should be no longer be targeted to a particular release -- folks
|
||||
should just work on specs and code continuously. Features will be released
|
||||
as they land. The ironic-specs repo should change to:
|
||||
|
||||
* One "approved" directory where all specs live initially.
|
||||
|
||||
* Separate $version-implemented directories that house the specs that were
|
||||
implemented in $version of Ironic. Specs are moved to this directory when
|
||||
the work is completed.
|
||||
|
||||
* Create a placeholder in the old location which indicates which release
|
||||
of Ironic the work was completed in, with a link to the old location.
|
||||
This will keep older links from breaking.
|
||||
|
||||
* Leading up to all releases, reviewers should honor a "soft freeze" period of
|
||||
a few days to a week. Code that is risky in terms of breakage should probably
|
||||
not land at this time; quick bug fixes, driver changes, and other less risky
|
||||
changes should be okay to land in most cases. The PTL or designated release
|
||||
manager must be sure to communicate upcoming releases and these freezes well.
|
||||
|
||||
* Ironic may need to decouple from global requirements during Dep Freeze[7].
|
||||
During OpenStack's feature freeze, the master branch of global-requirements
|
||||
is locked. It should be okay to accept changes to Ironic's requirements.txt
|
||||
on the master branch that are blocked in global-requirements by the Dep
|
||||
Freeze, as the stable branch has already been cut by this point.
|
||||
This should only happen on an as-needed basis as the problem arises; not
|
||||
by default. We also may need to temporarily drop the
|
||||
"gate-ironic-requirements" job during this time. Finally, any patches to
|
||||
Ironic changing requirements.txt should also have a patch to
|
||||
global-requirements with a general "looks good" from a global-requirements
|
||||
core reviewer.
|
||||
|
||||
* Folks have discussed using feature branches for larger chunks of work. While
|
||||
these can be useful, we must be sure to only use them when absolutely
|
||||
necessary as feature branches can carry a large amount of pain. We should
|
||||
prefer feature flags[9] over feature branches where possible.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Continue on the status quo. :(
|
||||
|
||||
Data model impact
|
||||
-----------------
|
||||
|
||||
None.
|
||||
|
||||
State Machine Impact
|
||||
--------------------
|
||||
|
||||
None.
|
||||
|
||||
REST API impact
|
||||
---------------
|
||||
|
||||
None.
|
||||
|
||||
Client (CLI) impact
|
||||
-------------------
|
||||
|
||||
None. The client will continue to release independently, and likely more often
|
||||
than the server.
|
||||
|
||||
RPC API impact
|
||||
--------------
|
||||
|
||||
None.
|
||||
|
||||
Driver API impact
|
||||
-----------------
|
||||
|
||||
None.
|
||||
|
||||
Nova driver impact
|
||||
------------------
|
||||
|
||||
As the Nova driver is released with Nova, it will not change in terms of the
|
||||
way it is released.
|
||||
|
||||
Security impact
|
||||
---------------
|
||||
|
||||
As only stable releases will receive backports, security bugs in other releases
|
||||
should be fixed and released ASAP. An advisory should be published that
|
||||
encourages users to upgrade to the new release.
|
||||
|
||||
Stable branches should continue to receive backports for security bug fixes.
|
||||
|
||||
Intermediate releases will not receive backports for security patches. Any
|
||||
security bug in an intermediate release should be fixed and released with
|
||||
the appropriate version bump. Whether the version change is major/minor/patch
|
||||
may depend on what else has landed on master and will be released with the
|
||||
patch.
|
||||
|
||||
Other end user impact
|
||||
---------------------
|
||||
|
||||
End users will get features shipped to them more quickly.
|
||||
|
||||
Scalability impact
|
||||
------------------
|
||||
|
||||
None.
|
||||
|
||||
Performance Impact
|
||||
------------------
|
||||
|
||||
None.
|
||||
|
||||
Other deployer impact
|
||||
---------------------
|
||||
|
||||
Deployers will receive changes and features more quickly. Those that do not
|
||||
wish to do so may continue to consume the six-month integrated release.
|
||||
|
||||
Developer impact
|
||||
----------------
|
||||
|
||||
All the productivity.
|
||||
|
||||
|
||||
Implementation
|
||||
==============
|
||||
|
||||
Assignee(s)
|
||||
-----------
|
||||
|
||||
PTL, designated release manager (if one exists), and core reviewers.
|
||||
|
||||
Work Items
|
||||
----------
|
||||
|
||||
* Switch to semver.
|
||||
|
||||
* Start releasing independently.
|
||||
|
||||
* Document the process in the developer docs.[8]
|
||||
|
||||
|
||||
Dependencies
|
||||
============
|
||||
|
||||
None.
|
||||
|
||||
|
||||
Testing
|
||||
=======
|
||||
|
||||
None.
|
||||
|
||||
|
||||
Upgrades and Backwards Compatibility
|
||||
====================================
|
||||
|
||||
This should cause upgrades to be smaller and thus less impactful.
|
||||
|
||||
|
||||
Documentation Impact
|
||||
====================
|
||||
|
||||
We should write a page in our developer docs about the process, including the
|
||||
changes to the specs process.
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
[0] https://etherpad.openstack.org/p/liberty-ironic-scaling-the-dev-team
|
||||
[1] http://governance.openstack.org/reference/tags/release_at-6mo-cycle-end.html
|
||||
[2] http://governance.openstack.org/reference/tags/release_independent.html
|
||||
[3] http://governance.openstack.org/reference/tags/integrated-release.html
|
||||
[4] https://wiki.openstack.org/wiki/Liberty_Release_Schedule
|
||||
[5] http://semver.org/
|
||||
[6] http://lists.openstack.org/pipermail/openstack-dev/2015-May/065211.html
|
||||
[7] https://wiki.openstack.org/wiki/DepFreeze
|
||||
[8] http://docs.openstack.org/developer/ironic/
|
||||
[9] https://en.wikipedia.org/wiki/Feature_toggle
|
Loading…
Reference in New Issue
Block a user