blob: 98807f7d37487a3431466d56a8441d1208b0ce25 [file] [log] [blame]
Andrea Campanella4dfe9322022-05-10 12:40:10 +02001======================
2VOLTHA Release process
3======================
4This document describes the technical steps of VOLTHA's release process.
5The document assumes you are creating a release named voltha-X.Y, where X is the major release versio
6and the y is the minor.
7See versioning in the :doc:`releases documentation </overview/releases>`
8
9Code Freeze and pre-release testing
10-----------------------------------
11
12VOLTHA is released every 6 months. The suggested codefreeze is 3 weeks before release.
13Code freeze means that no functionality is added, only bug fixes and tests can be added during the code freeze time.
14Code freeze is announced during the TST meetings and enforced by the core contributors that have +2/merge access.
15The 3 weeks of code freeze are used to stabilize the tests and prepare the components for the release.
16
17During code freeze the jenkins jobs test the latest code in master which, given the code freeze state, is the
18release candidate (RC) for the release.
19A release can be considered ready if the tests on Jenkins pass with no issue, both on hardware and bbsim jobs.
20
21Component releasing and Lazy Branching
22--------------------------------------
23In VOLTHA for a release we release components (services) and lazy branch when/if needed.
24Once a component (service) is ready to be released we increase the version in the VERSION file,
25going from the -dev or released version x.y.z to either a higher number in minor version (y) or in bug version (z).
26
27To allow for future patches to go into the repo in a way that does not conflict with the patch version,
28each component repo's VERSION file should have it's minor version increased in master. (ex: 1.1.X to 1.2.0-dev,
29so future 1.1.X+1 component release can easily be created for the released VOLTHA version).
30
31The 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
33better release numbering pattern.
34
35If 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
48Every repository that need releasing is listed here.
49
50Services:
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
61Libraries 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
67Tools:
68
69- `voltctl <https://github.com/opencord/voltctl>`_
70
71Configuration:
72
73- `pod-configs <https://github.com/opencord/pod-configs>`_
74
75ONOS Apps
76^^^^^^^^^
77
78The ONOS Apps need to be released in a different manner.
79
80There is a Jenkins job to release ONOS app: https://jenkins.opencord.org/job/onos-app-release.
81It requires to be triggered with specific parameters, as an example you can check the latest job in that pipeline.
82
831. Build with parameters: use the name of the repo (not of the app itself)
842. Wait for build to complete
853. Merge the patches on gerrit https://gerrit.opencord.org/q/owner:do-not-reply%2540opennetworking.org
864. 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)
945. Wait until artefacts are published https://search.maven.org/search?q=g:org.opencord
956. Go in other apps, update the dependency of released from x.y.z-SNAPSHOT to x.y.z
967. 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
106ONOS 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
123Creating the release
124--------------------
125
126Once the components have been tested and the release is considered ready there are 3 more elements that need to be
127tagged:
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
133These 3 repos are the only ones that receive a X.Y.Z tag. Other repos that contain individual
134components have their own versioning/release cadence, driven by SemVer.
135
136Helm Charts
137^^^^^^^^^^^
138
139The official action of creating the voltha-X.Y release is releasing the voltha helm chart, and adapter charts
140with version:X.Y.Z (e.g. 2.10.0) specified in Chart.yaml within the voltha-helm-charts repo, and within the VERSION
141file in that repo.
142A branch named voltha-X.Y needs to be created on the voltha-helm-charts repo.
143The helm charts repo overall VERSION should also be incremented to the next minor version (X.Y+1-dev), so all X.Y.Z
144releases of the overall charts repo will happen on the voltha-X.Y branch.
145
146Voltha-system-tests
147^^^^^^^^^^^^^^^^^^^
148Accompanying tests for voltha-X.Y are created by creating a branch created named voltha-X.Y on the voltha-system-tests
149repo and creating a tag X.Y.Z on that branch.
150
151Documentation and Release Notes
152^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
153Release notes for the voltha-X.Y release are created and added to the voltha-docs repo. Please follow the template of
154past releases, an :doc:`example </voltha_releases/voltha_2.9>`
155
156Also, if needed a voltha-X.Y branch is created on docs repo. These release notes also contain all the
157versions of components that will be released, and may be updated during the final QA process.
158At release we create a tag X.Y.Z in the VERSION file.
159
160CI-Management
161^^^^^^^^^^^^^
162In the `Ci management <https://github.com/opencord/ci-management>`_ repository create the /voltha-x.y.z folder and copy the /master repos
163Testing CI jobs should be created that check out the voltha-X.Y branch of the voltha-system-tests repo, testing the
164charts as checked out with the voltha-X.Y tag of voltha-helm-charts.
165
166
167Release support and bug-fixing
168------------------------------
169
170What changes can be brought into the X.Y.Z branch?
171^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
172Has to be a bug or non-code fix.
173
174Add a Jira item with type Bug, tag against VOLTHA vX.Y
175Discuss on the Voltha mailing list, or in all-Voltha meeting, get consensus on whether should be brought to X.Y.z
176Documentation or other non-code updates are also acceptable
177
178What is a bug? Not a new feature!
179Anything that causes a functional regression test (Robot tests) to fail
180Severe issue (causes data loss or crash), or frequently occurring -> add to X.Y
181Issues that are merely annoying and don't cause data loss or a crash, or are very infrequently occurring -> may
182wait for next release
183
184WHen a bug is found please add to tests both on the released version and the master branch, if tests don't cover
185the bug. Add to Robot tests for integration-related issues, to Unit tests for code-level or functional issues.
186
187Update/Fixes to the released version
188^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
189This section shows how to create minor releases on the X.Y.Z branch when a bug fix is required.
190
191If 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
204If 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
213If 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.