| VOLTHA Release process |
| ====================== |
| |
| This document describes the technical steps of VOLTHA's release process. |
| The document assumes you are creating a release named voltha-X.Y, where X |
| is the major release version and Y is the minor. See versioning in the |
| :doc:`releases documentation </overview/releases>` |
| |
| Code Freeze and pre-release testing |
| ----------------------------------- |
| |
| VOLTHA is released every 6 months. The suggested codefreeze is 3 weeks before release. |
| Code freeze means that no functionality is added, only bug fixes and tests can be added during the code freeze time. |
| Code freeze is announced during the TST meetings and enforced by the core contributors that have +2/merge access. |
| The 3 weeks of code freeze are used to stabilize the tests and prepare the components for the release. |
| |
| During code freeze the jenkins jobs test the latest code in master which, given the code freeze state, is the |
| release candidate (RC) for the release. |
| A release can be considered ready if the tests on Jenkins pass with no issue, both on hardware and bbsim jobs. |
| |
| Component releasing and Lazy Branching (legacy) |
| ----------------------------------------------- |
| |
| In VOLTHA for a release we release components (services) and lazy branch when/if needed. |
| Once a component (service) is ready to be released we increase the version in the VERSION file, |
| going from the -dev or released version x.y.z to either a higher number in minor version (y) or in bug version (z). |
| |
| To allow for future patches to go into the repo in a way that does not conflict with the patch version, |
| each component repo's VERSION file should have it's minor version increased in master. (ex: 1.1.X to 1.2.0-dev, |
| so future 1.1.X+1 component release can easily be created for the released VOLTHA version). |
| |
| The same should be done on Helm charts in the chart repos post release, but the versions there shouldn't include a |
| -dev suffix because chart publishing requires that every new chart version be unique and using un-suffixed SemVer is a |
| better release numbering pattern. |
| |
| If a repository is branched the :doc:`.gitreview <howto/release/post-release/gitreview.html>` |
| file needs to be changed, adding `defaultorigin=voltha-X.Y` at the end. |
| |
| .. note:: |
| Given the dependency of the containers on the protos and the library, if the voltha-protos and/or voltha-lib-go or |
| omci-lib-go need to be released, it should be done first and then updated in the components: |
| |
| - release `voltha-proto` |
| - update `voltha-lib-go` and release it |
| - change the protos and lib-go versions in the components (in `go.mod`) |
| - issue `make mod-update` |
| - release the component |
| |
| |
| Every repository that need releasing is listed here. |
| |
| Services: |
| |
| - `VOLTHA Core <https://github.com/opencord/voltha-go>`_ |
| - `OpenFlow Agent <https://github.com/opencord/ofagent-go>`_ |
| - `Openonu Adapter <https://github.com/opencord/voltha-openonu-adapter-go>`_ |
| - `Openolt Adapter <https://github.com/opencord/voltha-openolt-adapter>`_ |
| - `Openolt Agent <https://github.com/opencord/openolt>`_ |
| - `ONOS controller <https://github.com/opencord/voltha-onos>`_ (Note, only do it after releasing all the apps below) |
| - `BBSIM Sadis Server <https://github.com/opencord/bbsim-sadis-server>`_ |
| |
| Libraries and APIs: |
| |
| - `VOLTHA protos <https://github.com/opencord/voltha-protos>`_ |
| - `VOLTHA Library in Go <https://github.com/opencord/voltha-lib-go>`_ |
| - `OMCI Library in GO <https://github.com/opencord/omci-lib-go>`_ |
| |
| Tools: |
| |
| - `BBSIM <https://github.com/opencord/bbsim>`_ |
| - `voltctl <https://github.com/opencord/voltctl>`_ |
| |
| Configuration: |
| |
| - `pod-configs <https://github.com/opencord/pod-configs>`_ |
| |
| ONOS Apps |
| ^^^^^^^^^ |
| |
| :ref:`_howto_release_components_onos_components` |
| |
| The ONOS Apps need to be released in a different manner. |
| |
| A dedicated Jenkins job is used to release ONOS app: https://jenkins.opencord.org/job/onos-app-release. |
| |
| The job will need to be initiated using specific parameters, for an example view the lateset pipeline job. |
| |
| 1. `Build with parameters <https://jenkins.opencord.org/job/onos-app-release>`_: use the name of the repo (not of the app itself) |
| - appRepo: sadis |
| - appName: sadis |
| - apiVersion: `sadis:5.12.0-SNAPSHOT <https://gerrit.opencord.org/plugins/gitiles/sadis/+/refs/heads/master/api/pom.xml#22>`__ |
| - nextApiVersion: version+1 |
| - version: `sadis:5.12.0-SNAPSHOT <https://gerrit.opencord.org/plugins/gitiles/sadis/+/refs/heads/master/app/pom.xml#20>`__ |
| - nextVersion: version+1 |
| - branch: master |
| - jdkDistro: java-11-amazon-corretto |
| |
| 2. Wait for build to complete |
| |
| 3. Merge the component patches on gerrit |
| - `View <https://gerrit.opencord.org/q/owner:do-not-reply%2540opennetworking.org>`_ |
| - Two pull requests are created modifying pom.xml. |
| - Approve patch one (-SNAPSHOT: no) to initiate a release build. |
| - Approve patch two (-SNAPSHOT: yes) to revert pom.xml to a non-release version. |
| |
| 4. Approval and merge will trigger `jenkins::maven-publish_sadis <https://jenkins.opencord.org/job/maven-publish_sadis/>`_ |
| that will publish an artifact into the staging repo on `sonatype <https://oss.sonatype.org>`_. |
| Once published to the staging server the artifact will need to be released to maven central. |
| |
| - Login into the sonatype server (for username and password contact mroth@linuxfoundation.org) |
| - search for org.opencord |
| - Select the app you want to release and click "all versions" |
| - Click on "Staging repositories" (in the left side navigation) |
| - In the top right search for last part of the app name (eg: olt) |
| - Click release (top left bar, small button) |
| |
| 5. Wait until the artifacts are published |
| |
| - https://search.maven.org/search?q=g:org.opencord |
| - https://search.maven.org/artifact/org.opencord/dhcpl2relay/2.9.0/pom |
| |
| 6. Iterate through apps: |
| |
| - Modify pom.xml and dependencies.xml |
| - Update version string for all released dependencies. |
| |
| 7. Start over with the next app |
| |
| ss.. note:: |
| Given component inter dependencies, ONOS apps need to be released in order: |
| |
| 1. sadis |
| 2. olt, aaa, dhcpl2relay, mcast, igmpproxy, maclearning |
| 3. bng, PPPoE |
| 4. kafka |
| |
| ONOS APPs: |
| |
| - `AAA <https://github.com/opencord/aaa>`_ |
| - `BNG <https://github.com/opencord/bng>`_ |
| - `DHCP L2 Relay <https://github.com/opencord/dhcpl2relay>`_ |
| - `IGMPProxy <https://github.com/opencord/igmpproxy>`_ |
| - `Kafka <https://github.com/opencord/kafka-onos>`_ |
| - `Mac Learning <https://github.com/opencord/mac-learning>`_ |
| - `Multicast <https://github.com/opencord/mcast>`_ |
| - `OLT <https://github.com/opencord/olt>`_ |
| - `OLT Topology <https://github.com/opencord/olttopology>`_ |
| - `PPPoE Agent <https://github.com/opencord/pppoeagent>`_ |
| - `Sadis <https://github.com/opencord/sadis>`_ |
| |
| |
| Component releasing and Branching (variations) |
| ---------------------------------------------- |
| |
| - Tagnames |
| |
| .. list-table:: Tagnames |
| :widths: 10, 40 |
| |
| * - Format |
| - Description |
| * - 1.2.3.4 |
| - Default tagname syntax is a semver |
| * - v1.2.3.4 |
| - Repos that contain golang code use tagname {vee}{semver} |
| |
| - branch-then-tag |
| |
| - Only for "primary" repositories: ci, docs, helm & test |
| - Step[1] - create a branch named voltha-X.Y |
| - Step[2] - tag repository attached to branch voltha-X.Y |
| |
| - tag-then-branch |
| |
| - Default/non-primary VOLTHA repos and ONOS components. |
| - Step[1] - tag repository attached to master branch. |
| - Step[2] - create a branch named attached to the release tag. |
| |
| |
| Lazy Branching |
| -------------- |
| |
| Since the v2.11 release all VOLTHA repositories have been branched/tags |
| during release. Explicitly branching all repositoreis provides two benefits, |
| first explict release branching helps avoid blocking on branch creation |
| while creating hotfix branches. Second benefit is all branch/tagged |
| repositories are dated to a release timeframe rather than posted dated |
| when hotfix patch creation is needed. |
| |
| - Primary repos (ci, docs, helm, test) |
| |
| |
| Creating the release |
| -------------------- |
| |
| Once the components have been tested and the release is considered ready |
| there are 4 more elements that need to be tagged: |
| |
| - `VOLTHA Helm Charts <https://github.com/opencord/voltha-helm-charts>`_ |
| - `VOLTHA System Tests <https://github.com/opencord/voltha-system-tests>`_ |
| - `VOLTHA docs <https://github.com/opencord/voltha-docs>`_ |
| - `repo:ci-management <https://gerrit.opencord.org/plugins/gitiles/ci-management>`_ |
| |
| These 4 repos are the only ones that receive a X.Y.Z tag. |
| Other repos that contain individual components have their own |
| versioning/release cadence, driven by SemVer. |
| |
| repo:ci-management |
| ^^^^^^^^^^^^^^^^^^ |
| |
| Jenkins pipelines for building & testing release jobs are retrieved from |
| repository branch=voltha-X.Y. This repository is a dependency for all |
| other VOLTHA repositories that invoke test suites. |
| |
| See Also: :ref:`_Release Repository ci-management` |
| |
| |
| Helm Charts |
| ^^^^^^^^^^^ |
| |
| The official action of creating the voltha-X.Y release is releasing the voltha helm chart, and adapter charts |
| with version:X.Y.Z (e.g. 2.10.0) specified in Chart.yaml within the voltha-helm-charts repo, and within the VERSION |
| file in that repo. |
| A branch named voltha-X.Y needs to be created on the voltha-helm-charts repo. |
| The helm charts repo overall VERSION should also be incremented to the next minor version (X.Y+1-dev), so all X.Y.Z |
| releases of the overall charts repo will happen on the voltha-X.Y branch. |
| |
| Voltha-system-tests |
| ^^^^^^^^^^^^^^^^^^^ |
| Accompanying tests for voltha-X.Y are created by creating a branch created named voltha-X.Y on the voltha-system-tests |
| repo and creating a tag X.Y.Z on that branch. |
| |
| Documentation and Release Notes |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| Release notes for the voltha-X.Y release are created and added to the voltha-docs repo. Please follow the template of |
| past releases, an :doc:`example <voltha_releases/voltha_2.12.rst>` |
| |
| Also, if needed a voltha-X.Y branch is created on docs repo. These release notes also contain all the |
| versions of components that will be released, and may be updated during the final QA process. |
| At release we create a tag X.Y.Z in the VERSION file. |
| |
| CI-Management |
| ^^^^^^^^^^^^^ |
| In the `Ci management <https://github.com/opencord/ci-management>`_ repository create the /voltha-x.y.z folder and copy the /master repos |
| Testing CI jobs should be created that check out the voltha-X.Y branch of the voltha-system-tests repo, testing the |
| charts as checked out with the voltha-X.Y tag of voltha-helm-charts. |
| |
| |
| Release support and bug-fixing |
| ------------------------------ |
| |
| What changes can be brought into the X.Y.Z branch? |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| Has to be a bug or non-code fix. |
| |
| Add a Jira item with type Bug, tag against VOLTHA vX.Y |
| Discuss on the Voltha mailing list, or in all-Voltha meeting, get consensus on whether should be brought to X.Y.z |
| Documentation or other non-code updates are also acceptable |
| |
| What is a bug? Not a new feature! |
| Anything that causes a functional regression test (Robot tests) to fail |
| Severe issue (causes data loss or crash), or frequently occurring -> add to X.Y |
| Issues that are merely annoying and don't cause data loss or a crash, or are very infrequently occurring -> may |
| wait for next release |
| |
| WHen a bug is found please add to tests both on the released version and the master branch, if tests don't cover |
| the bug. Add to Robot tests for integration-related issues, to Unit tests for code-level or functional issues. |
| |
| Update/Fixes to the released version |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| This section shows how to create minor releases on the X.Y.Z branch when a bug fix is required. |
| |
| If a fix is needed to the helm charts: |
| |
| - Make the fix on the master branch of voltha-helm-charts (assuming that it is required in both places). |
| - After the master tests pass, manually cherry-pick the fix to the voltha-X.Y branch (the Chart version would be |
| different, requiring the manual step). |
| - Cherry-picked patchsets on that branch will be checked by the voltha-X.Y branch of tests. |
| - When it passes, submitting the change will make a new X.Y.Z release |
| - Update the documentation to reflect the chart changes, a description of the changes made, and increment the tag |
| on the docs from X.Y.Z to X.Y.Z+1, to reflect the patch change. |
| - If all the charts are updated and working correctly, create a new charts point release by increasing the |
| X.Y.Z VERSION file in the voltha-helm-charts repo. The versions need to be updated in the voltha-docs repo, |
| which needs to be tagged as well, thus releasing it. |
| |
| If a fix is needed to the components/containers that are included by the helm charts: |
| |
| - Develop a fix to the issue on the master branch, get it approved after passing master tests. |
| - Manually cherry-pick to the voltha-X.Y branch of the component (create one if needed) |
| - incrementing the patch version in the VERSION file, |
| - test with the voltha-X.Y version of voltha-system-tests and helm charts. |
| - Update helm charts and go through the helm chart update process above. |
| - Update the voltha-docs with the right version of the component. |
| |
| If a fix is needed to the ONOS apps: |
| |
| - Create a branch here https://gerrit.opencord.org/plugins/gitiles/olt/+/refs/heads/olt-4.1 |
| - then `Git checkout -b <branch-name> opencord/<version>` |
| - Then push a commit changing to `.1-SNAPSHOT` more (see e.g. https://gerrit.opencord.org/c/igmpproxy/+/19589) |
| - Then push you changes (e.g. https://gerrit.opencord.org/c/igmpproxy/+/19590) |
| - Then release as per the process above. |
| |
| See Also |
| ======== |
| - `VOLTHA Release Process <https://docs.voltha.org/master/overview/release_process.html?highlight=charts%20yaml>`_ |
| - `release_notes: Release Process <https://docs.voltha.org/master/release_notes/release_process.html>`_ |
| - `VOLTHA and ONOS Software Update Procedure <https://docs.voltha.org/master/operations/software-upgrade.html?highlight=set%20global%20image>`_ |
| - `Helm Chart Deployment <https://docs.voltha.org/master/voltha-helm-charts/README.html?highlight=voltctl>`_ |