.. SPDX-FileCopyrightText: 2021 Open Networking Foundation <info@opennetworking.org>
.. SPDX-License-Identifier: Apache-2.0

Release Process
===============

Release artifacts
-----------------
There will be 4 major artifacts produced as the result of release process.

- **SD-Fabric Docker image** - This includes all control plane software
- **Stratum Docker image** - This includes Stratum switch OS
- **SD-Fabric Helm charts**
- **SD-Fabric documentation** - The website you are currently viewing

Prerequisite
------------
SD-Fabric releases are guarded by our system integration tests.
Before each release, we check the test result and make sure we have a "green light".
Visit :ref:`testing_guide` for more details.

Stratum Docker image
--------------------
Stratum has its own release process and release timeline.
We request Stratum TST to make a release when necessary.

SD-Fabric Docker Image
----------------------
We tag and release the following repositories in order:

- onos:
    - Run Jenkins release job: https://jenkins.onosproject.org/view/onos-release/job/onos-bazel-release-build/
    - Manually publish artifacts to Maven central: https://oss.sonatype.org/

- trellis-control:
    - Run Jenkins artifact release job: https://jenkins.onosproject.org/view/SD-Fabric/job/artifact-release_sdfabric-onos/ :

        - Exclude ``pom.xml(s)`` through ``egrepExclude`` variable
    - Update ``pom.xml(s)`` in the first review generated by the job:

        - Update dependencies (use non-snapshot onos)
        - Update version
    - Push Gerrit change, merge
    - Wait for Jenkins job to publish artifacts (https://jenkins.onosproject.org/view/Trellis/job/maven-publish_trellis-control)
    - Manually release artifacts: https://oss.sonatype.org/
    - Merge the second review generated by the job

- fabric-tna:
    - Update ``pom.xml``:

        - Update dependencies (use non-snapshot ``onos`` and ``trellis-control``)
        - Update version
    - Tag repository
    - Create a second pull request to start a new development cycle

- up4:
    - Update ``pom.xml(s)``:

        - Update dependencies (use non-snapshot onos)
        - Update version
    - Tag repository
    - Create a second pull request to start a new development cycle

- SD-Fabric image:
    - Update Makefile.stable with git tags used above
    - Merge, wait for Jenkins to publish stable image
    - Manually tag image on Dockerhub

SD-Fabric Helm charts
---------------------
The SD-Fabric umbrella chart includes 5 sub-charts:

  - ONOS classic
  - Stratum
  - PFCP agent
  - DBUF
  - INT host reporter

To update each sub-charts:
  - Update chart version and default image in each charts
  - Post-merge CI job will tag the repositories according to chart version

To update the umbrella charts:
  - Update chart version and dependencies in ``sdfabric-helm-charts/sdfabric/Chart.yaml``
  - Post-merge CI job will tag the repositories according to chart version


SD-Fabric documentation
-----------------------
- Complete release note
- Tag documentation repository for each release
- Branch documentation repository for each major releases
