Contributing to Rockstor documentation¶
Steps for contributing to rockstor-doc repo are similar to contributing to rockstor-core, as we follow the same fork and pull request model. We’ll assume you have basic proficiency with Git and are familiar with using a text editor or IDE of your choice. Emacs, Vim, Eclipse and PyCharm are some recommendations. Or you may be able to use an online editor such as https://www.tutorialspoint.com/online_restructure_editor.php.
Environment setup¶
Clone the repository¶
We’ll assume that you have your laptop ready with Git and an editor installed. Since we rely on github services, you need to create a profile on github.com. Once you have your profile set-up on github.com, follow these steps:
Go to rockstor-doc repo and click on the Fork button. This will fork the repository into your profile which serves as your private Git remote called origin. The next few Git steps are demonstrated on a Linux terminal. They work the same on a Mac too.
you@laptop:~> mkdir ~/dev; cd ~/dev
you@laptop:~/dev> git clone git@github.com:your_github_username/rockstor-doc.git
The above command creates a local rockstor-doc Git repo in a new directory by the same name (rockstor-doc) inside the new “~/dev” directory. Change into it.
you@laptop:~/dev> cd rockstor-doc
Configure this new Git repo with your name and email address. This is required to accurately record collaboration.
you@laptop:~/dev/rockstor-doc> git config user.name "Firstname Lastname"
you@laptop:~/dev/rockstor-doc> git config user.email your_email_address
Add a remote called upstream to periodically rebase your local repository with changes in the upstream made by other contributors.
you@laptop:~/dev/rockstor-doc> git remote add upstream https://github.com/rockstor/rockstor-doc.git
If desired, you can now verify these settings are correct by displaying the Git configuration for the local repository:
you@laptop:~/dev/rockstor-doc> git config --list --local
Installing Sphinx¶
Unlike for code contributions, there is no need for a dedicated virtual machine to build the documentation. Indeed, source pages for Rockstor’s documentation are written in reStructuredText (.rst files) that can be easily edited manually to fit our needs. We then use the documentation generator Sphinx to generate the HTML content from these .rst files.
Sphinx official documentation gives guidelines for its installation on various platforms. We thus refer to their instructions on how to install Sphinx: Installing Spinx.
Once you have Sphinx installed, you’ll need 1 more Sphinx extension before
you’re fully ready. The sphinxext-rediraffe
extension is used to generate redirections for pages that no longer exist or
have been moved. While you may not use the functionality of this extension in
your page, when you execute make html
to check your work, you’ll need
it for make
to complete successfully.
To install sphinxext-rediraffe, use this command:
you@laptop:~/dev/rockstor-doc> sudo pip3 install --user sphinxext-rediraffe
Using Sphinx as a Docker container¶
Sphinx can also be used as a Docker container, without needing to install it on your computer. As the base docker-sphinx image doesn’t contain the sphinxext-rediraffe extension needed to build Rockstor’s documentation, we need to use a custom Docker image. This can easily be done using a custom Dockerfile. For convenience, we provide the corresponding Docker image. Its use is documented below.
Making changes¶
We’ll assume you have identified an issue (eg: #1234) from the github issue tracker to work on. If you want to document something for which there is no issue, feel free to create one.
First, start with the latest documentation by rebasing your local repo’s master branch with the upstream.
you@laptop:~/dev/rockstor-doc> git checkout master
you@laptop:~/dev/rockstor-doc> git pull --rebase upstream master
Checkout a new/separate branch for your issue. For example:
you@laptop:~/dev/rockstor-doc> git checkout -b issue#1234_brief_label
You can then start making changes in this branch.
Guidelines¶
To keep in line with Rockstor’s goal to make its features as accessible as possible, this documentation should strive to keep non-technical users as its primary target. As such, the use of external references and links to additional documentation to provide the reader with further technical information is encouraged.
Building HTML files with Sphinx¶
As you edit the content in .rst files, you can periodically generate HTML files and review them in your browser. To generate or update the HTML files, use the following command:
you@laptop:~/dev/rockstor-doc> make html
If you use our docker image, you can use the following command:
you@laptop:~/dev/rockstor-doc> docker run --rm -v $PWD:/docs ghcr.io/rockstor/rockstor-doc:master make html
HTML files are generated in the _build/html
directory. From a separate
terminal window, you can have a simple Python webserver always serving up this
content with the following command:
you@laptop:~/dev/rockstor-doc> pushd ./_build/html; python3 -m http.server 8000; popd
You can now go to http://localhost:8000
in your browser to review your
changes. The webserver is to be started only once and it will continue to serve
the files and changes you make to them.
After making any changes to a .rst file, run make html
as shown above
and refresh your browser to display your changes.
In order to check hyperlinks that are part of the changed files, it is also recommended to run the linkcheck tool that comes with Sphinx. During PR submission that link check is also run automatically. If you don’t make changes to any existing links or don’t add new ones, it is not as important. As above, with Sphinx installed you can run it directly in the documentation directory:
you@laptop:~/dev/rockstor-doc> make linkcheck
If you use our docker image, you can use the following command:
you@laptop:~/dev/rockstor-doc> docker run --rm -v $PWD:/docs ghcr.io/rockstor/rockstor-doc:master make linkcheck
If linkcheck errors occur in documents you have not modified and they are not in scope of your changes, you can probably ignore them and/or open another issue on github to address required changes (so this knowledge is not lost over time).
Submit your changes¶
Once you are satisfied with your changes, you can start preparing them for submission.
Add and commit your changes¶
First, let’s add your changes:
you@laptop:~/dev/rockstor-doc> git add new_file_added.rst existing_file.rst
Then, you can commit them. We strongly encourage you to commit changes in a certain way to help other contributors, and to keep the merge process smooth. The guidelines below pertain more to code contributions but feel free to be as perfect as you like. As a guiding principle, separate your changes into one or more logically independent commits.
you@laptop:~/dev/rockstor-doc> git commit new_file_added.rst existing_file.rst
We request that you divide a commit message into three parts. Start the message with a single line summary, about 50-70 characters in length. Add a blank line after that. If you want to add more than a summary to your commit message, describe the change in more detail in plain text format where each line is no more than 80 characters. This description should be in present tense. Below is a fictional example:
foobar functionality documentation for rockstor
This document describes foobar functionality. This feature is based on algorithm called
recursive transaction launcher to generate transactional foobars.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch issue#1234_test
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: foobar.py
#
If you’d like credit for your patch or if you are a frequent contributor, you should add your name to the rockstor-doc AUTHORS file.
Moving pages¶
If your changes involve a page relocation or removal, we need to ensure any
eventual external link to it remains valid and provide a valid redirection. To
do so, we leverage the excellent Sphinx extension sphinxext-rediraffe.
Indeed, Rediraffe can simplify the process by comparing your current Git branch
to your master branch and automatically write redirections for pages that
were renamed or relocated.
To do so, you simply need to run the rediraffewritediff
builder:
you@laptop:~/dev/rockstor-doc> sphinx-build -b rediraffewritediff . _build/rediraffe
If you use the Docker image, you must use the following command:
you@laptop:~/dev/rockstor-doc> docker run --rm -v $PWD:/docs ghcr.io/rockstor/rockstor-doc:master sphinx-build -b rediraffewritediff . _build/rediraffe
You should now see the needed redirects in redirects.txt
.
Note
Make sure to commit your changes with Git before running the rediraffewritediff
builder as the latter will otherwise not be able to detect your changes.
While we strive to limit such occasions, special circumstances might require the
deletion of one or more pages. As sphinxext-rediraffe cannot yet automatically write a
redirection for a deleted page, one needs to manually instruct it. Fortunately,
this is as simple as writing a new line in redirects.txt
, listing the
name of the deleted page and the name of the page to which it should redirect.
Below is an excerpt of redirects.txt
detailing redirections for deleted
files:
# Deleted files
# "deleted_file.rst" "redirection_target.rst"
"intro.rst" "index.rst"
"analytics.rst" "index.rst"
"benchmarks.rst" "index.rst"
In the example above, the now deleted files intro.rst
,
analytics.rst
, and benchmarks.rst
, are all redirected to index.rst
.
Pushing changes¶
As you continue to work on an issue, commit and push your changes to the issue branch of your fork. You can periodically push your commits to Github with the following command:
you@laptop:~/dev/rockstor-doc> git push origin your_branch_name
Create a pull request¶
Once you’re finished with your work for the issue and are ready to submit, create a pull request by clicking on the pull request button on Github. This notifies the maintainers of your changes. As a best practice, only open one pull request per issue containing all the relevant changes.
To expedite the review, please follow these two tips:
Make sure that the Sphinx
make html
command completes successfully without generating any error. You can also verify that all tests ran by the Github Actions complete without error or warning. In the event one of these tests fails, you can click on the Details button to inspect the Github Action’s logs and identify the problem.When you make a pull request, adding a “Fixes #number-of-issue” on its own line will automatically close the related issue when it gets merged. Just a nice thing to have and also provides a link to the relevant issue. See GitHub documentation for details.