Hosting on GitHub Pages#
Creating a gh-pages
branch#
To host your docs on GitHub Pages, we need to enable GitHub Pages for our repo. To do that, we need
to create a branch that only contains html
files. We’ll name this branch gh-pages
, as GitHub
looks for this name and automatically starts hosting your documentation on pages
.
Let’s create gh-pages
as an
orphan branch,
which means there is no previous history and commits:
# from the project root
cd ./docs/_build/html
git checkout --orphan gh-pages # create the orphan branch
git reset --hard # overwrite all changes in the directory
git commit --allow-empty -m "Init" # create a commit without any changes
git push origin gh-pages
In your remote repository, you should now see a new empty gh-pages
branch. You will notice that
under Settings > Pages
, GitHub has enabled Pages
and started hosting your site at a URL like
https://<username>.github.io/sphinxy/
. Of course, if you visit the URL, you get a 404 Error
because there are no files yet on the gh-pages
branch.
Next, we locally mount the orphan gh-pages
branch as a subdirectory using
git worktree
.
# from the docs/_build/html dir
cd ..
git checkout main
rm -rf html # make sure you don't have an existing target directory
git worktree add html gh-pages
To check that you set up branches correctly, you should see that git branch
shows gh-pages
under the html
subdirectory, but see the main
branch as usual outside of html
:
# from the project root
$ git branch
gh-pages
* main
$ cd ./docs/_build/html
$ git branch
* gh-pages
main
Our branch gh-pages
is completely empty. But GitHub will be looking for a top-level index.html
.
So from the ./docs/_build/html
directory let’s create a simple one:
# from the docs/_build/html dir
echo '<h1>Hello, World!</h1>' > index.html
git add index.html
git commit -m "Add hello world landing page"
git push origin gh-pages
Go to the Actions
tab of your repo’s GitHub URL. You should see that a pages-build-deployment
workflow has kicked off. This is a workflow that rebuilds your GitHub Pages site and is triggered
by our push to gh-pages
. Once it’s completed, refresh the Pages
URL where your site is hosted.
You should see the heading Hello, World!
.
Cleaning the HTML files#
In the previous section, we mounted the gh-pages
branch at ./docs/_build/html
. But you may
occasionally want to clean your documentation build output. Running make clean
inside your docs
directory will remove everything under _build
.
This means that, if you want to be able to push more updates to gh-pages
, you will need to
recreate the git worktree
every time you make clean
:
git worktree add -f html gh-pages
.
To make this easier, add the following to docs/Makefile
:
clean:
@$(SPHINXBUILD) -M clean "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O);
cd _build; git worktree add -f html gh-pages
With these changes, make clean
will clean the _build/
directory, and populate the html
directory with the current contents on the gh-pages
branch. So it will effectively clean your
local documentation changes.
Commit your updated Makefile
:
# from the project root
git add docs/Makefile
git commit -m "Add updated clean target in Makefile"
git push origin main
Disabling Jekyll#
Before we can deploy our API docs on GitHub Pages, we need to tell GitHub not to use Jekyll
: a
static site generator tool that GitHub Pages uses by default. We could turn off its usage by
committing an empty .nojekyll
file our _build/html
folder.
Instead of committing a .nojekyll
file, you can add the extension sphinx.ext.githubpages
to
your conf.py
. It automatically adds the .nojekyll
file on make html
.
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.napoleon",
"sphinx.ext.githubpages",
]
Let’s also commit the change in conf.py
:
# from the project root
git add docs/conf.py
git commit -m "Add githubpages extension"
git push origin main
Hosting the documentation#
Next, we want to add the Sphinxy documentation to gh-pages
. Let’s generate our documentation
again and check in our output files.
cd docs
make clean # clean and re-create the gh-pages worktree
make html
cd _build/html
git branch # verify you're in gh-pages branch
git add -A
git commit -m "First documentation commit"
git push origin gh-pages
Go back to your repo’s Action
tab. Once pages-build-deployment
workflow has completed, hit
refresh on your Pages URL.
🎉 Congratulations! 🎉
Now your documentation is now live on GitHub Pages! You should be able to navigate around the website and share the URL with the world!
{: .hint }
🙌 You have now reached the
07-gh-pages
part of
the tutorial. If not, check out that branch and
gh-pages-7
branch for gh-pages-7
and
continue from there.
[Previous: Selecting a theme](./6-selecting-a-theme.md){: .btn .float-left} [Next: Automating documentation updates](./8-automating-documentation-updates.md){: .btn .btn-purple .float-right}