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