blob: ae4d6e190db72c8f699a36d7fc88fafe9e35428b [file] [log] [blame]
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>`_