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