.. 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
***********************

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**                          |                                      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Docker images**                    | make sure you include all docker     |
|                                      |  images including the                |
|                                      |  release version                     |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release designation**              |                                      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| **Release date**                     |                                      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

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

<Describe new features or other new additions>


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

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


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


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

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


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


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


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


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
