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

Releases
========
ONAP is developed and released around 6 month cycles. After an initial
major release, additional stable point releases may be created.  The first
release is Amsterdam and subsequent major release will be named using city
names.


Amsterdam Release
-----------------

Summary
+++++++

Functionality
+++++++++++++


Project Specific Release Notes
++++++++++++++++++++++++++++++
Major and stable point releases are specified by a list of project artifact
versions in a :ref:`manifest here<doc-release-manifest>`.
Each project provides detailed :ref:`release notes here <doc-releaserepos>`
and prepends to these if/when any updated versions, the project team believes
are compatible with major release, are made available.


Supported Platforms
+++++++++++++++++++


Documentation
+++++++++++++
Release controlled documentation is available :ref:`here <master_index>`.
For Amsterdam this includes:

* A high level architecture view of how components delivered by all projects
  relate to each other are :ref:`available here <doc-architecture>`.

* A collection of documentation provided by each project and for some projects
  several components / repositories within the project
  are :ref:`available here <doc-repolist>`.

* Application Programming Interface Reference :ref:`available here <doc-apiref>`

* The `developer wiki <http://wiki.onap.org>`_ remains a good source of
  information on meeting plans and notes from committees, project teams,
  community events and general, release independent information about
  ONAP.  Release dependent information is being migrated from the wiki to
  gerrit source control. See the doc
  project :ref:`release notes <doc-release-notes>` for current status.


Known Issues and Limitations
++++++++++++++++++++++++++++
TBP overall / general statement
See :ref:`release notes <doc-releaserepos>` for each project.

License
+++++++


How to Report a Bug
+++++++++++++++++++


Download and Use
++++++++++++++++

* Source Code in Gerrit https://gerrit.onap.org

* Artifacts in Nexus / Docker Hub

* Platform :ref:`Demo <demo-installing-running-onap>`.

