.. This work is licensed under a Creative Commons Attribution 4.0
   International License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) ONAP Project and its contributors

***********************
<project> Release Notes
***********************

.. note::
   * The release note needs to be updated for each ONAP release
   * Except the section "Release data" all other sections are optional and should be
     applied where applicable
   * Only the current release is to be documented in this document
   * This note needs to be removed before publishing the final result

Abstract
========

This document provides the release notes for the ``<releasename>`` release.

Summary
=======

<Give a high level description of your project with regards to this
specific release>


Release Data
============

+--------------------------------------+--------------------------------------+
| **Project**                          | <project name>                       |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Docker images**                    |  make sure you include all docker    |
|                                      |  images including the                |
|                                      |  release version                     |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release designation**              | <release name followed by version>   |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     | <DD/MM/YYYY>                         |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

New features
------------

<Describe new features or other new additions>

**Bug fixes**

- `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and a sentence explaining
  what this defect is addressing.

**Known Issues**

- `CIMAN-65 <https://jira.onap.org/browse/CIMAN-65>`_ and two to three sentences
  explaining what this issue is.

Deliverables
------------

Software Deliverables
~~~~~~~~~~~~~~~~~~~~~


Documentation Deliverables
~~~~~~~~~~~~~~~~~~~~~~~~~~


Known Limitations, Issues and Workarounds
=========================================

System Limitations
------------------

Any known system limitations.


Known Vulnerabilities
---------------------

Results of know vulnerabilities analysis in used modules.


Workarounds
-----------

Any known workarounds.


Security Notes
--------------

**Fixed Security Issues**

List of security issues fixed in this release including CVEs and OJSI
tickets.

**Known Security Issues**

List of new security issues that are left unfixed in this release including
CVEs and OJSI tickets.


Test Results
============
List or refer to any project specific results


References
==========

For more information on the ONAP ``<release name>`` release, please see:

#. `ONAP Home Page`_
#. `ONAP Documentation`_
#. `ONAP Release Downloads`_
#. `ONAP Wiki Page`_


.. _`ONAP Home Page`: https://www.onap.org
.. _`ONAP Wiki Page`: https://wiki.onap.org
.. _`ONAP Documentation`: https://docs.onap.org
.. _`ONAP Release Downloads`: https://git.onap.org
