summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaleed Khan <me@waleedkhan.name>2019-01-10 19:42:20 -0800
committerWaleed Khan <me@waleedkhan.name>2019-02-10 16:39:41 -0800
commit33c8b1d9525c0e01dbd97557af74797d6ddb23dd (patch)
treea7afcf4ef05df9ad1de9ed0d5465fb896837c800
parent18e8774f90744b810c99676566fe47cbe96c1b04 (diff)
downloadsphinx-git-33c8b1d9525c0e01dbd97557af74797d6ddb23dd.tar.gz
githubpages: support custom domains
Github Pages allows you to link a custom domain to your Github Pages site by adding a `CNAME` file at the top-level of your `docs` directory. The `githubpages` extension already inserts a `.nojekyll` file in the `docs` directory, so it's a good place to add support for this `CNAME` file as well.
-rw-r--r--sphinx/ext/githubpages.py17
-rw-r--r--tests/test_ext_githubpages.py15
2 files changed, 28 insertions, 4 deletions
diff --git a/sphinx/ext/githubpages.py b/sphinx/ext/githubpages.py
index f39d1cb58..5cecddd09 100644
--- a/sphinx/ext/githubpages.py
+++ b/sphinx/ext/githubpages.py
@@ -9,6 +9,7 @@
"""
import os
+import urllib
import sphinx
@@ -19,14 +20,22 @@ if False:
from sphinx.environment import BuildEnvironment # NOQA
-def create_nojekyll(app, env):
+def create_nojekyll_and_cname(app, env):
# type: (Sphinx, BuildEnvironment) -> None
if app.builder.format == 'html':
- path = os.path.join(app.builder.outdir, '.nojekyll')
- open(path, 'wt').close()
+ open(os.path.join(app.builder.outdir, '.nojekyll'), 'wt').close()
+
+ html_baseurl = app.config.html_baseurl
+ if html_baseurl:
+ domain = urllib.parse.urlparse(html_baseurl).hostname
+ if domain and not domain.endswith(".github.io"):
+ with open(os.path.join(app.builder.outdir, 'CNAME'), 'wt') as f:
+ # NOTE: don't write a trailing newline. The `CNAME` file that's
+ # auto-generated by the Github UI doesn't have one.
+ f.write(domain)
def setup(app):
# type: (Sphinx) -> Dict[str, Any]
- app.connect('env-updated', create_nojekyll)
+ app.connect('env-updated', create_nojekyll_and_cname)
return {'version': sphinx.__display_version__, 'parallel_read_safe': True}
diff --git a/tests/test_ext_githubpages.py b/tests/test_ext_githubpages.py
index 21b101b73..450a25498 100644
--- a/tests/test_ext_githubpages.py
+++ b/tests/test_ext_githubpages.py
@@ -15,3 +15,18 @@ import pytest
def test_githubpages(app, status, warning):
app.builder.build_all()
assert (app.outdir / '.nojekyll').exists()
+ assert not (app.outdir / 'CNAME').exists()
+
+
+@pytest.mark.sphinx('html', testroot='ext-githubpages', confoverrides={'html_baseurl': 'https://sphinx-doc.github.io'})
+def test_no_cname_for_github_io_domain(app, status, warning):
+ app.builder.build_all()
+ assert (app.outdir / '.nojekyll').exists()
+ assert not (app.outdir / 'CNAME').exists()
+
+
+@pytest.mark.sphinx('html', testroot='ext-githubpages', confoverrides={'html_baseurl': 'https://sphinx-doc.org'})
+def test_cname_for_custom_domain(app, status, warning):
+ app.builder.build_all()
+ assert (app.outdir / '.nojekyll').exists()
+ assert (app.outdir / 'CNAME').text() == 'sphinx-doc.org'