.. This work is licensed under a Creative Commons Attribution 4.0
   International License. http://creativecommons.org/licenses/by/4.0


.. _dublinrelease-notes:

Dublin Release Notes
^^^^^^^^^^^^^^^^^^^^

This page provides the release notes for the ONAP Dublin release. This includes details of software versions used, known limitations, and
outstanding trouble reports.

Release notes are cumulative for the release, meaning this release note for the Dublin release will have an entry for each Major, Minor, and Maintenance
release, if applicable.

Each component within the ONAP solution maintains their own component level release notes and links to those release notes are provided below.
Details on the specific items delivered in each releaese by each component is maintained in the component specific release notes.

Dublin Major Release 4.0.0
==========================

* Release Name: Dublin
* Release Version: 4.0.0
* Release Date: , 2019

The Dublin 4.0.0 is the first release for Dublin.

Project Specific Release Notes
==============================
ONAP releases are specified by a list of project artifact versions in a :ref:`manifest artifacts <doc-release-manifest-artifacts>`
and :ref:`manifest dockers <doc-release-manifest-docker>`.

.. toctree::
   :hidden:

   release-manifest-docker.rst
   release-manifest.rst

Each project provides detailed :ref:`release notes<doc-releaserepos>`
and prepends to these if/when any updated versions the project team believes
are compatible with a major release are made available.

Documentation
=============
ONAP Dublin Release provides multiple documents, see :ref:`ONAP Home<master_index>`.

The `developer wiki <http://wiki.onap.org>`_ remains a good source of
information on meeting plans and notes from committees, project teams and
community events.

Security Notes
==============
ONAP has adopted the `CII Best Practice Badge Program <https://bestpractices.coreinfrastructure.org/en>`_.
The goal of the Casablanca release is for all ONAP projects to be close to achieving a CII Passing badge.

- `Badging Requirements <https://github.com/coreinfrastructure/best-practices-badge#core-infrastructure-initiative-best-practices-badge>`_
- `Badging Status for all ONAP projects <https://bestpractices.coreinfrastructure.org/en/projects?q=onap>`_

Project specific details are in the :ref:`release notes<doc-releaserepos>` for each project.

.. index:: maturity

ONAP Maturity Testing Notes
===========================
For the Casablanca release, ONAP continues to improve in multiple areas of Scalability, Security, Stability and Performance (S3P) metrics.

The Integration team ran the 72 hours stability testing (100% passing rate) and full resilience testing (96.9% passing rate) at ONAP OpenLabs. More details in :ref:`ONAP Maturity Testing Notes <integration-s3p>`

Known Issues and Limitations
============================
Known Issues and limitations are documented in each :ref:`project Release Notes <doc-releaserepos>`.

.. index:: Reporting Bugs

How to Report a Bug
===================
There are 2 ways to report a bug in ONAP.

 * In case you are familiar within ONAP, you can directly report a bug by
   creating a Jira issue at `ONAP Jira <https://jira.onap.org>`_.

 * If you don't know you are facing a bug or have a question, post your
   question into the `Ask question <https://wiki.onap.org/display/DW/questions/all>`_.
   You will need a Linux Foundation ID to login and post your question.
   Get a Linux Foundation Identity using this `quick procedure <https://wiki.onap.org/display/DW/Joining+the+ONAP+Technical+Community#JoiningtheONAPTechnicalCommunity-WhereDoIStart?>`_.

To properly report a bug in Jira, you may want to consider these `recommendations <https://wiki.onap.org/display/DW/Tracking+Issues+with+JIRA#TrackingIssueswithJIRA-RecommendationsforwrittingProperJIRAIssue>`_ to elaborate the issue you are facing.


.. Include files referenced by link in the toctree as hidden

.. toctree::
   :hidden:

   releaserepos.rst
   repolist.rst
