This documentation describes a release under development. Documentation for the latest release, 3.6.2, can be found here.
Building Mitto Documentation¶
Two types of Mitto documentation can be built: single-version and multi-version. Single-version is the original documentation framework that supports only a single body of documentation – that of the currently checked-out branch. Multi-version is the newest framework that supports publishing multiple versions of documentation (i.e., a version for each Mitto release).
Generally, one wants to build multi-version documentation when publishing documentation for a Mitto release. Single-version documentation is useful when in the process of developing documentation for a release as it is much faster to produce.
Warning
Multi-version documentation can only be built using Mitto 2.9.0 or later. However, multi-version documentation created with Mitto 2.9.0 or later can include documentation for any Mitto version for which documentation exists (e.g., 2.5.1, 2.7.5, etc.).
Public vs. Private¶
There is also the notion of public and private documentation. Public documentation is published to https://zuar.com/api/mitto and is accessible by anyone. Private documentation is published elsewhere and is accessible only by whitelisted IP addresses.
The PVT
environment variable controls which documentation is being
worked with by commands. If PVT
is not set or if it is set to
something other than y
, public documentation is being worked with.
If PVT
is y
, then private documentation is being worked with.
Important
When working with documentation locally, only one flavor of documentation can be built and viewed at a time. This is because the generated HTML is placed in the same directory, regardless.
Thus, when publishing documentation for a release, one generally follows this pattern:
build, view, publish public documentation
build, view, publish private documentation
It is not possible to build both types and then publish both types.
Documentation Environment¶
Before documentation can be built, the environment must be setup.
cd $MITTO_HOME
. pyenv/bin/activate
cd mitto/docs
make pyenv
This will install Sphinx and related packages necessary to build documentation.
Schemas and Release Notes¶
Before building the documentation, determine if the JSON schemas and release notes need to be updated.
JSON schema documents.
cd docs MITTO_DATA=/var/mitto make schemas # public schemas MITTO_DATA=/var/mitto make PVT=y schemas # private schemas
This will create JSON schema documentation locally in:
docs/src/schemas # public documentation docs/srcp/schemas # private documentation
Setting
MITTO_DATA
, as shown above, is usually necessary because it is likely to have a different, non-default, value on a developer machine. The value above is the Mitto production default. The value ofMITTO_DATA
is embedded in some documentation that is generated.Commit any new/changed schema documentation to version control.
Release notes. For example, to create release notes for release
2.8.10
:cd docs MITTO_REL=2.8.10 make release_notes
This will create
docs/src/release_notes/2.8.10.md
.Following this, manually update
docs/src/release_notes/index.md
to point to the newly created release notes.Important
The
MITTO_REL
value must exactly match the release number used in Jira, as it is used to query Jira ticket information when building release notes.If building multi-version documentation, any changes to documentation source resulting from the above must be checked-in to the repository for the changes to appear in the generated documentation.
Single-version Documentation¶
With the advent of multi-version documentation, single-version documentation is really of use only when actively developing documentation for a release. Working with single-version documentation offers the following advantages:
Documentation is built only for the currently checked-out branch This eliminates the overhead of building documentation for multiple releases.
Documentation is generated from the source files present in the current branch – it is not necessary to check-in changes prior to building documentation. This is especially convenient when one is actively developing documentation.
Other differences:
The generated single-version is placed directly under
docs/build/html
; it is not placed in its own subdirectory.Version information and selection is not present in the sidebar.
Build the Documentation¶
cd docs make clean make version # public documentation PVT=y make version # private documentation
View the Local Documentation.¶
cd docs make serve # public documentation PVT=y make serve # private documentationThe, in your browser, navigate to http://localhost:8000.
Publish the Documentation¶
Single-version documentation can be published in exactly the same way as multi-version. However, doing so will wipe-out existing multi-version documentation. It’s unlikely that single-version documentation should be published.
Multi-Version Documentation¶
When multiple versions of documentation are built, they are
built into docs/build/html
. Each version is contained in its own
subdirectory. E.g.:
$ tree -L 1 docs/build/html
docs/build/html
├── 2.8.6
├── 2.8.7
├── 2.8.8
├── 2.8.9
├── 2.8.10
└── master
A special index.html
is built an placed in docs/build/html
; it
automatically redirects browsers to the “current” version of the
documentation. Links in the sidebar of each page display the version
currently being viewed and allow the user to switch documentation
versions.
Creation of multi-version documentation is controlled by
environment variables. They can be set once or they can be provided
on the command line each time make
is run.
The first two control the documentation that is built; they specify the git branches and tags of interest. Roughly, they define the “releases” that documentation will be built for.
MITTO_TAGS
A string containing a regular expression matching the tags for which to generate documentation. E.g.:
MITTO_TAGS="2.8.[89]|2.8.1[012]"
MITTO_BRANCHES
A string containing a regular expression matching the branches for which to generate documentation. E.g.:
MITTO_BRANCHES="master"
The remaining variables fine-tune the documentation.
MITTO_LATEST
A string defining the most recently released version of Mitto. This is used for the
latest
links in the generated HTML. It must be a valid tag or branch in git. E.g.:MITTO_LATEST="2.8.12"
MITTO_REL
A string containing the Jira release number for which to create release notes. This is only used when
make release_notes
is used to build release notes. E.g.:MITTO_REL="2.9.0"
MITTO_RELEASED
A string containing a regular expression matching the tags or branches which have been released. This is matched against the full git refname returned by
git for-each-ref --format "%(refname)"
. E.g.:MITTO_RELEASED='^refs/tags/2.8.(8|9|1[0-2])$'
This is used to classify a “release” as either “released” or in “development”.
Important
When building multi-version documentation the sphinx-multiversion command is used instead of sphinx-build. For sphinx-multiversion to work properly, all documentation must be checked-in to the repository. Changes made locally, but not checked-in to the current branch, will not appear in the generated documentation.
Define and Confirm What will be Built¶
For this example, we will update our environment with the specifications of the documents to generate, then we’ll confirm the exact versions that will be built:
export MITTO_BRANCHES="(2.9.x|master)$"
export MITTO_TAGS="2.8.(8|9|1[0-2])"
export MITTO_LATEST="2.8.12"
export MITTO_REL="2.9.0"
export MITTO_RELEASED='^refs/tags/2.8.(8|9|1[0-2])$'
make versions-show
Documentation will be built for the following versions:
[
"2.8.10",
"2.8.11",
"2.8.12",
"2.8.8",
"2.8.9",
"2.9.x",
"master"
]
HINT: It may be easisest to start with the values used in the most recent build of documentation and modifying them.
Let’s review the values used above:
MITTO_BRANCHES
/MITTO_TAGS
– together these define the versions of documentation that will be created. Nothing else controls the selection of documentation that is built.MITTO_LATEST
–2.8.12
is the most recent version of Mitto that has been released.MITTO_REL
– development on2.9.0
will be complete within a week or two. This value is used when querying Jira for tickets to include in the release notes.Because we are nearing the release of
2.9.0
, a2.9.x
branch has been created to allow ongoing new feature development to continue onmaster
.MITTO_RELEASED
– this regex controls classifications of a version. Because they do not match the regex, the2.9.x
andmaster
branches will both be classified asdevelopment
. All other versions will be classified asreleased
.
Build the Documentation¶
cd docs
make clean
make release_notes
if needed, update generated release notes manually
$ git add <release_notes.md>
$ git commit -m 'NO-TICKET: <x.y.z> release notes'
$ git tag -m <x.y.z> <x.y.z>
$ git push
make versions
make versions
generates a complete set of documentation for each
release. Documentation for each version is placed in its own
directory under docs/build/html
.
Important
The generated HTML (i.e., the contents of mitto/docs/build) is never checked-in to the repo; only the source documents are controlled.
View the Local Documentation.¶
cd docs
make serve
In your browser, navigate to http://localhost:8000
.
Publish the Documentation¶
If the local documentation looks good, publish it to zuar.com
.
cd docs
make publish
Post-Release Documentation Updates¶
Want to update docs for a release without performing all the other release related tasks? Here’s how.
Build and Publish the Documentation¶
We’ll adopt the convention that documentation-only updates will be
tagged by appending a _n
to the previous release tag, where n
is
an integer starting at 1
. Thus, 2.9.4_1
differs from 2.9.4
only
in documentation, as does 2.9.4_2
, etc.
Create a 2.9.4_1
tag via git tag 2.9.4_1
.
Change to the docs
directory.
When the 2.9.4
documentation was built, the following environment
variables were set (find the variables used to build the current
documentation here ):
export MITTO_LATEST='2.9.4'
export MITTO_REL='2.9.4'
export MITTO_RELEASED='^refs/tags/(2.8.([89]|1[0-2])|2.9.[0-4])$'
export MITTO_DATA='/tmp/mitto-tests'
export MITTO_TAGS='(2.8.([89]|1[0-2])|2.9.[0-4])$'
Update those to include our new documentation-only release:
export MITTO_LATEST='2.9.4_1'
export MITTO_REL='2.9.4_1'
export MITTO_RELEASED='^refs/tags/(2.8.([89]|1[0-2])|2.9.[0-4]|2.9.4_1)$'
export MITTO_DATA='/tmp/mitto-tests'
export MITTO_TAGS='(2.8.([89]|1[0-2])|2.9.[0-4]|2.9.4_1)$'
Make all versions of the documentation and view it:
make versions
make serve
If it looks good, publish the documentation to zuar.com
:
make publish
Push the tag to github, if desired.