.. 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<doc-release-manifest>`.
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.


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


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

* A high level :ref:`architecture view<doc-architecture>` of how components
  relate to each other.

* A collection of documentation provided
  by :ref:`each project <doc_onap-developer_guide_projects>`.

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

