From 7f5b6436322c71322e6305029dea9603597528f7 Mon Sep 17 00:00:00 2001 From: Doug Hellmann Date: Fri, 25 Sep 2015 18:34:28 +0000 Subject: [PATCH] Move instructions from readme to published docs Move the bulk of the instructions to a file that is part of the documentation build so we can provide links to the HTML version. Change-Id: I0aadc4034e68b0c6bf977248fdc075f10b7b0cc4 --- README.rst | 210 +---------------------------------- doc/source/index.rst | 11 +- doc/source/instructions.rst | 212 ++++++++++++++++++++++++++++++++++++ 3 files changed, 224 insertions(+), 209 deletions(-) create mode 100644 doc/source/instructions.rst diff --git a/README.rst b/README.rst index 731590eec6..431a294dff 100644 --- a/README.rst +++ b/README.rst @@ -8,211 +8,5 @@ made up of individual project repositories sharing a Launchpad group and a version number history. Many deliverables will only have one constituent project. -Requesting a Release -==================== - -The PTL or release liaison for a project may request a release from -master by submitting a patch to this repository, adding the necessary -release metadata to the file describing the deliverable to be -released. The release team will review the request and provide -feedback about the version number. - -The stable maintenance team, PTL, or release liaison for a project may -request a release from a stable branch by submitting a patch to this -repository, adding the necessary release metadata to the file -describing the deliverable to be released. The release team will -review the request and provide feedback about the version number. If -the stable release is requested by the stable maintenance team, it -should be acknowledged by the PTL or release liaison to ensure that -the development team is aware of the coming change. - -Reviewing a Release Request ---------------------------- - -Care needs to be taken when reviewing a release request such that the version -proposed (1) follows semver rules and (2) will not cause issues between -branches, particularly stable branches (at least stable branches that are not -yet using upper-constraints checking in CI runs, which is anything before -stable/liberty). - -General notes when reviewing a release request: - -* Make sure you follow semantic versioning rules `semver `_ - when picking the version number. In particular, if there is a change going - into this release which requires a higher minimum version of a dependency, - then the **minor** version should be incremented. - - .. note:: The exception to this rule is when the versions of a project are - pinned between minor versions in stable branches. In those cases we - frequently release global-requirements syncs with a patch version to fix - the target branch, e.g. stable/juno, but don't increment the minor version - to avoid it being used in a different branch, like stable/kilo. - Someone from the - `stable-maint-core `_ - team should +1 a change like this before it's approved. - -The following rules apply mostly to stable branches and therefore a member of -the `stable-maint-core `_ -team should +1 the following types of changes before they are approved. - -* For libraries, check global-requirements.txt (g-r) in the - `openstack/requirements repo `_ - to make sure the version you are about to release does not cause a - conflict and wedge the gate. Typically this is only a concern on stable - branches with (un)capped dependencies. - - Typical examples of this kind of break (before upper-constraints are used): - - #. A stable branch, for example stable/juno, has uncapped dependencies on a - library and a version is released on a newer branch, e.g. stable/kilo, - and that version has updated requirements from global-requirements in - stable/kilo which conflict with the versions of libraries allowed in - stable/juno. This then leads to ContextualVersionConflict failures when - installing packages on stable/juno. - #. Similar to the point above, but if there are overlapping version ranges - between two branches, like stable/juno and stable/kilo, you can have the - same kinds of issues where a release from one branch which has g-r syncs - specific to that branch gets used in the other branch and things break. - We saw this happen with oslo.utils 1.4.1 which was intended for - stable/juno consumption but because stable/kilo g-r allowed that version, - we broke stable/kilo CI jobs since 1.4.1 had juno-level dependencies. - -* The rule of thumb is that branches should not overlap versions at the minor - version range. For example, stable/juno can require foo>=1.1,<1.2 and - stable/kilo can require foo>=1.2,<1.3. In this way only patch-level versions - are released for foo on stable/juno and stable/kilo. The pin at the minor - version range prevents those patch-level versions from breaking each other's - branch. - -Release Approval -================ - -Releases will only be denied during periods where there are known gate -issues, or when releasing will introduce unwanted -instability. Releases made late in a week may be delayed until early -in the next week unless there is a pressing need such as a gate -failure or security issue. - -Who is Responsible for the Release? -=================================== - -The release team is responsible for helping to clearly signal the -nature of the changes in the release through good version number -selection. - -The project team is responsible for understanding the implications for -consuming projects when a new release is made, and ensuring that -releases do not break other projects. When breaks occur, the project -team is responsible for taking the necessary corrective action. - -Deliverable Files -================= - -For deliverable set of projects, we use one YAML file per release -series to hold all of the metadata for all releases of that -deliverable. For each release, we need to track: - -* the launchpad project name (such as ``oslo.config``) -* the series (Kilo, Liberty, etc.) -* for each repository - - * the name (such as ``openstack/oslo.config``) - * the hash of the commit to be tagged - -* the version number to use -* highlights for the release notes email (optional) - -We track this metadata for the history of all releases of the -deliverable, so we can render a set of release history documentation. - -The file should be named based on the deliverable to be tagged, so -releases for ``liberty`` from the ``openstack/oslo.config`` repository -will have a file in ``openstack/releases`` called -``deliverables/liberty/oslo.config.yaml``. Releases of the same deliverable from -the ``stable/kilo`` branch will be described by -``deliverables/kilo/oslo.config.yaml``. - -Deliverables File Schema -======================== - -The top level of a deliverable file is a mapping with keys: - -``launchpad`` - The slug name of the launchpad project, suitable for use in URLs. - -``releases`` - A list of the releases for the deliverable. - -Each `release` entry is a mapping with keys: - -``version`` - The version tag for that release, to be applied to all of the member - projects. - -``projects`` - A list of all of the projects making up the deliverable for that - release. - -``highlights`` - An optional message to be included in the release note email - announcing the release. (Use ``|`` to indicate a multi-line, - pre-formatted message.) - -Each `project` entry is a mapping with keys: - -``repo`` - The name of the repository on git.openstack.org. - -``hash`` - The SHA1 hash for the commit to receive the version tag. - -Examples -======== - -For example, one version of -``deliverables/liberty/oslo.config.yaml`` might contain:: - - --- - launchpad: oslo.config - releases: - - version: 1.12.0 - projects: - - repo: openstack/oslo.config - hash: 02a86d2eefeda5144ea8c39657aed24b8b0c9a39 - -and then for the subsequent release it would be updated to contain:: - - --- - launchpad: oslo.config - releases: - - version: 1.12.0 - projects: - - repo: openstack/oslo.config - hash: 02a86d2eefeda5144ea8c39657aed24b8b0c9a39 - - version: 1.12.1 - projects: - - repo: openstack/oslo.config - hash: 0c9113f68285f7b55ca01f0bbb5ce6cddada5023 - highlights: | - This release includes the change to stop importing - from the 'oslo' namespace package. - -For deliverables with multiple repositories, the list of projects -would contain all of them. For example, the Neutron deliverable might -be described by ``deliverables/liberty/neutron.yaml`` containing: - -:: - - --- - launchpad: neutron - releases: - - version: 7.0.0 - projects: - - repo: openstack/neutron - hash: somethingunique - - repo: openstack/neutron-fwaas - hash: somethingunique - - repo: openstack/neutron-lbaas - hash: somethingunique - - repo: openstack/neutron-vpnaas - hash: somethingunique +Refer to doc/source/instructions for details about how to submit +requests. diff --git a/doc/source/index.rst b/doc/source/index.rst index 10135a43df..3a9e215912 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -2,6 +2,9 @@ OpenStack Releases ==================== +Release Series +============== + .. list-table:: :header-rows: 1 @@ -32,7 +35,6 @@ - * :doc:`releases/austin` * Deprecated - .. toctree:: :glob: :maxdepth: 1 @@ -50,3 +52,10 @@ releases/cactus releases/bexar releases/austin + +Instructions +============ + +.. toctree:: + + instructions diff --git a/doc/source/instructions.rst b/doc/source/instructions.rst new file mode 100644 index 0000000000..7b7ca0ac21 --- /dev/null +++ b/doc/source/instructions.rst @@ -0,0 +1,212 @@ +======================= + Using This Repository +======================= + +Requesting a Release +==================== + +The PTL or release liaison for a project may request a release from +master by submitting a patch to this repository, adding the necessary +release metadata to the file describing the deliverable to be +released. The release team will review the request and provide +feedback about the version number. + +The stable maintenance team, PTL, or release liaison for a project may +request a release from a stable branch by submitting a patch to this +repository, adding the necessary release metadata to the file +describing the deliverable to be released. The release team will +review the request and provide feedback about the version number. If +the stable release is requested by the stable maintenance team, it +should be acknowledged by the PTL or release liaison to ensure that +the development team is aware of the coming change. + +Reviewing a Release Request +--------------------------- + +Care needs to be taken when reviewing a release request such that the version +proposed (1) follows semver rules and (2) will not cause issues between +branches, particularly stable branches (at least stable branches that are not +yet using upper-constraints checking in CI runs, which is anything before +stable/liberty). + +General notes when reviewing a release request: + +* Make sure you follow semantic versioning rules `semver `_ + when picking the version number. In particular, if there is a change going + into this release which requires a higher minimum version of a dependency, + then the **minor** version should be incremented. + + .. note:: The exception to this rule is when the versions of a project are + pinned between minor versions in stable branches. In those cases we + frequently release global-requirements syncs with a patch version to fix + the target branch, e.g. stable/juno, but don't increment the minor version + to avoid it being used in a different branch, like stable/kilo. + Someone from the + `stable-maint-core `_ + team should +1 a change like this before it's approved. + +The following rules apply mostly to stable branches and therefore a member of +the `stable-maint-core `_ +team should +1 the following types of changes before they are approved. + +* For libraries, check global-requirements.txt (g-r) in the + `openstack/requirements repo `_ + to make sure the version you are about to release does not cause a + conflict and wedge the gate. Typically this is only a concern on stable + branches with (un)capped dependencies. + + Typical examples of this kind of break (before upper-constraints are used): + + #. A stable branch, for example stable/juno, has uncapped dependencies on a + library and a version is released on a newer branch, e.g. stable/kilo, + and that version has updated requirements from global-requirements in + stable/kilo which conflict with the versions of libraries allowed in + stable/juno. This then leads to ContextualVersionConflict failures when + installing packages on stable/juno. + #. Similar to the point above, but if there are overlapping version ranges + between two branches, like stable/juno and stable/kilo, you can have the + same kinds of issues where a release from one branch which has g-r syncs + specific to that branch gets used in the other branch and things break. + We saw this happen with oslo.utils 1.4.1 which was intended for + stable/juno consumption but because stable/kilo g-r allowed that version, + we broke stable/kilo CI jobs since 1.4.1 had juno-level dependencies. + +* The rule of thumb is that branches should not overlap versions at the minor + version range. For example, stable/juno can require foo>=1.1,<1.2 and + stable/kilo can require foo>=1.2,<1.3. In this way only patch-level versions + are released for foo on stable/juno and stable/kilo. The pin at the minor + version range prevents those patch-level versions from breaking each other's + branch. + +Release Approval +================ + +Releases will only be denied during periods where there are known gate +issues, or when releasing will introduce unwanted +instability. Releases made late in a week may be delayed until early +in the next week unless there is a pressing need such as a gate +failure or security issue. + +Who is Responsible for the Release? +=================================== + +The release team is responsible for helping to clearly signal the +nature of the changes in the release through good version number +selection. + +The project team is responsible for understanding the implications for +consuming projects when a new release is made, and ensuring that +releases do not break other projects. When breaks occur, the project +team is responsible for taking the necessary corrective action. + +Deliverable Files +================= + +For deliverable set of projects, we use one YAML file per release +series to hold all of the metadata for all releases of that +deliverable. For each release, we need to track: + +* the launchpad project name (such as ``oslo.config``) +* the series (Kilo, Liberty, etc.) +* for each repository + + * the name (such as ``openstack/oslo.config``) + * the hash of the commit to be tagged + +* the version number to use +* highlights for the release notes email (optional) + +We track this metadata for the history of all releases of the +deliverable, so we can render a set of release history documentation. + +The file should be named based on the deliverable to be tagged, so +releases for ``liberty`` from the ``openstack/oslo.config`` repository +will have a file in ``openstack/releases`` called +``deliverables/liberty/oslo.config.yaml``. Releases of the same deliverable from +the ``stable/kilo`` branch will be described by +``deliverables/kilo/oslo.config.yaml``. + +Deliverables File Schema +======================== + +The top level of a deliverable file is a mapping with keys: + +``launchpad`` + The slug name of the launchpad project, suitable for use in URLs. + +``releases`` + A list of the releases for the deliverable. + +Each `release` entry is a mapping with keys: + +``version`` + The version tag for that release, to be applied to all of the member + projects. + +``projects`` + A list of all of the projects making up the deliverable for that + release. + +``highlights`` + An optional message to be included in the release note email + announcing the release. (Use ``|`` to indicate a multi-line, + pre-formatted message.) + +Each `project` entry is a mapping with keys: + +``repo`` + The name of the repository on git.openstack.org. + +``hash`` + The SHA1 hash for the commit to receive the version tag. + +Examples +======== + +For example, one version of +``deliverables/liberty/oslo.config.yaml`` might contain:: + + --- + launchpad: oslo.config + releases: + - version: 1.12.0 + projects: + - repo: openstack/oslo.config + hash: 02a86d2eefeda5144ea8c39657aed24b8b0c9a39 + +and then for the subsequent release it would be updated to contain:: + + --- + launchpad: oslo.config + releases: + - version: 1.12.0 + projects: + - repo: openstack/oslo.config + hash: 02a86d2eefeda5144ea8c39657aed24b8b0c9a39 + - version: 1.12.1 + projects: + - repo: openstack/oslo.config + hash: 0c9113f68285f7b55ca01f0bbb5ce6cddada5023 + highlights: | + This release includes the change to stop importing + from the 'oslo' namespace package. + +For deliverables with multiple repositories, the list of projects +would contain all of them. For example, the Neutron deliverable might +be described by ``deliverables/liberty/neutron.yaml`` containing: + +:: + + --- + launchpad: neutron + releases: + - version: 7.0.0 + projects: + - repo: openstack/neutron + hash: somethingunique + - repo: openstack/neutron-fwaas + hash: somethingunique + - repo: openstack/neutron-lbaas + hash: somethingunique + - repo: openstack/neutron-vpnaas + hash: somethingunique