Andrea Campanella | 4dfe932 | 2022-05-10 12:40:10 +0200 | [diff] [blame] | 1 | ====================== |
| 2 | VOLTHA Release process |
| 3 | ====================== |
| 4 | This document describes the technical steps of VOLTHA's release process. |
| 5 | The document assumes you are creating a release named voltha-X.Y, where X is the major release versio |
| 6 | and the y is the minor. |
| 7 | See versioning in the :doc:`releases documentation </overview/releases>` |
| 8 | |
| 9 | Code Freeze and pre-release testing |
| 10 | ----------------------------------- |
| 11 | |
| 12 | VOLTHA is released every 6 months. The suggested codefreeze is 3 weeks before release. |
| 13 | Code freeze means that no functionality is added, only bug fixes and tests can be added during the code freeze time. |
| 14 | Code freeze is announced during the TST meetings and enforced by the core contributors that have +2/merge access. |
| 15 | The 3 weeks of code freeze are used to stabilize the tests and prepare the components for the release. |
| 16 | |
| 17 | During code freeze the jenkins jobs test the latest code in master which, given the code freeze state, is the |
| 18 | release candidate (RC) for the release. |
| 19 | A release can be considered ready if the tests on Jenkins pass with no issue, both on hardware and bbsim jobs. |
| 20 | |
| 21 | Component releasing and Lazy Branching |
| 22 | -------------------------------------- |
| 23 | In VOLTHA for a release we release components (services) and lazy branch when/if needed. |
| 24 | Once a component (service) is ready to be released we increase the version in the VERSION file, |
| 25 | going from the -dev or released version x.y.z to either a higher number in minor version (y) or in bug version (z). |
| 26 | |
| 27 | To allow for future patches to go into the repo in a way that does not conflict with the patch version, |
| 28 | each component repo's VERSION file should have it's minor version increased in master. (ex: 1.1.X to 1.2.0-dev, |
| 29 | so future 1.1.X+1 component release can easily be created for the released VOLTHA version). |
| 30 | |
| 31 | The same should be done on Helm charts in the chart repos post release,but the versions there shouldn't include a |
| 32 | -dev suffix because chart publishing requires that every new chart version be unique and using un-suffixed SemVer is a |
| 33 | better release numbering pattern. |
| 34 | |
| 35 | If a repository is branched the `.gitreview` file needs to be changed, adding `defaultorigin=voltha-X.Y` at the end. |
| 36 | |
| 37 | .. note:: |
| 38 | Given the dependency of the containers on the protos and the library, if the voltha-protos and/or voltha-lib-go or |
| 39 | omci-lib-go need to be released, it should be done first and then updated in the components: |
| 40 | |
| 41 | - release `voltha-proto` |
| 42 | - update `voltha-lib-go` and release it |
| 43 | - change the protos and lib-go versions in the components (in `go.mod`) |
| 44 | - issue `make mod-update` |
| 45 | - release the component |
| 46 | |
| 47 | |
| 48 | Every repository that need releasing is listed here. |
| 49 | |
| 50 | Services: |
| 51 | |
| 52 | - `VOLTHA Core <https://github.com/opencord/voltha-go>`_ |
| 53 | - `OpenFlow Agent <https://github.com/opencord/ofagent-go>`_ |
| 54 | - `Openonu Adapter <https://github.com/opencord/voltha-openonu-adapter-go>`_ |
| 55 | - `Openolt Adapter <https://github.com/opencord/voltha-openolt-adapter>`_ |
| 56 | - `Openolt Agent <https://github.com/opencord/openolt>`_ |
| 57 | - `ONOS controller <https://github.com/opencord/voltha-onos>`_ (Note, only do it after releasing all the apps below) |
| 58 | - `BBSIM <https://github.com/opencord/bbsim>`_ |
| 59 | - `BBSIM Sadis Server <https://github.com/opencord/bbsim-sadis-server>`_ |
| 60 | |
| 61 | Libraries and APIs: |
| 62 | |
| 63 | - `VOLTHA protos <https://github.com/opencord/voltha-protos>`_ |
| 64 | - `VOLTHA Library in Go <https://github.com/opencord/voltha-lib-go>`_ |
| 65 | - `OMCI Library in GO <https://github.com/opencord/omci-lib-go>`_ |
| 66 | |
| 67 | Tools: |
| 68 | |
| 69 | - `voltctl <https://github.com/opencord/voltctl>`_ |
| 70 | |
| 71 | Configuration: |
| 72 | |
| 73 | - `pod-configs <https://github.com/opencord/pod-configs>`_ |
| 74 | |
| 75 | ONOS Apps |
| 76 | ^^^^^^^^^ |
| 77 | |
| 78 | The ONOS Apps need to be released in a different manner. |
| 79 | |
| 80 | There is a Jenkins job to release ONOS app: https://jenkins.opencord.org/job/onos-app-release. |
| 81 | It requires to be triggered with specific parameters, as an example you can check the latest job in that pipeline. |
| 82 | |
| 83 | 1. Build with parameters: use the name of the repo (not of the app itself) |
| 84 | 2. Wait for build to complete |
| 85 | 3. Merge the patches on gerrit https://gerrit.opencord.org/q/owner:do-not-reply%2540opennetworking.org |
| 86 | 4. It will trigger a publish job (https://jenkins.opencord.org/job/maven-publish_sadis/) that publish the artifact in |
| 87 | the staging repo on `sonatype <https://oss.sonatype.org>`_, you need to release it: |
| 88 | * Login on sonatype (for username and password contact michelle@opennetworking.org) |
| 89 | * search for org.opencord |
| 90 | * Select the app you want to release and click "all versions" |
| 91 | * Click on "Staging repositories" (in the left side navigation) |
| 92 | * In the top right search for last part of the app name (eg: olt) |
| 93 | * Click release (top left bar, small button) |
| 94 | 5. Wait until artefacts are published https://search.maven.org/search?q=g:org.opencord |
| 95 | 6. Go in other apps, update the dependency of released from x.y.z-SNAPSHOT to x.y.z |
| 96 | 7. Start over with new app |
| 97 | |
| 98 | .. note:: |
| 99 | Given their inter dependency the ONOS apps need to be released in order: |
| 100 | |
| 101 | 1. sadis |
| 102 | 2. olt, aaa, dhcpl2relay, mcast, igmpproxy, maclearning |
| 103 | 3. bng, PPPoE |
| 104 | 4. kafka |
| 105 | |
| 106 | ONOS APPs: |
| 107 | |
| 108 | - `AAA <https://github.com/opencord/aaa>`_ |
| 109 | - `BNG <https://github.com/opencord/bng>`_ |
| 110 | - `DHCP L2 Relay <https://github.com/opencord/dhcpl2relay>`_ |
| 111 | - `IGMPProxy <https://github.com/opencord/igmpproxy>`_ |
| 112 | - `Kafka <https://github.com/opencord/kafka-onos>`_ |
| 113 | - `Mac Learning <https://github.com/opencord/mac-learning>`_ |
| 114 | - `Multicast <https://github.com/opencord/mcast>`_ |
| 115 | - `OLT <https://github.com/opencord/olt>`_ |
| 116 | - `OLT Topology <https://github.com/opencord/olttopology>`_ |
| 117 | - `PPPoE Agent <https://github.com/opencord/pppoeagent>`_ |
| 118 | - `Sadis <https://github.com/opencord/sadis>`_ |
| 119 | |
| 120 | |
| 121 | |
| 122 | |
| 123 | Creating the release |
| 124 | -------------------- |
| 125 | |
| 126 | Once the components have been tested and the release is considered ready there are 3 more elements that need to be |
| 127 | tagged: |
| 128 | |
| 129 | - `VOLTHA Helm Charts <https://github.com/opencord/voltha-helm-charts>`_ |
| 130 | - `VOLTHA System Tests <https://github.com/opencord/voltha-system-tests>`_ |
| 131 | - `VOLTHA docs <https://github.com/opencord/voltha-docs>`_ |
| 132 | |
| 133 | These 3 repos are the only ones that receive a X.Y.Z tag. Other repos that contain individual |
| 134 | components have their own versioning/release cadence, driven by SemVer. |
| 135 | |
| 136 | Helm Charts |
| 137 | ^^^^^^^^^^^ |
| 138 | |
| 139 | The official action of creating the voltha-X.Y release is releasing the voltha helm chart, and adapter charts |
| 140 | with version:X.Y.Z (e.g. 2.10.0) specified in Chart.yaml within the voltha-helm-charts repo, and within the VERSION |
| 141 | file in that repo. |
| 142 | A branch named voltha-X.Y needs to be created on the voltha-helm-charts repo. |
| 143 | The helm charts repo overall VERSION should also be incremented to the next minor version (X.Y+1-dev), so all X.Y.Z |
| 144 | releases of the overall charts repo will happen on the voltha-X.Y branch. |
| 145 | |
| 146 | Voltha-system-tests |
| 147 | ^^^^^^^^^^^^^^^^^^^ |
| 148 | Accompanying tests for voltha-X.Y are created by creating a branch created named voltha-X.Y on the voltha-system-tests |
| 149 | repo and creating a tag X.Y.Z on that branch. |
| 150 | |
| 151 | Documentation and Release Notes |
| 152 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 153 | Release notes for the voltha-X.Y release are created and added to the voltha-docs repo. Please follow the template of |
| 154 | past releases, an :doc:`example </voltha_releases/voltha_2.9>` |
| 155 | |
| 156 | Also, if needed a voltha-X.Y branch is created on docs repo. These release notes also contain all the |
| 157 | versions of components that will be released, and may be updated during the final QA process. |
| 158 | At release we create a tag X.Y.Z in the VERSION file. |
| 159 | |
| 160 | CI-Management |
| 161 | ^^^^^^^^^^^^^ |
| 162 | In the `Ci management <https://github.com/opencord/ci-management>`_ repository create the /voltha-x.y.z folder and copy the /master repos |
| 163 | Testing CI jobs should be created that check out the voltha-X.Y branch of the voltha-system-tests repo, testing the |
| 164 | charts as checked out with the voltha-X.Y tag of voltha-helm-charts. |
| 165 | |
| 166 | |
| 167 | Release support and bug-fixing |
| 168 | ------------------------------ |
| 169 | |
| 170 | What changes can be brought into the X.Y.Z branch? |
| 171 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 172 | Has to be a bug or non-code fix. |
| 173 | |
| 174 | Add a Jira item with type Bug, tag against VOLTHA vX.Y |
| 175 | Discuss on the Voltha mailing list, or in all-Voltha meeting, get consensus on whether should be brought to X.Y.z |
| 176 | Documentation or other non-code updates are also acceptable |
| 177 | |
| 178 | What is a bug? Not a new feature! |
| 179 | Anything that causes a functional regression test (Robot tests) to fail |
| 180 | Severe issue (causes data loss or crash), or frequently occurring -> add to X.Y |
| 181 | Issues that are merely annoying and don't cause data loss or a crash, or are very infrequently occurring -> may |
| 182 | wait for next release |
| 183 | |
| 184 | WHen a bug is found please add to tests both on the released version and the master branch, if tests don't cover |
| 185 | the bug. Add to Robot tests for integration-related issues, to Unit tests for code-level or functional issues. |
| 186 | |
| 187 | Update/Fixes to the released version |
| 188 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| 189 | This section shows how to create minor releases on the X.Y.Z branch when a bug fix is required. |
| 190 | |
| 191 | If a fix is needed to the helm charts: |
| 192 | |
| 193 | - Make the fix on the master branch of voltha-helm-charts (assuming that it is required in both places). |
| 194 | - After the master tests pass, manually cherry-pick the fix to the voltha-X.Y branch (the Chart version would be |
| 195 | different, requiring the manual step). |
| 196 | - Cherry-picked patchsets on that branch will be checked by the voltha-X.Y branch of tests. |
| 197 | - When it passes, submitting the change will make a new X.Y.Z release |
| 198 | - Update the documentation to reflect the chart changes, a description of the changes made, and increment the tag |
| 199 | on the docs from X.Y.Z to X.Y.Z+1, to reflect the patch change. |
| 200 | - If all the charts are updated and working correctly, create a new charts point release by increasing the |
| 201 | X.Y.Z VERSION file in the voltha-helm-charts repo. The versions need to be updated in the voltha-docs repo, |
| 202 | which needs to be tagged as well, thus releasing it. |
| 203 | |
| 204 | If a fix is needed to the components/containers that are included by the helm charts: |
| 205 | |
| 206 | - Develop a fix to the issue on the master branch, get it approved after passing master tests. |
| 207 | - Manually cherry-pick to the voltha-X.Y branch of the component (create one fi needed) |
| 208 | - incrementing the patch version in the VERSION file, |
| 209 | - test with the voltha-X.Y version of voltha-system-tests and helm charts. |
| 210 | - Update helm charts and go through the helm chart update process above. |
| 211 | - Update the voltha-docs with the right version of the component. |
| 212 | |
| 213 | If a fix is needed to the ONOS apps: |
| 214 | |
| 215 | - Create a branch here https://gerrit.opencord.org/plugins/gitiles/olt/+/refs/heads/olt-4.1 |
| 216 | - then `Git checkout -b <branch-name> opencord/<version>` |
| 217 | - Then push a commit changing to `.1-SNAPSHOT` more (see e.g. https://gerrit.opencord.org/c/igmpproxy/+/19589) |
| 218 | - Then push you changes (e.g. https://gerrit.opencord.org/c/igmpproxy/+/19590) |
| 219 | - Then release as per the process above. |