diff options
author | Waleed Khan <me@waleedkhan.name> | 2019-01-10 19:42:20 -0800 |
---|---|---|
committer | Waleed Khan <me@waleedkhan.name> | 2019-02-10 16:39:41 -0800 |
commit | 33c8b1d9525c0e01dbd97557af74797d6ddb23dd (patch) | |
tree | a7afcf4ef05df9ad1de9ed0d5465fb896837c800 | |
parent | 18e8774f90744b810c99676566fe47cbe96c1b04 (diff) | |
download | sphinx-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.py | 17 | ||||
-rw-r--r-- | tests/test_ext_githubpages.py | 15 |
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' |