Initial commit to DOC Project Beijing branch
[doc.git] / docs / guides / onap-developer / how-to-use-docs / include-documentation.rst
1 .. This work is licensed under a Creative Commons Attribution 4.0
2 .. International License. http://creativecommons.org/licenses/by/4.0
3 .. Copyright 2017 AT&T Intellectual Property.  All rights reserved.
4
5
6 Setting Up
7 ==========
8
9 Some initial set up is required to connect a project with
10 the master document structure and enable automated publishing of
11 changes as summarized in the following diagram and description below
12 below.
13
14 .. seqdiag::
15    :height: 700
16    :width: 1000
17
18    seqdiag {
19      DA [label = "Doc Project\nAuthor/Committer",   color=lightblue];
20      DR [label = "Doc Gerrit Repo" ,                     color=pink];
21      PR [label = "Other Project\nGerrit Repo",          color=pink ];
22      PA [label = "Other Project\nAuthor/Committer", color=lightblue];
23
24      PA  ->   DR [label = "Add project repo as\ngit submodule" ];
25      DR  ->   DA [label = "Review & Plan to\nIntegrate Content with\nTocTree Structure" ];
26      DR  <--  DA [label = "Vote +2/Merge" ];
27      PA  <--  DR [label = "Merge Notification" ];
28      PA  ->   PR [label = "Create in project repo\ntop level directory and index.rst" ];
29      PR  ->   DA [label = "Add as Reviewer" ];
30      PR  <--  DA [label = "Approve and Integrate" ];
31      PA  <--  PR [label = "Merge" ];
32      }
33
34 Setup project repositories(s)
35 -----------------------------
36 These steps are performed for each project repository that
37 provides documentation.
38
39 First let's set two variables that will be used in the subsequent steps.
40 Set *reponame* to the project repository you are setting up
41 just as it appears in the **Project Name** column of
42 the Gerrit projects page.
43 Set *lfid* to your Linux Foundation identity that you use to
44 login to gerrit or for git clone requests over ssh.
45
46 .. code-block:: bash
47
48    reponame=
49    lfid=
50
51 The next step is to add a directory in the doc project where your
52 project will be included as a submodule and at least one reference
53 from the doc project to the documentation index in your repository.
54 The following sequence will do this over ssh.
55
56 .. caution::
57
58    If your access network restricts ssh, you will need to use equivalent
59    git commands and HTTP Passwords as described `here <http://wiki.onap.org/x/X4AP>`_.
60
61 .. code-block:: bash
62
63    git clone ssh://$lfid@gerrit.onap.org:29418/doc
64    cd doc
65    mkdir -p `dirname docs/submodules/$reponame`
66    git submodule add ../$reponame docs/submodules/$reponame.git
67    git submodule init docs/submodules/$reponame.git
68    git submodule update docs/submodules/$reponame.git
69
70    echo "   $reponame <../submodules/$reponame.git/docs/index>" >> docs/release/repolist.rst
71
72    git add .
73    git commit -s
74    git review
75
76 .. caution::
77    Wait for the above change to be merged before any merge to the
78    project repository that you have just added as a submodule.
79    If the project repository added as submodule changes before the
80    doc project merge, git may not automatically update the submodule
81    reference on changes and/or the verify job will fail in the step below.
82
83
84 The last step is to create a docs directory in your repository with
85 an index.rst file.  The following sequence will complete the minimum
86 required over ssh.  As you have time to convert or add new content you
87 can update the index and add files under the docs folder.
88
89 .. hint::
90    If you have additional content, you can include it by editing the
91    index.rst file and/or adding other files before the git commit.
92    See `Templates and Examples`_ below and :ref:`converting-to-rst`
93    for more information.
94
95
96 .. code-block:: bash
97
98    git clone ssh://$lfid@gerrit.onap.org:29418/$reponame
99    cd $reponame
100    mkdir docs
101    echo ".. This work is licensed under a Creative Commons Attribution 4.0 International License.
102
103    TODO Add files to toctree and delete this header
104    ------------------------------------------------
105    .. toctree::
106       :maxdepth: 1
107
108    " >  docs/index.rst
109
110    git add .
111    git commit -s
112    git review
113
114
115 The diagram below illustrates what is accomplished in the setup steps
116 above from the perspective of a file structure created for a local test,
117 a jenkins verify job, and/or published release documentation including:
118
119 - ONAP gerrit project repositories,
120
121 - doc project repository master document index.rst, templates,
122   configuration, and other documents
123
124 - submodules directory where other project repositories and
125   directories/files are referenced
126
127 - file structure: directories (ellipses), files(boxes)
128
129 - references: directory/files (solid edges), git submodule
130   (dotted edges), sphinx toctree (dashed edges)
131
132 .. graphviz::
133
134
135    digraph docstructure {
136    size="8,12";
137    node [fontname = "helvetica"];
138    // Align gerrit repos and docs directories
139    {rank=same doc aaf aai reponame repoelipse vnfsdk vvp}
140    {rank=same confpy release templates masterindex submodules otherdocdocumentelipse}
141    {rank=same releasedocumentindex releaserepolist}
142
143    //Illustrate Gerrit Repos and provide URL/Link for complete repo list
144    gerrit [label="gerrit.onap.org/r", href="https://gerrit.onap.org/r/#/admin/projects/" ];
145    doc [href="https://gerrit.onap.org/r/gitweb?p=doc.git;a=tree"];
146    gerrit -> doc;
147    gerrit -> aaf;
148    gerrit -> aai;
149    gerrit -> reponame;
150    gerrit -> repoelipse;
151              repoelipse [label=". . . ."];
152    gerrit -> vnfsdk;
153    gerrit -> vvp;
154
155    //Show example of local reponame instance of component info
156    reponame -> reponamedocsdir;
157    reponamesm -> reponamedocsdir;
158                     reponamedocsdir [label="docs"];
159    reponamedocsdir -> repnamedocsdirindex;
160                          repnamedocsdirindex [label="index.rst", shape=box];
161
162    //Show detail structure of a portion of doc/docs
163    doc  -> docs;
164    docs -> confpy;
165            confpy [label="conf.py",shape=box];
166    docs -> masterindex;
167            masterindex [label="Master\nindex.rst", shape=box];
168    docs -> release;
169    docs -> templates;
170    docs -> otherdocdocumentelipse;
171            otherdocdocumentelipse [label="...other\ndocuments"];
172    docs -> submodules
173
174    masterindex -> releasedocumentindex [style=dashed, label="sphinx\ntoctree\nreference"];
175
176    //Show submodule linkage to docs directory
177    submodules -> reponamesm [style=dotted,label="git\nsubmodule\nreference"];
178                  reponamesm [label="reponame.git"];
179
180    //Example Release document index that references component info provided in other project repo
181    release -> releasedocumentindex;
182               releasedocumentindex [label="index.rst", shape=box];
183    releasedocumentindex -> releaserepolist [style=dashed, label="sphinx\ntoctree\nreference"];
184         releaserepolist  [label="repolist.rst", shape=box];
185    release -> releaserepolist;
186    releaserepolist -> repnamedocsdirindex [style=dashed, label="sphinx\ntoctree\nreference"];
187
188    }
189
190 Branches in the DOC Project
191 ---------------------------
192
193 The DOC project 'master' branch aggregates the 'latest' content
194 from all ONAP project repositories contributing documentation into a
195 single tree file structure as described in the previous section.  This
196 branch is continuously integrated and deployed at Read The
197 Docs as the 'latest' ONAP Documentation by:
198
199 * Jenkins doc-verify-rtd and doc-merge-rtd jobs triggered whenever patches on
200   contributing repositories contain rst files at or below a top level
201   'docs' folder.
202
203 * Subscription in the DOC project to changes in submodule repositories.
204   These changes appear in the DOC project as commits with title
205   'Updated git submodules' when a change to a contributing project
206   repository is merged.  No DOC project code review occurs, only a
207   submodule repository commit hash is updated to track the head of each
208   contributing master branch.
209
210 For each ONAP named release the DOC project creates a branch with the
211 release name.  The timing of the release branch is determined by
212 work needed in the DOC project to prepare the release branch and the
213 amount of change unrelated to the release in the master branch.
214 For example contributing projects that create named release branches
215 early to begin work on the next release and/or contributing projects
216 to the master that are not yet part of the named release would result
217 in an earlier named release branch to cleanly separate work to stabilize
218 a release from other changes in the master branch.
219
220 A named release branch is integrated and deployed at Read The Docs
221 as the 'named release' by aggregating content from contributing
222 project repositories.  A contributing project repository can
223 choose one of the following for the 'named release' branch:
224
225 * Remove the contributing project repository submodule and RST
226   references when not part of the named release.
227
228 * Provide a commit hash or tag for the contributing project master
229   branch to be used for the life of the release branch or until a
230   request is submitted to change the commit hash or tag.
231
232 * Provide the commit hash for the head of a named release branch
233   created in the contributing project repository.  This option
234   may be appropriate if frequent changes are expected over the
235   life of the named release and work the same way as the continuous
236   integration and deployment described for the master branch.
237
238 The decision on option for each contributing project repository
239 can be made or changed before the final release is approved.  The
240 amount of change and expected differences between master and a
241 named release branch for each repository should drive the choice of
242 option and timing.
243
244 About GIT branches
245 ------------------
246
247 GIT is a powerful tool allowing many actions, but without respecting some rules
248 the GIT structure can be quickly hard to maintain.
249
250 Here are some conventions about GIT branches:
251
252   - ALWAYS create a local branch to edit or create any file. This local branch
253     will be considered as a topic in Gerrit and allow contributors to
254     work at the same time on the same project.
255
256   - 1 feature = 1 branch. In the case of documentation, a new chapter
257     or page about a new code feature can be considered as a 'doc feature'
258
259   - 1 bug = 1 branch. In the case of documentation, a correction on an
260     existing sentence can be considered as a 'doc bug'
261
262   - the master branch is considered as "unstable", containing new features that
263     will converge to a stable situation for the release date.
264
265 The day of the release, the repository owner will create a new branch to
266 fix the code and documentation. This will represent the 'stable' code of the
267 release. In this context:
268
269   - NEVER push a new feature on a stable branch
270
271   - Only bug correction are authorized on a stable branch using
272     cherry pick method
273
274 .. image:: git_branches.png
275
276 Creating Restructured Text
277 ==========================
278
279 Templates and Examples
280 ----------------------
281 Templates are available that capture the kinds of information
282 useful for different types of projects and provide some examples of
283 restructured text.  We organize templates in the following way to:
284
285  - help authors understand relationships between documents
286
287  - keep the user audience context in mind when writing and
288
289  - tailor sections for different kinds of projects.
290
291
292 **Sections** Represent a certain type of content. A section
293 is **provided** in an project repository, to describe something about
294 the characteristics, use, capability, etc. of things in that repository.
295 A section may also be **referenced** from other sections and in
296 other repositories.  For example, an API specification provided in a project
297 repository might be referenced to in a Platform API Reference Guide.
298 The notes in the beginning of each section template provide
299 additional detail about what is typically covered and where
300 there may be references to the section.
301
302 **Collections** Are a set of sections that are typically provided
303 for a particular type of project, repository, guide, reference manual, etc.
304 For example, a collection for a platform component, an SDK, etc.
305
306 You can: browse the template *collections* and *sections* below;
307 show source to look at the Restructured Text and Sphinx directives used;
308 copy the source either from a browser window or by downloading the
309 file in raw form from
310 the `gerrit doc repository <https://gerrit.onap.org/r/gitweb?p=doc.git;a=tree;f=docs/templates;/>`_ and
311 then add them to your repository docs folder and index.rst.
312
313
314 Sections
315 ++++++++
316
317 .. toctree::
318    :maxdepth: 1
319    :glob:
320
321    ../../../templates/sections/*
322
323
324 Collections
325 +++++++++++
326
327 .. toctree::
328    :maxdepth: 1
329    :glob:
330
331    ../../../templates/collections/*
332
333
334
335 In addition to these simple templates and examples
336 there are many open source projects (e.g. Open Daylight, Open Stack)
337 that are using Sphinx and Readthedocs where you may find examples
338 to start with.  Working with project teams we will continue to enhance
339 templates here and capture frequently asked questions on the developer
340 wiki question topic `documentation <https://wiki.onap.org/questions/topics/16384055/documentation>`_.
341
342 Each project should:
343
344  - decide what is relevant content
345
346  - determine the best way to create/maintain it in the CI/CD process and
347
348  - work with the documentation team to reference content from the
349    master index and guides.
350
351 Consider options including filling in a template, identifying existing
352 content that can be used as is or easily converted, and use of Sphinx
353 directives/extensions to automatically generate restructured text
354 from other source you already have.
355
356 Links and References
357 --------------------
358 It's pretty common to want to reference another location in the
359 ONAP documentation and it's pretty easy to do with
360 reStructuredText. This is a quick primer, more information is in the
361 `Sphinx section on Cross-referencing arbitrary locations
362 <http://www.sphinx-doc.org/en/stable/markup/inline.html#ref-role>`_.
363
364 Within a single document, you can reference another section simply by::
365
366    This is a reference to `The title of a section`_
367
368 Assuming that somewhere else in the same file there a is a section
369 title something like::
370
371    The title of a section
372    ^^^^^^^^^^^^^^^^^^^^^^
373
374 It's typically better to use ``:ref:`` syntax and labels to provide
375 links as they work across files and are resilient to sections being
376 renamed. First, you need to create a label something like::
377
378    .. _a-label:
379
380    The title of a section
381    ^^^^^^^^^^^^^^^^^^^^^^
382
383 .. note:: The underscore (_) before the label is required.
384
385 Then you can reference the section anywhere by simply doing::
386
387     This is a reference to :ref:`a-label`
388
389 or::
390
391     This is a reference to :ref:`a section I really liked <a-label>`
392
393 .. note:: When using ``:ref:``-style links, you don't need a trailing
394           underscore (_).
395
396 Because the labels have to be unique, it usually makes sense to prefix
397 the labels with the project name to help share the label space, e.g.,
398 ``sfc-user-guide`` instead of just ``user-guide``.
399
400 Testing
401 =======
402
403 One RST File
404 ------------
405 It is recommended that all rst content is validated by `doc8 <https://pypi.python.org/pypi/doc8>`_ standards.
406 To validate your rst files using doc8, install doc8.
407
408 .. code-block:: bash
409
410    sudo pip install doc8
411
412 doc8 can now be used to check the rst files. Execute as,
413
414 .. code-block:: bash
415
416    doc8 --ignore D000,D001 <file>
417
418
419
420 One Project
421 -----------
422 To test how the documentation renders in HTML, follow these steps:
423
424 Install virtual environment.
425
426 .. code-block:: bash
427
428    sudo pip install virtualenv
429    cd /local/repo/path/to/project
430
431 Download the doc repository.
432
433 .. code-block:: bash
434
435    git clone http://gerrit.onap.org/r/doc
436
437 Change directory to doc & install requirements.
438
439 .. code-block:: bash
440
441    cd doc
442    sudo pip install -r etc/requirements.txt
443
444 Move the conf.py file to your project folder where RST files have been kept:
445
446 .. code-block:: bash
447
448    mv doc/docs/conf.py <path-to-your-folder>/
449
450 Move the static files to your project folder:
451
452 .. code-block:: bash
453
454    mv docs/_static/ <path-to-your-folder>/
455
456 Build the documentation from within your project folder:
457
458 .. code-block:: bash
459
460    sphinx-build -b html <path-to-your-folder> <path-to-output-folder>
461
462 Your documentation shall be built as HTML inside the
463 specified output folder directory.
464
465 .. note:: Be sure to remove the `conf.py`, the static/ files and the output folder from the `<project>/docs/`. This is for testing only. Only commit the rst files and related content.
466
467 .. _building-all-documentation:
468
469 All Documentation
470 -----------------
471 To build the all documentation under doc/, follow these steps:
472
473 Install virtual environment.
474
475 .. code-block:: bash
476
477    sudo pip install virtualenv
478    cd /local/repo/path/to/project
479
480 Download the DOC repository.
481
482 .. code-block:: bash
483
484    git clone http://gerrit.onap.org/r/doc
485
486 Build documentation using tox local environment & then open using any browser.
487
488 .. code-block:: bash
489
490    cd doc
491    tox -elocal
492    firefox docs/_build/html/index.html
493
494 .. note:: Make sure to run `tox -elocal` and not just `tox`.
495
496 There are additional tox environment options for checking External
497 URLs and Spelling.  Use the tox environment options below and then
498 look at the output with the Linux `more` or similar command for
499 scanning for output that applies to the files you are validating.
500
501 .. code-block:: bash
502
503    tox -elinkcheck
504    more <  docs/_build/linkcheck/output.txt
505
506    tox -espellcheck
507    more <  docs/_build/spellcheck/output.txt
508