blob: fb32a3e369d988c6dc69b50fbad2e75fc48ab1e6 [file] [log] [blame]
Rich Bennettac93e0e2017-07-19 01:36:52 -04001.. This work is licensed under a Creative Commons Attribution 4.0 International License.
2
Rich Bennettac93e0e2017-07-19 01:36:52 -04003
Rich Bennett1da30462017-08-24 12:11:36 -04004Setting Up
5==========
jsseidelda2324a2017-09-15 10:43:14 -04006
Rich Bennetta9d6a442017-08-25 02:37:15 -04007Some initial set up is required to connect a project with
Rich Bennett1da30462017-08-24 12:11:36 -04008the master document structure and enable automated publishing of
Blaisonneau David2963ece2017-11-27 10:07:18 +01009changes as summarized in the following diagram and description below
Rich Bennett1da30462017-08-24 12:11:36 -040010below.
Rich Bennettac93e0e2017-07-19 01:36:52 -040011
Rich Bennett1da30462017-08-24 12:11:36 -040012.. seqdiag::
Rich Bennetta9d6a442017-08-25 02:37:15 -040013 :height: 700
14 :width: 1000
Rich Bennettac93e0e2017-07-19 01:36:52 -040015
Rich Bennett1da30462017-08-24 12:11:36 -040016 seqdiag {
17 RD [label = "Read The Docs", color =lightgreen ];
18 DA [label = "Doc Project\nAuthor/Committer", color=lightblue];
19 DR [label = "Doc Gerrit Repo" , color=pink];
20 PR [label = "Other Project\nGerrit Repo", color=pink ];
21 PA [label = "Other Project\nAuthor/Committer", color=lightblue];
Blaisonneau David2963ece2017-11-27 10:07:18 +010022
Rich Bennett1da30462017-08-24 12:11:36 -040023 === One time setup doc project only ===
Blaisonneau David2963ece2017-11-27 10:07:18 +010024 RD -> DA [label = "Acquire Account" ];
Rich Bennetta9d6a442017-08-25 02:37:15 -040025 DA -> DR [label = "Create initial\n doc repository content"];
26 DA <<-- DR [label = "Merge" ];
Rich Bennett1da30462017-08-24 12:11:36 -040027 RD <-- DA [label = "Connect gerrit.onap.org" ];
Rich Bennette4c42512017-09-06 08:07:22 -040028 === For each project repository containing document source ===
29 PA -> DR [label = "Add project repo as\ngit submodule" ];
30 DR -> DA [label = "Review & Plan to\nIntegrate Content with\nTocTree Structure" ];
31 DR <-- DA [label = "Vote +2/Merge" ];
Blaisonneau David2963ece2017-11-27 10:07:18 +010032 PA <-- DR [label = "Merge Notification" ];
Rich Bennette4c42512017-09-06 08:07:22 -040033 PA -> PR [label = "Create in project repo\ntop level directory and index.rst" ];
Rich Bennett358472a2017-08-31 08:05:36 -040034 PR -> DA [label = "Add as Reviewer" ];
35 PR <-- DA [label = "Approve and Integrate" ];
36 PA <-- PR [label = "Merge" ];
Rich Bennett1da30462017-08-24 12:11:36 -040037 }
Blaisonneau David2963ece2017-11-27 10:07:18 +010038
39
Rich Bennettac93e0e2017-07-19 01:36:52 -040040
Rich Bennett1da30462017-08-24 12:11:36 -040041Setup doc project
42-----------------
43These steps are performed only once for the doc project and include:
Rich Bennettac93e0e2017-07-19 01:36:52 -040044
Rich Bennett1da30462017-08-24 12:11:36 -040045(1) creating in the doc repository an initial:
Rich Bennett7e34ab32018-04-18 11:03:25 -040046
Blaisonneau David2963ece2017-11-27 10:07:18 +010047 - sphinx master document index
Rich Bennett7e34ab32018-04-18 11:03:25 -040048
Blaisonneau David2963ece2017-11-27 10:07:18 +010049 - a directory structure aligned with the document structure
Rich Bennett7e34ab32018-04-18 11:03:25 -040050
Blaisonneau David2963ece2017-11-27 10:07:18 +010051 - tests performed in jenkins verify jobs
Rich Bennett7e34ab32018-04-18 11:03:25 -040052
Blaisonneau David2963ece2017-11-27 10:07:18 +010053 - sphinx configuration
54
Rich Bennetta9d6a442017-08-25 02:37:15 -040055(2) establishing an account at readthedocs connected with the doc
56doc project repo in gerrit.onap.org.
Rich Bennett1da30462017-08-24 12:11:36 -040057
58
Rich Bennette4c42512017-09-06 08:07:22 -040059Setup project repositories(s)
60-----------------------------
Blaisonneau David2963ece2017-11-27 10:07:18 +010061These steps are performed for each project repository that provides documentation.
Rich Bennett1da30462017-08-24 12:11:36 -040062
Rich Bennett5baea462017-09-13 03:19:19 -040063First let's set two variables that will be used in the subsequent steps.
Rich Bennette4c42512017-09-06 08:07:22 -040064Set reponame to the project repository you are setting up just as it appears in the
65**Project Name** column of the Gerrit projects page.
66Set lfid to your Linux Foundation identity that you use to login to gerrit or for git
67clone requests over ssh.
68
69.. code-block:: bash
70
71 reponame=
72 lfid=
73
Blaisonneau David2963ece2017-11-27 10:07:18 +010074The next step is to add a directory in the doc project where your project will be included as a
Rich Bennette4c42512017-09-06 08:07:22 -040075submodule and at least one reference from the doc project to the documentation index in your repository.
Rich Bennett5baea462017-09-13 03:19:19 -040076The following sequence will do this over ssh.
77
78.. caution::
79
80 If your access network restricts ssh, you will need to use equivalent git commands and
81 HTTP Passwords as described `here <http://wiki.onap.org/x/X4AP>`_.
Blaisonneau David2963ece2017-11-27 10:07:18 +010082
Rich Bennett358472a2017-08-31 08:05:36 -040083.. code-block:: bash
84
Rich Bennette4c42512017-09-06 08:07:22 -040085 git clone ssh://$lfid@gerrit.onap.org:29418/doc
Rich Bennett358472a2017-08-31 08:05:36 -040086 cd doc
87 mkdir -p `dirname docs/submodules/$reponame`
Rich Bennett2360e212017-09-20 08:26:05 -040088 git submodule add ../$reponame docs/submodules/$reponame.git
Rich Bennette4c42512017-09-06 08:07:22 -040089 git submodule init docs/submodules/$reponame.git
90 git submodule update docs/submodules/$reponame.git
Rich Bennett358472a2017-08-31 08:05:36 -040091
Rich Bennette4c42512017-09-06 08:07:22 -040092 echo " $reponame <../submodules/$reponame.git/docs/index>" >> docs/release/repolist.rst
Blaisonneau David2963ece2017-11-27 10:07:18 +010093
Rich Bennett358472a2017-08-31 08:05:36 -040094 git add .
Rich Bennette4c42512017-09-06 08:07:22 -040095 git commit -s
Rich Bennett358472a2017-08-31 08:05:36 -040096 git review
Blaisonneau David2963ece2017-11-27 10:07:18 +010097
Rich Bennett5baea462017-09-13 03:19:19 -040098.. caution::
99 Wait for the above change to be merged before any merge to the
100 project repository that you have just added as a submodule.
101 If the project repository added as submodule changes before the doc project merge, git may not
102 automatically update the submodule reference on changes and/or the verify job will
103 fail in the step below.
Rich Bennett358472a2017-08-31 08:05:36 -0400104
105
Rich Bennette4c42512017-09-06 08:07:22 -0400106The last step is to create a docs directory in your repository with an index.rst file.
Rich Bennett5baea462017-09-13 03:19:19 -0400107The following sequence will complete the minimum required over ssh. As you have time
108to convert or add new content you can update the index and add files under the docs folder.
109
110.. hint::
111 If you have additional content, you can include it by editing the
112 index.rst file and/or adding other files before the git commit.
113 See `Templates and Examples`_ below and :ref:`converting-to-rst` for more information.
Blaisonneau David2963ece2017-11-27 10:07:18 +0100114
Rich Bennett1da30462017-08-24 12:11:36 -0400115
116.. code-block:: bash
117
Rich Bennette4c42512017-09-06 08:07:22 -0400118 git clone ssh://$lfid@gerrit.onap.org:29418/$reponame
Rich Bennetta9d6a442017-08-25 02:37:15 -0400119 cd $reponame
Rich Bennett1da30462017-08-24 12:11:36 -0400120 mkdir docs
121 echo ".. This work is licensed under a Creative Commons Attribution 4.0 International License.
122
Rich Bennetta9d6a442017-08-25 02:37:15 -0400123 TODO Add files to toctree and delete this header
124 ------------------------------------------------
Rich Bennett1da30462017-08-24 12:11:36 -0400125 .. toctree::
126 :maxdepth: 1
Blaisonneau David2963ece2017-11-27 10:07:18 +0100127
Rich Bennett1da30462017-08-24 12:11:36 -0400128 " > docs/index.rst
Blaisonneau David2963ece2017-11-27 10:07:18 +0100129
Rich Bennett1da30462017-08-24 12:11:36 -0400130 git add .
Rich Bennette4c42512017-09-06 08:07:22 -0400131 git commit -s
Rich Bennett1da30462017-08-24 12:11:36 -0400132 git review
Blaisonneau David2963ece2017-11-27 10:07:18 +0100133
Rich Bennettac93e0e2017-07-19 01:36:52 -0400134
Rich Bennett1da30462017-08-24 12:11:36 -0400135The diagram below illustrates what is accomplished in the setup steps
Rich Bennetta9d6a442017-08-25 02:37:15 -0400136above from the perspective of a file structure created for a local test,
Rich Bennett358472a2017-08-31 08:05:36 -0400137a jenkins verify job, and/or published release documentation including:
Rich Bennett0c826432017-09-18 17:28:09 -0400138
139- ONAP gerrit project repositories,
140- doc project repository master document index.rst, templates, configuration, and other documents
Blaisonneau David2963ece2017-11-27 10:07:18 +0100141- submodules directory where other project repositories and directories/files are referenced
Rich Bennett0c826432017-09-18 17:28:09 -0400142- file structure: directories (ellipses), files(boxes)
143- references: directory/files (solid edges), git submodule (dotted edges), sphinx toctree (dashed edges)
Rich Bennettac93e0e2017-07-19 01:36:52 -0400144
145
146.. graphviz::
147
Blaisonneau David2963ece2017-11-27 10:07:18 +0100148
Rich Bennettac93e0e2017-07-19 01:36:52 -0400149 digraph docstructure {
150 size="8,12";
151 node [fontname = "helvetica"];
152 // Align gerrit repos and docs directories
Rich Bennetta9d6a442017-08-25 02:37:15 -0400153 {rank=same doc aaf aai reponame repoelipse vnfsdk vvp}
Rich Bennett1da30462017-08-24 12:11:36 -0400154 {rank=same confpy release templates masterindex submodules otherdocdocumentelipse}
Rich Bennett358472a2017-08-31 08:05:36 -0400155 {rank=same releasedocumentindex releaserepolist}
Rich Bennettac93e0e2017-07-19 01:36:52 -0400156
157 //Illustrate Gerrit Repos and provide URL/Link for complete repo list
158 gerrit [label="gerrit.onap.org/r", href="https://gerrit.onap.org/r/#/admin/projects/" ];
Rich Bennett358472a2017-08-31 08:05:36 -0400159 doc [href="https://gerrit.onap.org/r/gitweb?p=doc.git;a=tree"];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400160 gerrit -> doc;
161 gerrit -> aaf;
162 gerrit -> aai;
Blaisonneau David2963ece2017-11-27 10:07:18 +0100163 gerrit -> reponame;
Rich Bennett1da30462017-08-24 12:11:36 -0400164 gerrit -> repoelipse;
165 repoelipse [label=". . . ."];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400166 gerrit -> vnfsdk;
167 gerrit -> vvp;
168
Rich Bennetta9d6a442017-08-25 02:37:15 -0400169 //Show example of local reponame instance of component info
170 reponame -> reponamedocsdir;
Blaisonneau David2963ece2017-11-27 10:07:18 +0100171 reponamesm -> reponamedocsdir;
Rich Bennetta9d6a442017-08-25 02:37:15 -0400172 reponamedocsdir [label="docs"];
Blaisonneau David2963ece2017-11-27 10:07:18 +0100173 reponamedocsdir -> repnamedocsdirindex;
Rich Bennette4c42512017-09-06 08:07:22 -0400174 repnamedocsdirindex [label="index.rst", shape=box];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400175
Blaisonneau David2963ece2017-11-27 10:07:18 +0100176 //Show detail structure of a portion of doc/docs
Rich Bennettac93e0e2017-07-19 01:36:52 -0400177 doc -> docs;
Blaisonneau David2963ece2017-11-27 10:07:18 +0100178 docs -> confpy;
Rich Bennett1da30462017-08-24 12:11:36 -0400179 confpy [label="conf.py",shape=box];
Blaisonneau David2963ece2017-11-27 10:07:18 +0100180 docs -> masterindex;
Rich Bennett358472a2017-08-31 08:05:36 -0400181 masterindex [label="Master\nindex.rst", shape=box];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400182 docs -> release;
Blaisonneau David2963ece2017-11-27 10:07:18 +0100183 docs -> templates;
184 docs -> otherdocdocumentelipse;
Rich Bennett1da30462017-08-24 12:11:36 -0400185 otherdocdocumentelipse [label="...other\ndocuments"];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400186 docs -> submodules
Blaisonneau David2963ece2017-11-27 10:07:18 +0100187
Rich Bennett1da30462017-08-24 12:11:36 -0400188 masterindex -> releasedocumentindex [style=dashed, label="sphinx\ntoctree\nreference"];
Blaisonneau David2963ece2017-11-27 10:07:18 +0100189
Rich Bennett1da30462017-08-24 12:11:36 -0400190 //Show submodule linkage to docs directory
Blaisonneau David2963ece2017-11-27 10:07:18 +0100191 submodules -> reponamesm [style=dotted,label="git\nsubmodule\nreference"];
Rich Bennette4c42512017-09-06 08:07:22 -0400192 reponamesm [label="reponame.git"];
Rich Bennettac93e0e2017-07-19 01:36:52 -0400193
Rich Bennett1da30462017-08-24 12:11:36 -0400194 //Example Release document index that references component info provided in other project repo
Blaisonneau David2963ece2017-11-27 10:07:18 +0100195 release -> releasedocumentindex;
Rich Bennett1da30462017-08-24 12:11:36 -0400196 releasedocumentindex [label="index.rst", shape=box];
Rich Bennett358472a2017-08-31 08:05:36 -0400197 releasedocumentindex -> releaserepolist [style=dashed, label="sphinx\ntoctree\nreference"];
Blaisonneau David2963ece2017-11-27 10:07:18 +0100198 releaserepolist [label="repolist.rst", shape=box];
Rich Bennett358472a2017-08-31 08:05:36 -0400199 release -> releaserepolist;
Rich Bennette4c42512017-09-06 08:07:22 -0400200 releaserepolist -> repnamedocsdirindex [style=dashed, label="sphinx\ntoctree\nreference"];
Blaisonneau David2963ece2017-11-27 10:07:18 +0100201
Rich Bennettac93e0e2017-07-19 01:36:52 -0400202 }
203
Blaisonneau David2963ece2017-11-27 10:07:18 +0100204About GIT branches
205------------------
206
207GIT is a powerful tool allowing many actions, but without respecting some rules
208the GIT structure can be quickly ugly and unmaintaible.
209
210Here are some conventions about GIT branches:
211 - ALWAYS create a local branch to edit or create any file. This local branch
212 will be considered as a topic in Gerrit and allow contributors to work at the
213 same time on the same project.
214 - 1 feature = 1 branch. In the case of documentation, a new chapter or page about
215 a new code feature can be considered as a 'doc feature'
216 - 1 bug = 1 branch. In the case of documentation, a correction on an existing
217 sentence can be considered as a 'doc bug'
218 - the master branch is considered as "unstable", containing new features that
219 will converge to a stable situation for the release date.
220
221The day of the release, the repository owner will create a new branch to
222fix the code and documentation. This will represent the 'stable' code of the
223release. In this context:
Rich Bennett7e34ab32018-04-18 11:03:25 -0400224
Blaisonneau David2963ece2017-11-27 10:07:18 +0100225 - NEVER push a new feature on a stable branch
Rich Bennett7e34ab32018-04-18 11:03:25 -0400226
Blaisonneau David2963ece2017-11-27 10:07:18 +0100227 - Only bug correction are authorized on a stable branch using cherry pick method
228
229.. image:: git_branches.png
230
Rich Bennetta9d6a442017-08-25 02:37:15 -0400231Creating Restructured Text
232==========================
Rich Bennettac93e0e2017-07-19 01:36:52 -0400233
Rich Bennett5baea462017-09-13 03:19:19 -0400234Templates and Examples
235----------------------
Rich Bennett7134cba2017-10-10 07:39:06 -0400236Templates are available that capture the kinds of information
Blaisonneau David2963ece2017-11-27 10:07:18 +0100237useful for different types of projects and provide some examples of
238restructured text. We organize templates in the following way to: help authors
239understand relationships between documents; keep the user audience context in mind when writing;
Rich Bennett7134cba2017-10-10 07:39:06 -0400240and tailor sections for different kinds of projects.
241
242**Sections** Represent a certain type of content. A section is **provided** in a repository, to
243to describe something about the characteristics, use, capability, etc. of things in that repository.
244A section may also be **referenced** from other sections and in other repositories.
245The notes in the beginning of each section template provide
246additional detail about what is typically covered and where there may be references to the section.
247
248**Collections** Are a set of sections that are typically provided for a particular type
249of project, repository, guide, reference manual, etc.
250
251You can: browse the template *collections* and *sections* below; show source to look at the Restructured
252Text and Sphinx directives used; copy the source either from a browser window
Rich Bennett5baea462017-09-13 03:19:19 -0400253or by downloading the file in raw form from
Rich Bennett7134cba2017-10-10 07:39:06 -0400254the `gerrit doc repository <https://gerrit.onap.org/r/gitweb?p=doc.git;a=tree;f=docs/templates;/>`_ and
255then add them to your repository docs folder and index.rst.
256
257
258Sections
259++++++++
Rich Bennett5baea462017-09-13 03:19:19 -0400260
261.. toctree::
262 :maxdepth: 1
263 :glob:
264
Rich Bennett7134cba2017-10-10 07:39:06 -0400265 ../../../templates/sections/*
266
267
268Collections
269+++++++++++
270
271.. toctree::
272 :maxdepth: 1
273 :glob:
274
275 ../../../templates/collections/*
276
277
Rich Bennett5baea462017-09-13 03:19:19 -0400278
Blaisonneau David2963ece2017-11-27 10:07:18 +0100279In addition to these simple templates and examples
Rich Bennett5baea462017-09-13 03:19:19 -0400280there are many open source projects (e.g. Open Daylight, Open Stack)
281that are using Sphinx and Readthedocs where you may find examples to start with.
282Working with project teams we will continue to enhance templates here and
Blaisonneau David2963ece2017-11-27 10:07:18 +0100283capture frequently asked questions on the developer wiki question
Rich Bennett5baea462017-09-13 03:19:19 -0400284topic `documentation <https://wiki.onap.org/questions/topics/16384055/documentation>`_.
285
286Each project should: decide what is relevant content; determine the
287best way to create/maintain it in a CI/CD process; and work with the
288documentation team to reference content from the master index and guides.
Blaisonneau David2963ece2017-11-27 10:07:18 +0100289Consider options including filling in a template,
Rich Bennett5baea462017-09-13 03:19:19 -0400290identifying existing content that can be used as is or
291easily converted, and use of Sphinx directives/extensions to automatically
292generate restructured text from other source you already have.
Rich Bennettac93e0e2017-07-19 01:36:52 -0400293
Rich Bennetta9d6a442017-08-25 02:37:15 -0400294Links and References
Rich Bennett5baea462017-09-13 03:19:19 -0400295--------------------
Rich Bennettac93e0e2017-07-19 01:36:52 -0400296It's pretty common to want to reference another location in the
297ONAP documentation and it's pretty easy to do with
298reStructuredText. This is a quick primer, more information is in the
299`Sphinx section on Cross-referencing arbitrary locations
300<http://www.sphinx-doc.org/en/stable/markup/inline.html#ref-role>`_.
301
302Within a single document, you can reference another section simply by::
303
304 This is a reference to `The title of a section`_
305
306Assuming that somewhere else in the same file there a is a section
307title something like::
308
309 The title of a section
310 ^^^^^^^^^^^^^^^^^^^^^^
311
312It's typically better to use ``:ref:`` syntax and labels to provide
313links as they work across files and are resilient to sections being
314renamed. First, you need to create a label something like::
315
316 .. _a-label:
317
318 The title of a section
319 ^^^^^^^^^^^^^^^^^^^^^^
320
321.. note:: The underscore (_) before the label is required.
322
323Then you can reference the section anywhere by simply doing::
324
325 This is a reference to :ref:`a-label`
326
327or::
328
329 This is a reference to :ref:`a section I really liked <a-label>`
330
331.. note:: When using ``:ref:``-style links, you don't need a trailing
332 underscore (_).
333
334Because the labels have to be unique, it usually makes sense to prefix
335the labels with the project name to help share the label space, e.g.,
336``sfc-user-guide`` instead of just ``user-guide``.
337
Rich Bennetta9d6a442017-08-25 02:37:15 -0400338Testing
339=======
Rich Bennettac93e0e2017-07-19 01:36:52 -0400340
Rich Bennetta9d6a442017-08-25 02:37:15 -0400341One RST File
342------------
Rich Bennettac93e0e2017-07-19 01:36:52 -0400343It is recommended that all rst content is validated by `doc8 <https://pypi.python.org/pypi/doc8>`_ standards.
344To validate your rst files using doc8, install doc8.
345
346.. code-block:: bash
347
348 sudo pip install doc8
349
350doc8 can now be used to check the rst files. Execute as,
351
352.. code-block:: bash
353
354 doc8 --ignore D000,D001 <file>
355
356
Rich Bennettac93e0e2017-07-19 01:36:52 -0400357
Rich Bennetta9d6a442017-08-25 02:37:15 -0400358One Project
359-----------
Rich Bennettac93e0e2017-07-19 01:36:52 -0400360To test how the documentation renders in HTML, follow these steps:
361
362Install virtual environment.
363
364.. code-block:: bash
365
366 sudo pip install virtualenv
367 cd /local/repo/path/to/project
368
369Download the doc repository.
370
371.. code-block:: bash
372
373 git clone http://gerrit.onap.org/r/doc
374
375Change directory to doc & install requirements.
376
377.. code-block:: bash
378
379 cd doc
380 sudo pip install -r etc/requirements.txt
381
382Move the conf.py file to your project folder where RST files have been kept:
383
384.. code-block:: bash
385
386 mv doc/docs/conf.py <path-to-your-folder>/
387
388Move the static files to your project folder:
389
390.. code-block:: bash
391
392 mv docs/_static/ <path-to-your-folder>/
393
394Build the documentation from within your project folder:
395
396.. code-block:: bash
397
398 sphinx-build -b html <path-to-your-folder> <path-to-output-folder>
399
400Your documentation shall be built as HTML inside the
401specified output folder directory.
402
403.. 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.
404
jsseidel80666192017-09-19 13:29:23 -0400405.. _building-all-documentation:
Rich Bennettac93e0e2017-07-19 01:36:52 -0400406
Rich Bennetta9d6a442017-08-25 02:37:15 -0400407All Documentation
408-----------------
409To build the whole documentation under doc/, follow these steps:
Rich Bennettac93e0e2017-07-19 01:36:52 -0400410
Rich Bennetta9d6a442017-08-25 02:37:15 -0400411Install virtual environment.
Rich Bennettac93e0e2017-07-19 01:36:52 -0400412
413.. code-block:: bash
414
Rich Bennetta9d6a442017-08-25 02:37:15 -0400415 sudo pip install virtualenv
416 cd /local/repo/path/to/project
417
418Download the DOC repository.
419
420.. code-block:: bash
421
422 git clone http://gerrit.onap.org/r/doc
423
Rich Bennetta9d6a442017-08-25 02:37:15 -0400424Update submodules, build documentation using tox & then open using any browser.
425
426.. code-block:: bash
427
428 cd doc
Cédric Ollivier268209c2017-11-10 11:31:53 +0100429 tox -elocal
Rich Bennetta9d6a442017-08-25 02:37:15 -0400430 firefox docs/_build/html/index.html
431
Cédric Ollivier268209c2017-11-10 11:31:53 +0100432.. note:: Make sure to run `tox -elocal` and not just `tox`.