.. This work is licensed under a Creative Commons Attribution 4.0 International License.


Introduction
============
This guide describes how to create documentation for the Open Network
Automation Platform (ONAP).  ONAP projects create a variety of document
types depending on the nature of the project. Some projects will create
detailed technical descriptions such as configuration parameters or how
to use or extend the functionality of platform component.
These descriptions may be used together as a reference for that project
and/or be used in documents tailored to a specific user audience and
task they are performing.

Much of the content in this document is derived from similar 
documentation processes used in other Linux Foundation 
Projects including OPNFV and Open Daylight.


End to End View
---------------
ONAP documentation is stored in git repositories, changes are managed
with gerrit reviews, and published documents generated when there is a
change in any source used to build the documentation.

Authors create source for documents in reStructured Text (RST) that is
rendered to HTML and PDF and published on Readthedocs.io.
The developer Wiki or other web sites can reference these rendered 
documents directly allowing projects to easily maintain current release
documentation.

Why reStructuredText/Sphinx?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In the past, standard documentation methods included ad-hoc Word documents, PDFs, 
poorly organized Wikis, and other, often closed, tools like Adobe FrameMaker.
The rise of DevOps, Agile, and Continuous Integration, however, created a paradigm
shift for those who care about documentation because:

1. Documentation must be tightly coupled with code/product releases. In many cases,
particularly with open-source products, many different versions of the same code
can be installed in various production environments. DevOps personnel must have
access to the correct version of documentation.

2. Resources are often tight, volunteers scarce. With a large software base
like ONAP, a small team of technical writers, even if they are also developers,
cannot keep up with a constantly changing, large code base. Therefore, those closest
to the code should document it as best they can, and let professional writers edit for
style, grammar, and consistency.

Plain-text formatting syntaxes, such as reStructuredText, Markdown, and Textile,
are a good choice for documentation because:
  a. They are editor agnostic
  b. The source is nearly as easy to read as the rendered text
  c. Documentation can be treated exactly as source code is (e.g. versioned,
diff'ed, associated with commit messages that can be included in rendered docs)
  d. Shallow learning curve

The documentation team chose reStructuredText largely because of Sphinx, a Python-based
documentation build system, which uses reStructuredText natively. In a code base
as large as ONAP's, cross-referencing between component documentation was deemed
critical. Sphinx and reStructuredText have built-in functionality that makes
collating and cross-referencing component documentation easier.

Which docs should go where?
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Frequently, developers ask where documentation should be created. Should they always use
reStructuredText/Sphinx? Not necessarily. Is the wiki appropriate for anything at all? Yes.

It's really up to the development team. Here is a simple rule:

The more tightly coupled the documentation is to a particular version of the code,
the more likely it is that it should be stored with the code in reStructuredText.

Two examples on opposite ends of the spectrum:

Example 1: API documentation is often stored literally as code in the form of formatted
comment sections. This would be an ideal choice for reStructuredText stored in a doc repo.

Example 2: A high-level document that describes in general how a particular component interacts
with other ONAP components with charts. The wiki would be a better choice for this.

The doc team encourages component teams to store as much documentation as reStructuredText
as possible because:

1. The doc team can more easily edit component documentation for grammar, spelling, clarity, and consistency.
2. A consistent formatting syntax across components will allow the doc team more flexibility in producing different kinds of output.
3. The doc team can easily re-organize the documentation.
4. Wiki articles tend to grow stale over time as the people who write them change positions or projects.

Structure
---------
A top level master_document structure is used to organize all 
documents for an ONAP release that reside in the doc git repository. 
Complete documents or guides may reside here and reference parts of 
source for documentation from other project repositories 
A starting structure is shown below and may change as content is
intergrated for each release.   Others ONAP projects will provide
content that is referenced from this structure.

.. index:: master


::

        docs/
        ├── release
        │   ├── overview
        │   ├── architecture
        │   ├── use-cases
        │   ├── tutorials
        │   └── release-notes
        ├── onap-developer
        │   ├── design
        │   ├── develop
        │   ├── document
        │   └── test
        ├── adminstrator
        │   ├── configure
        │   ├── deploy
        │   └── operate
        ├── service-designer
        │   ├── deploy
        │   ├── design
        │   └── portal
        └── vnf-provider
            ├── guidelines
            └── sdk



Source Files
------------
All documentation for a project should be structured and stored 
in or below `<your_project_repo>/docs/` directory as Restructured Text.
ONAP jenkins jobs that verify and merge documentation are triggered by
file changes in the docs directory and below.


.. index:: licensing

Licencing
---------
All contributions to the ONAP project are done in accordance with the
ONAP licensing requirements.   Documentation in ONAP is contributed
in accordance with the `Creative Commons 4.0 <https://creativecommons.org/licenses/by/4.0/>`_ license.
All documentation files need to be licensed using the text below. 
The license may be applied in the first lines of all contributed RST 
files:

.. code-block:: bash

 .. This work is licensed under a Creative Commons Attribution 4.0 International License.
 .. (c) <optionally add copyrights company name>

 These lines will not be rendered in the html and pdf files.



Templates
---------
To encourage consistency of information across components, some
templates are available as a starting point under `doc/docs/templates/`
and listed below.  With the "show source" feature on html pages, you
may be able to use portions of an existing page as starting point for
creating new content.


.. toctree::
   :maxdepth: 1
   :glob:

   ../../../templates/**/index
   
