blob: 3157f7cbf7e8417aa86049d7cd5b407946d24984 [file] [log] [blame]
Andrea Campanella4dfe9322022-05-10 12:40:10 +02001VOLTHA Release process
2======================
3This document describes the technical steps of VOLTHA's release process.
4The document assumes you are creating a release named voltha-X.Y, where X is the major release versio
5and the y is the minor.
6See versioning in the :doc:`releases documentation </overview/releases>`
7
8Code Freeze and pre-release testing
9-----------------------------------
10
11VOLTHA is released every 6 months. The suggested codefreeze is 3 weeks before release.
12Code freeze means that no functionality is added, only bug fixes and tests can be added during the code freeze time.
13Code freeze is announced during the TST meetings and enforced by the core contributors that have +2/merge access.
14The 3 weeks of code freeze are used to stabilize the tests and prepare the components for the release.
15
16During code freeze the jenkins jobs test the latest code in master which, given the code freeze state, is the
17release candidate (RC) for the release.
18A release can be considered ready if the tests on Jenkins pass with no issue, both on hardware and bbsim jobs.
19
20Component releasing and Lazy Branching
21--------------------------------------
22In VOLTHA for a release we release components (services) and lazy branch when/if needed.
23Once a component (service) is ready to be released we increase the version in the VERSION file,
24going from the -dev or released version x.y.z to either a higher number in minor version (y) or in bug version (z).
25
26To allow for future patches to go into the repo in a way that does not conflict with the patch version,
27each component repo's VERSION file should have it's minor version increased in master. (ex: 1.1.X to 1.2.0-dev,
28so future 1.1.X+1 component release can easily be created for the released VOLTHA version).
29
Joey Armstrongd24a1122023-01-04 09:34:46 -050030The same should be done on Helm charts in the chart repos post release, but the versions there shouldn't include a
Andrea Campanella4dfe9322022-05-10 12:40:10 +020031-dev suffix because chart publishing requires that every new chart version be unique and using un-suffixed SemVer is a
32better release numbering pattern.
33
34If 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
47Every repository that need releasing is listed here.
48
49Services:
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
60Libraries 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
66Tools:
67
68- `voltctl <https://github.com/opencord/voltctl>`_
69
70Configuration:
71
72- `pod-configs <https://github.com/opencord/pod-configs>`_
73
74ONOS Apps
75^^^^^^^^^
76
Joey Armstronga144ef32024-01-11 11:26:41 -050077:ref:`_howto_release_components_onos_components`
78
Andrea Campanella4dfe9322022-05-10 12:40:10 +020079The ONOS Apps need to be released in a different manner.
80
Joey Armstronga144ef32024-01-11 11:26:41 -050081A dedicated Jenkins job is used to release ONOS app: https://jenkins.opencord.org/job/onos-app-release.
Andrea Campanella4dfe9322022-05-10 12:40:10 +020082
Joey Armstronga144ef32024-01-11 11:26:41 -050083The job will need to be initiated using specific parameters, for an example view the lateset pipeline job.
84
851. `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 Campanella4dfe9322022-05-10 12:40:10 +0200952. Wait for build to complete
Joey Armstronga144ef32024-01-11 11:26:41 -0500963. Merge the component patches on gerrit
97 - `View <https://gerrit.opencord.org/q/owner:do-not-reply%2540opennetworking.org>`_
Joey Armstrong56334fc2023-01-15 22:53:19 -050098 - 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 Armstronga144ef32024-01-11 11:26:41 -05001024. 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 Armstrong56334fc2023-01-15 22:53:19 -0500105
Joey Armstrongf713d7f2023-02-23 06:06:49 -0500106 - Login into the sonatype server (for username and password contact michelle@opennetworking.org)
Joey Armstrong56334fc2023-01-15 22:53:19 -0500107 - 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
1135. 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
1186. Iterate through apps:
119
120 - Modify pom.xml and dependencies.xml
121 - Update version string for all released dependencies.
122
Joey Armstrongf713d7f2023-02-23 06:06:49 -05001237. Start over with the next app
Andrea Campanella4dfe9322022-05-10 12:40:10 +0200124
125.. note::
Joey Armstrongf713d7f2023-02-23 06:06:49 -0500126 Given component inter dependencies, ONOS apps need to be released in order:
Andrea Campanella4dfe9322022-05-10 12:40:10 +0200127
128 1. sadis
129 2. olt, aaa, dhcpl2relay, mcast, igmpproxy, maclearning
130 3. bng, PPPoE
131 4. kafka
132
133ONOS 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 Campanella4dfe9322022-05-10 12:40:10 +0200148Creating the release
149--------------------
150
151Once the components have been tested and the release is considered ready there are 3 more elements that need to be
152tagged:
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
158These 3 repos are the only ones that receive a X.Y.Z tag. Other repos that contain individual
159components have their own versioning/release cadence, driven by SemVer.
160
161Helm Charts
162^^^^^^^^^^^
163
164The official action of creating the voltha-X.Y release is releasing the voltha helm chart, and adapter charts
165with version:X.Y.Z (e.g. 2.10.0) specified in Chart.yaml within the voltha-helm-charts repo, and within the VERSION
166file in that repo.
167A branch named voltha-X.Y needs to be created on the voltha-helm-charts repo.
168The helm charts repo overall VERSION should also be incremented to the next minor version (X.Y+1-dev), so all X.Y.Z
169releases of the overall charts repo will happen on the voltha-X.Y branch.
170
171Voltha-system-tests
172^^^^^^^^^^^^^^^^^^^
173Accompanying tests for voltha-X.Y are created by creating a branch created named voltha-X.Y on the voltha-system-tests
174repo and creating a tag X.Y.Z on that branch.
175
176Documentation and Release Notes
177^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
178Release notes for the voltha-X.Y release are created and added to the voltha-docs repo. Please follow the template of
Joey Armstrong449ce7a2023-07-18 18:32:24 -0400179past releases, an :doc:`example <voltha_releases/voltha_2.12.rst>`
Andrea Campanella4dfe9322022-05-10 12:40:10 +0200180
181Also, if needed a voltha-X.Y branch is created on docs repo. These release notes also contain all the
182versions of components that will be released, and may be updated during the final QA process.
183At release we create a tag X.Y.Z in the VERSION file.
184
185CI-Management
186^^^^^^^^^^^^^
187In the `Ci management <https://github.com/opencord/ci-management>`_ repository create the /voltha-x.y.z folder and copy the /master repos
188Testing CI jobs should be created that check out the voltha-X.Y branch of the voltha-system-tests repo, testing the
189charts as checked out with the voltha-X.Y tag of voltha-helm-charts.
190
191
192Release support and bug-fixing
193------------------------------
194
195What changes can be brought into the X.Y.Z branch?
196^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
197Has to be a bug or non-code fix.
198
199Add a Jira item with type Bug, tag against VOLTHA vX.Y
200Discuss on the Voltha mailing list, or in all-Voltha meeting, get consensus on whether should be brought to X.Y.z
201Documentation or other non-code updates are also acceptable
202
203What is a bug? Not a new feature!
204Anything that causes a functional regression test (Robot tests) to fail
205Severe issue (causes data loss or crash), or frequently occurring -> add to X.Y
206Issues that are merely annoying and don't cause data loss or a crash, or are very infrequently occurring -> may
207wait for next release
208
209WHen a bug is found please add to tests both on the released version and the master branch, if tests don't cover
210the bug. Add to Robot tests for integration-related issues, to Unit tests for code-level or functional issues.
211
212Update/Fixes to the released version
213^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
214This section shows how to create minor releases on the X.Y.Z branch when a bug fix is required.
215
216If 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
229If 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 Armstrongd24a1122023-01-04 09:34:46 -0500232- Manually cherry-pick to the voltha-X.Y branch of the component (create one if needed)
Andrea Campanella4dfe9322022-05-10 12:40:10 +0200233- 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
238If 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 Armstrong56334fc2023-01-15 22:53:19 -0500245
246See 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>`_