Release Notes
=============

Intent
------
This page details howto create a release notes page on the docs.voltha.org website.


Cookbook: Patch #1
------------------
- `VOL-5009 <https://jira.opencord.org/browse/VOL-5009>`_ - For tracking, create a jira ticket to create a release notes page.
- Clone repository `repo:voltha-docs <https://gerrit.opencord.org/plugins/gitiles/voltha-docs>`_
- Modify `VERSION <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/VERSION>`_ file to prevent publishing.

  - Specify a version string with a -dev suffix (2.11.55-dev)
  - The ``*-dev`` suffix will inhibit publishing release notes to https://docs.voltha.org.
  - Helpful but not required, avoid specifying the new release version until they are finalized.

  - This will help retain a logical initial version string like
    voltha-2.12.0 VS voltha-2.12.22 in case several edits are needed to
    finalize documentation.

- Copy the release notes template to create an empty release notes file:

  - Source: `release_notes/template.rst <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/release_notes>`__.
  - Examine the last release notes file and transfer any relevant generic text into template.rst.
  - % cp `release_notes/template.rst <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/release_notes>`__ `release_notes/voltha_2.12.rst <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/release_notes/voltha_2.11.rst>`_

- Add `release_notes/voltha_2.12.rst <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/release_notes/voltha_2.11.rst>`_ in the index file `release_notes/index.rst <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/release_notes/index.rst>`_

- Modify `config.py <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/conf.py#308>`_ so ``make linkcheck`` will not fail on yet-to-be-generated html release notes file.

- Release notes: content and hilights:

  - Ask `VOLTHA TST(s) <https://opennetworking.org/voltha/>`_ to write up the release notes documentation.
  - ONF will work on filling in the grid of dependent components and apps
    at the bottom as they are built during a release cycle.

- Pre-screen your patch for potential problems, ``make test`` failures will cause patch acceptance to fail.

.. code-block:: bash

    # pre-screen for checkin test problems
    % make sterile
    % make test

    # Summarize make test
    % make test-errors

    # Optional
    % make lint

- Create a patch, request code reviews and merge.
- Wait for the jenkins voltha-docs sync job to complete before continuing on.


Cookbook: Patch #2
------------------
- Once release notes are ready to publish update the version string.
- Modify `VERSION <https://gerrit.opencord.org/plugins/gitiles/voltha-docs/+/refs/heads/master/VERSION>`_ file.
- Remove any vresion suffix decorations such as -dev.
- Increment version string for the upcomign release:

.. code-block:: bash

    # For exmaple increment version string
    2.11.5-dev

    # To the new release version: voltha-2.12
    2.12

- After a code merge and jenkins job has run to generate documentation.
- `https://docs.voltha.org <https://docs.voltha.org/master/index.html>`_ will contain the new release documentation if your version string appears in the top left navigation box on the site.


Release independent changes
---------------------------
- Update `copyright notice dates <https://github.com/joey-onf/copyright/blob/origin/master/notice>`_

  - VALID: Copyright 2017-2023 Open Networking Foundation (ONF) and the ONF Contributors
  - Copyright notice must be inclusive of the date sources were last modified.
  - Use of strings like 2017-present are not valid syntax and can have legal implications.

