The documentation team are rapidly losing key contributors and core reviewers. We are not alone, this is happening across the board. It is making things harder, but not impossible. Since our inception in 2010, we’ve been climbing higher and higher trying to achieve the best documentation we could, and uphold our high standards. However, we now need to take a step back and realise that the amount of work we are attempting to maintain is out of reach for the team size that we have. At the moment we have 13 cores, of whom none are full time contributors or reviewers.
Until this point, the documentation team has owned several manuals that include content related to multiple projects, including an installation guide, admin guide, configuration guide, networking guide, and security guide. Because the team no longer has the resources to own that content, we want to invert the relationship between the doc team and project teams, so that we become liaisons to help with maintenance instead of asking for project teams to provide liaisons to help with content. As a part of that change, we plan to move the existing content out of the central manuals repository, into repositories owned by the appropriate project teams. Project teams will then own the content and the documentation team will assist by managing the build tools, helping with writing guidelines and style, but not writing the bulk of the text.
We currently have the infrastructure set up to empower project teams to manage their own documentation in their own tree, and many do. As part of this change, the rest of the existing content from the install guide and admin guide will also move into project-owned repositories.
Combine all of the documentation builds for a given repository, so that each repository has a single doc/source directory, a single sphinx conf.py, and a single job for building and publishing the content including developer, contributor, and user documentation. This option would reduce the number of build jobs we have to run, and cut down on the number of separate sphinx configurations in each repository.
Move most of the content from various guides in openstack-manuals into the same repository as the thing being documented – the documentation should live with the code. For example, the installation instructions for glance move to the glance repository and the reference for using the glance client command line tool move to the python-glanceclient repository.
In order to make it easy to include links from the landing pages on docs.openstack.org, we need to ensure a minimum level of consistency in the organization of the docs directory. The sections are based on the existing high-level groupings for which there are already landing pages on docs.openstack.org that will need to be updated. Within each top-level directory, project teams are free to organize their content however seems most appropriate to them. This is the proposed layout for phase 1:
doc/source/
install/
– anything having to do with installation of the
projectcontributor/
– anything related to contributing to the
project or how the team is managed. Applies to some of the current
content under /developer, we are changing the name to emphasize
that not all contributors are developers and sometimes developers
are users but not contributors. Service projects should place
their automatically generated class documentation under this part
of the tree, e.g. in contributor/api
or
contributor/internals
.configuration/
– automatically generated configuration
reference information based on oslo.config’s sphinx integration
(or manually written for projects not using
oslo.config). Step-by-step guides for doing things like enabling
cells or configuring a specific driver should be placed in the
admin/
section.cli/
– command line tool reference docs, similar to man pages
These may be automatically generated with cliff’s sphinx
integration, or manually written when auto-generation is not
possible. Tutorials or other step-by-step guides using these
tools should go in either the user/
or admin/
sections,
depending on their audience. Because the documentation for each
project should live in the repository with the code, this
directory may not be present for all service repositories but will
be present for most of the client library repositories.admin/
– any content from the old admin guide or anything
else that discusses how to run or operate the softwareuser/
– end-user content such as concept guides, advice,
tutorials, step-by-step instructions for using the CLI to perform
specific tasks, etc.reference/
– any reference information associated with a
project that is not covered by one of the above categories.
Library projects should place their automatically generated class
documentation here.This layout is the minimum set. Projects are free and encouraged to add whatever other docs they need beyond this list, but these items are listed here explicitly because there are already links to most of them from landing pages, and landing pages can be created for the others.
During a later phase, we will merge the API reference and release notes builds into the same job, along with the rest of the documentation for a project. Both of those builds have custom considerations, though, and it is more important to move the content that is no longer going to be maintained by the documentation team.
doc/source/
api/
– the REST API reference and Guide content, when it existsreleasenotes/
– reno directions (the actual release notes
inputs will stay in /releasenotes/notes, where they are now)Note
Further discussion of the layout of the api/
and
releasenotes/
directories is deferred until we are farther
along with the initial migration work.
A new documentation build job will be set up to take the output produced from
tox -e venv -- python setup.py build_sphinx
(matching the existing
Consistent Testing Interface”)
and publish it to a new location under http://docs.openstack.org
The results will go to:
docs.openstack.org/$project-name/latest
– build from masterdocs.openstack.org/$project-name/$series
– build from
stable/$seriesdocs.openstack.org/$project-name/latest/$lang
– build
translated version from masterdocs.openstack.org/$project-name/$series/$lang
– build
translated version from stable/$seriesBecause we plan to reuse the existing doc/source directory in each project, some of the existing content will need to be rearranged as part of importing the content from openstack-manuals.
Ultimately, this changes the way we publish results, and redirects will be required to be setup from all of the existing locations to the new locations, and move all of the existing documentation under the new structure. We will retain landing pages for the high level categories such as the install guides, the configuration reference, and contributor documentation. Those pages will continue to be maintained by the documentation team, and will deep-link into the project team documentation.
For example, we will keep pages like https://docs.openstack.org/project-install-guide/ocata/ but they will provide lists of links to URLs like https://docs.openstack.org/nova/ocata/install, which will be part of the single doc build for nova.
glance
command line tool would move to the
python-glanceclient repository.We will need to parallelize the migration work as much as possible if we are going to complete it by the end of the Pike cycle. We will therefore need project teams to find volunteers to “pull” the content into their repositories, instead of having the documentation team “push” it.
Note
Use the topic doc-migration
for all patches.
Note
Repeat these steps for all server projects, clients, and other libraries.
Move the existing contributor-focused content to fit the layout
above. Submit that change with Depends-On:
Ia750cb049c0f53a234ea70ce1f2bbbb7a2aa9454
to tie it to this
spec.
If your project docs are not already building using warning-is-error in setup.cfg, turn that on and fix any build errors. Submit these as patches on top of the first patch.
Pull in the content being migrated, following the layout above.
Ensure that there is an index.rst in each subdirectory of
doc/source so that the various landing pages managed by the
documentation team can link directly to that portion of the
documentation for your project. For example, in addition to moving
installation documentation into install/
create
install/index.rst
with a toctree
directive that shows all of
the installation.
Ensure that there is a top-level index.rst in doc/source that incorporates all of the documentation for the project by including all of the subdirectories in a toctree.
Update the theme for the in-tree docs to use the openstackdocstheme instead of oslosphinx.
Add auto-generated config reference section(s) under the
configuration/
directory.
If pbr’s autodoc feature is being used, update the api_doc_dir
setting in the pbr
section of setup.cfg
to point to either
reference/api
(for libraries) or contributor/api
(for other
types of projects).
Update project-config to have the doc build use the new jobs instead of the old jobs by replacing ‘openstack-server-publish-jobs’ with ‘openstack-unified-publish-jobs’.
Set Depends-On
to the Change-Id from the patch created in
step 1. This ensures that we do not publish the old content to the
new location.
Add links to the reviews for individual TODO items below those items in the sections dedicated to each manual. That way the docs team will know when it is safe to start deleting content.
We did consider using “service type” instead of “project name” for the publishing URLs, but not all of the projects that need documentations are services. We will have user-facing documentation coming from several Oslo libraries, for example.
Primary assignee:
The task list is quite long, so rather than repeat it here we give a summary. There is more detail in the tracking pad mentioned in step 3.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.