Skip to content

Commit

Permalink
Doc build fix (#773)
Browse files Browse the repository at this point in the history
* fix docs building
  • Loading branch information
evilnick authored Nov 7, 2024
1 parent 851387c commit 03149aa
Show file tree
Hide file tree
Showing 21 changed files with 352 additions and 62 deletions.
1 change: 0 additions & 1 deletion docs/canonicalk8s/.gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/*env*/
.sphinx/venv/
.sphinx/requirements.txt
.sphinx/warnings.txt
.sphinx/.wordlist.dic
.sphinx/.doctrees/
Expand Down
11 changes: 7 additions & 4 deletions docs/canonicalk8s/.readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,26 @@ build:
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
git fetch --unshallow || true
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- docs/ .readthedocs.yaml;
then
exit 183;
fi
ls
# Build documentation in the docs/ directory with Sphinx
sphinx:
builder: dirhtml
configuration: docs/canonicalk8s/conf.py
configuration: docs/canonicalk8s/conf-rtd.py

# If using Sphinx, optionally build your docs in additional formats such as PDF
formats:
- pdf
# formats:
# - pdf

# Optionally declare the Python requirements required to build your docs
python:
install:
- requirements: docs/canonicalk8s/.sphinx/requirements.txt



23 changes: 23 additions & 0 deletions docs/canonicalk8s/.sphinx/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# DO NOT MODIFY THIS FILE DIRECTLY!
#
# This file is generated automatically.
# Add custom requirements to the custom_required_modules
# array in the custom_conf.py file and run:
# make clean && make install
GitPython
canonical-sphinx-extensions
furo
linkify-it-py
myst-parser
pyspelling
sphinx
sphinx-autobuild
sphinx-copybutton
sphinx-design
sphinx-notfound-page
sphinx-tabs
sphinxcontrib-jquery
sphinxcontrib-svg2pdfconverter[CairoSVG]
sphinxcontrib.kroki
sphinxext-opengraph
watchfiles
2 changes: 1 addition & 1 deletion docs/canonicalk8s/Makefile.sp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
SPHINXDIR = .sphinx
SPHINXOPTS ?= -c . -d $(SPHINXDIR)/.doctrees -j auto
SPHINXBUILD ?= sphinx-build
SOURCEDIR = src
SOURCEDIR = .
METRICSDIR = ./metrics
BUILDDIR = ../_build
VENVDIR = $(SPHINXDIR)/venv
Expand Down
254 changes: 254 additions & 0 deletions docs/canonicalk8s/conf-rtd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,254 @@
import sys
import os
import requests
from urllib.parse import urlparse
from git import Repo, InvalidGitRepositoryError
import time
import ast
import yaml

sys.path.append('./')
from custom_conf import *
sys.path.append('.sphinx/')
from build_requirements import *

# Configuration file for the Sphinx documentation builder.
# You should not do any modifications to this file. Put your custom
# configuration into the custom_conf.py file.
# If you need to change this file, contribute the changes upstream.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html

############################################################
### Extensions
############################################################

extensions = [
'sphinx_design',
'sphinx_copybutton',
'sphinxcontrib.jquery',
]

# Only add redirects extension if any redirects are specified.
if AreRedirectsDefined():
extensions.append('sphinx_reredirects')

# Only add myst extensions if any configuration is present.
if IsMyStParserUsed():
extensions.append('myst_parser')

# Additional MyST syntax
myst_enable_extensions = [
'substitution',
'deflist',
'linkify'
]
myst_enable_extensions.extend(custom_myst_extensions)

# Only add Open Graph extension if any configuration is present.
if IsOpenGraphConfigured():
extensions.append('sphinxext.opengraph')

extensions.extend(custom_extensions)
extensions = DeduplicateExtensions(extensions)

### Configuration for extensions

# Used for related links
if not 'discourse_prefix' in html_context and 'discourse' in html_context:
html_context['discourse_prefix'] = html_context['discourse'] + '/t/'

# The URL prefix for the notfound extension depends on whether the documentation uses versions.
# For documentation on documentation.ubuntu.com, we also must add the slug.
url_version = ''
url_lang = ''

# Determine if the URL uses versions and language
if 'READTHEDOCS_CANONICAL_URL' in os.environ and os.environ['READTHEDOCS_CANONICAL_URL']:
url_parts = os.environ['READTHEDOCS_CANONICAL_URL'].split('/')

if len(url_parts) >= 2 and 'READTHEDOCS_VERSION' in os.environ and os.environ['READTHEDOCS_VERSION'] == url_parts[-2]:
url_version = url_parts[-2] + '/'

if len(url_parts) >= 3 and 'READTHEDOCS_LANGUAGE' in os.environ and os.environ['READTHEDOCS_LANGUAGE'] == url_parts[-3]:
url_lang = url_parts[-3] + '/'

# Set notfound_urls_prefix to the slug (if defined) and the version/language affix
if slug:
notfound_urls_prefix = '/' + slug + '/' + url_lang + url_version
elif len(url_lang + url_version) > 0:
notfound_urls_prefix = '/' + url_lang + url_version
else:
notfound_urls_prefix = ''

notfound_context = {
'title': 'Page not found',
'body': '<p><strong>Sorry, but the documentation page that you are looking for was not found.</strong></p>\n\n<p>Documentation changes over time, and pages are moved around. We try to redirect you to the updated content where possible, but unfortunately, that didn\'t work this time (maybe because the content you were looking for does not exist in this version of the documentation).</p>\n<p>You can try to use the navigation to locate the content you\'re looking for, or search for a similar page.</p>\n',
}

# Default image for OGP (to prevent font errors, see
# https://github.com/canonical/sphinx-docs-starter-pack/pull/54 )
if not 'ogp_image' in locals():
ogp_image = 'https://assets.ubuntu.com/v1/253da317-image-document-ubuntudocs.svg'

############################################################
### General configuration
############################################################

exclude_patterns = [
'_build',
'Thumbs.db',
'.DS_Store',
'.sphinx',
]
exclude_patterns.extend(custom_excludes)

rst_epilog = '''
.. include:: /reuse/links.txt
'''
if 'custom_rst_epilog' in locals():
rst_epilog = custom_rst_epilog

source_suffix = {
'.rst': 'restructuredtext',
'.md': 'markdown',
}

if not 'conf_py_path' in html_context and 'github_folder' in html_context:
html_context['conf_py_path'] = html_context['github_folder']

# For ignoring specific links
linkcheck_anchors_ignore_for_url = [
r'https://github\.com/.*'
]
linkcheck_anchors_ignore_for_url.extend(custom_linkcheck_anchors_ignore_for_url)

# Tags cannot be added directly in custom_conf.py, so add them here
for tag in custom_tags:
tags.add(tag)

# html_context['get_contribs'] is a function and cannot be
# cached (see https://github.com/sphinx-doc/sphinx/issues/12300)
suppress_warnings = ["config.cache"]

############################################################
### Styling
############################################################

# Find the current builder
builder = 'dirhtml'
if '-b' in sys.argv:
builder = sys.argv[sys.argv.index('-b')+1]

# Setting templates_path for epub makes the build fail
if builder == 'dirhtml' or builder == 'html':
templates_path = ['.sphinx/_templates']
notfound_template = '404.html'

# Theme configuration
html_theme = 'furo'
html_last_updated_fmt = ''
html_permalinks_icon = '¶'

if html_title == '':
html_theme_options = {
'sidebar_hide_name': True
}

############################################################
### Additional files
############################################################

html_static_path = ['.sphinx/_static']

html_css_files = [
'custom.css',
'header.css',
'github_issue_links.css',
'furo_colors.css',
'footer.css'
]
html_css_files.extend(custom_html_css_files)

html_js_files = ['header-nav.js', 'footer.js']
if 'github_issues' in html_context and html_context['github_issues'] and not disable_feedback_button:
html_js_files.append('github_issue_links.js')
html_js_files.extend(custom_html_js_files)

#############################################################
# Display the contributors


#############################################################
# DISABLED AS IT DOESN'T WORK FOR source not in same dir

#def get_contributors_for_file(github_url, github_folder, github_source, pagename, page_source_suffix, display_contributors_since=None):
# filename = f"{pagename}{page_source_suffix}"
# paths=html_context['github_source'][1:] + filename
#
# try:
# repo = Repo(".")
# except InvalidGitRepositoryError:
# cwd = os.getcwd()
# ghfolder = html_context['github_source'][:-1]
#
# if ghfolder and cwd.endswith(ghfolder):
# repo = Repo(cwd.rpartition(ghfolder)[0])
# else:
# print("The local Git repository could not be found.")
# return
#
# since = display_contributors_since if display_contributors_since and display_contributors_since.strip() else None
#
# commits = repo.iter_commits(paths=paths, since=since)
#
# contributors_dict = {}
# for commit in commits:
# contributor = commit.author.name
# if contributor not in contributors_dict or commit.committed_date > contributors_dict[contributor]['date']:
# contributors_dict[contributor] = {
# 'date': commit.committed_date,
# 'sha': commit.hexsha
# }
# # The github_page contains the link to the contributor's latest commit.
# contributors_list = [{'name': name, 'github_page': f"{github_url}/commit/{data['sha']}"} for name, data in contributors_dict.items()]
# sorted_contributors_list = sorted(contributors_list, key=lambda x: x['name'])
# return sorted_contributors_list
#
# html_context['get_contribs'] = get_contributors_for_file

############################################################
### Myst configuration
############################################################
if os.path.exists('./reuse/substitutions.yaml'):
with open('./reuse/substitutions.yaml', 'r') as fd:
myst_substitutions = yaml.safe_load(fd.read())


############################################################
### PDF configuration
############################################################

latex_additional_files = [
"./.sphinx/fonts/Ubuntu-B.ttf",
"./.sphinx/fonts/Ubuntu-R.ttf",
"./.sphinx/fonts/Ubuntu-RI.ttf",
"./.sphinx/fonts/UbuntuMono-R.ttf",
"./.sphinx/fonts/UbuntuMono-RI.ttf",
"./.sphinx/fonts/UbuntuMono-B.ttf",
"./.sphinx/images/Canonical-logo-4x.png",
"./.sphinx/images/front-page-light.pdf",
"./.sphinx/images/normal-page-footer.pdf",
]

latex_engine = 'xelatex'
latex_show_pagerefs = True
latex_show_urls = 'footnote'

with open(".sphinx/latex_elements_template.txt", "rt") as file:
latex_config = file.read()

latex_elements = ast.literal_eval(latex_config.replace("$PROJECT", project))

master_doc = 'index'
5 changes: 4 additions & 1 deletion docs/canonicalk8s/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,7 @@
with open('./reuse/substitutions.yaml', 'r') as fd:
myst_substitutions = yaml.safe_load(fd.read())

suppress_warnings = ["myst.xref_missing", "myst.iref_ambiguous"]

############################################################
### PDF configuration
Expand All @@ -249,4 +250,6 @@
with open(".sphinx/latex_elements_template.txt", "rt") as file:
latex_config = file.read()

latex_elements = ast.literal_eval(latex_config.replace("$PROJECT", project))
latex_elements = ast.literal_eval(latex_config.replace("$PROJECT", project))

master_doc = 'index'
10 changes: 9 additions & 1 deletion docs/canonicalk8s/custom_conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@
'canonical.terminal-output',
'notfound.extension',
'sphinxcontrib.cairosvgconverter',
'sphinxcontrib.kroki',
]

# Add custom required Python modules that must be added to the
Expand All @@ -184,7 +185,8 @@
# Add files or directories that should be excluded from processing.
custom_excludes = [
'doc-cheat-sheet*',
'_parts'
'_parts/*',
'src/_parts'
]

# Add CSS files (located in .sphinx/_static/)
Expand Down Expand Up @@ -218,6 +220,12 @@

## Add any configuration that is not covered by the common conf.py file.

# Change the default code highlighting to 'none'

highlight_language = 'none'



# Define a :center: role that can be used to center the content of table cells.
rst_prolog = '''
.. role:: center
Expand Down
Loading

0 comments on commit 03149aa

Please sign in to comment.