.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. SPDX-License-Identifier: CC-BY-4.0
.. ===============LICENSE_START=======================================================
.. Copyright (C) 2019 AT&T Intellectual Property      
.. ===================================================================================
.. This documentation file is distributed under the Creative Commons Attribution 
.. 4.0 International License (the "License"); you may not use this file except in 
.. compliance with the License.  You may obtain a copy of the License at
..
.. http://creativecommons.org/licenses/by/4.0
..
.. This file is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
.. ===============LICENSE_END=========================================================


This document provides the release notes for <RELEASE> of <COMPONENT>.

.. contents::
   :depth: 3
   :local:


Release Notes
=============

Version history
---------------

+--------------------+--------------------+--------------------+--------------------+
| **Date**           | **Ver.**           | **Author**         | **Comment**        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2020-12-14         | 0.3.0              | Zhe Huang          |                    |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2020-08-01         | 0.2.1              | Lusheng Ji         |                    |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2020-06-20         | 0.2.0              | Lusheng Ji         |                    |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+
| 2019-11-12         | 0.1.0              | Lusheng Ji         | First draft        |
|                    |                    |                    |                    |
+--------------------+--------------------+--------------------+--------------------+


Releases
--------

0.3.0
^^^^^

**Release designation**: Cherry

**Release Date**: 2020-12-14

The 0.3.0 version of the it/dep repository hosts deployment and integration artifacts such as scripts, Helm charts, and other files used for deploying the Cherry Release of O-RAN SC software.

- Provide Helm 3 support for near-realtime RIC and AUX.
- Deployment scripts for O-DU high project.
- Deployment scripts for smo project.
- Add rApp Catalogue and enrichmentservice helm charts for non-realtime RIC.
- Update the deployment recipes for all the O-RAN SC software to use the Cherry release images.

0.2.1
^^^^^
**Release designation**: Bronze Maintenance Release

**Release Date**: 2020-08-01

- Added demo scripts for Bronze "Get Started" demontsrations.

0.2.0
^^^^^

**Release designation**: Bronze

**Release Date**: 2020-06-21

The 0.2.0 version of the it/dep repository hosts deployment and integration artifacts such as scripts, Helm charts, and other files used for deploying the Bronze Release of O-RAN SC software.

- Deployment scripts for dev-test 1-node Kubernetes cluster.
- Deployment scripts and Helm charts for O-RAN Near Realtime RAN Intelligent Controller Platform.
- Deployment scripts and Helm charts for O-RAN Non Realtime RAN Intelligent Controller.
- Deployment scripts for O-RAN Software Management and Orchestration.
- Demonstration and testing scripts for use cases.



0.1.0
^^^^^
**Release designation**: Amber

**Release Date**: 2019-11-22

The Amber Release of it/dep repositoy hosts deployment and integration artifacts such as scripts, Helm charts, and other files used for deploying O-RAN SC software.

For Amber release this repo contains:

- Deployment scripts for a dev-test 1-node Kubernetes cluster.
- Deployment scripts and Helm charts for Near Realtime RAN Intelligent Controller Platform.
- Deployment scripts and Helm charts for infrastructure services supporting the Near Realtime RAN Intelligent Controller Platform.
- Deployment scripts and Helm charts for auxiliary services and components for operating the Near Realtime RAN Intelligent Controller Platform.




Feature additions
-----------------

**JIRA BACK-LOG:**

+--------------------------------------+--------------------------------------+
| **JIRA REFERENCE**                   | **SLOGAN**                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 		                       | 				      |
|                                      | 				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 	                               |  				      |
|                                      |  				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

Bug corrections
----------------

**JIRA TICKETS:**

+--------------------------------------+--------------------------------------+
| **JIRA REFERENCE**                   | **SLOGAN**                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 		                       | 				      |
|                                      | 				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 	                               |  				      |
|                                      |  				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+



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

Software deliverables
^^^^^^^^^^^^^^^^^^^^^

The deployment artifacts can be accessed by cloning Git repository:

  git clone https://gerrit.o-ran-sc.org/r/it/dep -b cherry


Documentation deliverables
^^^^^^^^^^^^^^^^^^^^^^^^^^

Documentation for installing, usinhg, and developing for Integraion and Testing project can be found at: 

  https://docs.o-ran-sc.org/projects/o-ran-sc-it-dep/en/latest/index.html



Known Limitations, Issues, and Workarounds
------------------------------------------


System Limitations
^^^^^^^^^^^^^^^^^^


Known issues
^^^^^^^^^^^^

**JIRA TICKETS:**

+--------------------------------------+--------------------------------------+
| **JIRA REFERENCE**                   | **SLOGAN**                           |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 		                       | 				      |
|                                      | 				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+
| 	                               |  				      |
|                                      |  				      |
|                                      |                                      |
+--------------------------------------+--------------------------------------+

Workarounds
^^^^^^^^^^^


References
----------


