Skip to main content

Copy your docs directly to the gh-pages branch.

Project description

GitHub Pages Import

CI status CircleCI TravisCI

License Version

As part of gunicorn, Benoit Chesneau and I have been starting to look at how to host documentation. There's the obvious method of using GitHub's post-receive hook to trigger doc builds and rsync to a webserver, but we ended up wanting to try out github's hosting to make the whole interface a bit more robust.

GitHub Pages is a pretty awesome service that GitHub provides for hosting project documentation. The only thing is that it requires a gh-pages branch that is the site's document root. This means that keeping documentation sources in the branch with code is a bit difficult. And it really turns into a head scratcher for things like Sphinx that want to access documentation sources and code sources at the same time.

Then I stumbled across an interesting looking package called github-tools that looked almost like what I wanted. It was a tad complicated and more involved than I wanted but it gave me an idea. Why not just write a script that can copy a directory to the gh-pages branch of the repository. This saves me from even having to think about the branch and everything becomes magical.

This is what ghp-import was written for.

Big Fat Warning

This will DESTROY your gh-pages branch. If you love it, you'll want to take backups before playing with this. This script assumes that gh-pages is 100% derivative. You should never edit files in your gh-pages branch by hand if you're using this script because you will lose your work.

When used with a prefix, only files below the set prefix will be destroyed, limiting the above warning to just that directory and everything below it.

Usage

Usage: ghp-import [OPTIONS] DIRECTORY

Options:
  -n, --no-jekyll       Include a .nojekyll file in the branch.
  -c CNAME, --cname=CNAME
                        Write a CNAME file with the given CNAME.
  -m MESG, --message=MESG
                        The commit message to use on the target branch.
  -p, --push            Push the branch to origin/{branch} after committing.
  -x PREFIX, --prefix=PREFIX
                        The prefix to add to each file that gets pushed to the
                        remote. Only files below this prefix will be cleared
                        out. [none]
  -f, --force           Force the push to the repository.
  -o, --no-history      Force new commit without parent history.
  -r REMOTE, --remote=REMOTE
                        The name of the remote to push to. [origin]
  -b BRANCH, --branch=BRANCH
                        Name of the branch to write to. [gh-pages]
  -s, --shell           Use the shell when invoking Git. [False]
  -l, --follow-links    Follow symlinks when adding files. [False]
  -h, --help            show this help message and exit

Its pretty simple. Inside your repository just run ghp-import $DOCS_DIR where $DOCS_DIR is the path to the built documentation. This will write a commit to your gh-pages branch with the current documents in it.

If you specify -p it will also attempt to push the gh-pages branch to GitHub. By default it'll just run git push origin gh-pages. You can specify a different remote using the -r flag.

The -o option will discard any previous history and ensure that only a single commit is always pushed to the gh-pages branch. This is useful to avoid bloating the repository size and is highly recommended.

You can specify a different branch with -b. This is useful for user and organization page, which are served from the master branch.

Some Windows users report needing to pass Git commands through the shell which can be accomplished by passing -s.

The -l option will cause the import to follow symlinks for users that have odd configurations that include symlinking outside of their documentation directory.

Python Usage

You can also call ghp_import directly from your Python code as a library. The library has one public function ghp_import.ghp_import, which accepts the following arguments:

  • srcdir: The path to the built documentation (required).
  • remote: The name of the remote to push to. Default: origin.
  • branch: Name of the branch to write to. Default: gh-pages.
  • mesg: The commit message to use on the target branch. Default: Update documentation.
  • push: Push the branch to {remote}/{branch} after committing. Default: False.
  • prefix: The prefix to add to each file that gets pushed to the remote. Default: None.
  • force: Force the push to the repository. Default: False.
  • no_history: Force new commit without parent history. Default: False.
  • use_shell: Default: Use the shell when invoking Git. False.
  • followlinks: Follow symlinks when adding files. Default: False.
  • cname: Write a CNAME file with the given CNAME. Default: None.
  • nojekyll: Include a .nojekyll file in the branch. Default: False.

With Python's current working directory (cwd) inside your repository, do the following:

from ghp_import import ghp_import
ghp_import('docs', push=True, cname='example.com')

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghp-import-2.0.2.tar.gz (10.9 kB view details)

Uploaded Source

Built Distribution

ghp_import-2.0.2-py3-none-any.whl (11.0 kB view details)

Uploaded Python 3

File details

Details for the file ghp-import-2.0.2.tar.gz.

File metadata

  • Download URL: ghp-import-2.0.2.tar.gz
  • Upload date:
  • Size: 10.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.6

File hashes

Hashes for ghp-import-2.0.2.tar.gz
Algorithm Hash digest
SHA256 947b3771f11be850c852c64b561c600fdddf794bab363060854c1ee7ad05e071
MD5 2358f1fdcdc7bfb46292f83b644c7783
BLAKE2b-256 13b88dd1ea116774415b785c7c2e4bf91c2c50b5eae577bcc2d2a095c2ce20fd

See more details on using hashes here.

File details

Details for the file ghp_import-2.0.2-py3-none-any.whl.

File metadata

  • Download URL: ghp_import-2.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.60.0 CPython/3.9.6

File hashes

Hashes for ghp_import-2.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5f8962b30b20652cdffa9c5a9812f7de6bcb56ec475acac579807719bf242c46
MD5 54bc49f560902a25dc06fba3326b4135
BLAKE2b-256 d542a00220ae61d06b5bb288c0006bfd32bd61b4ae61adaef61fe8ad3a8ff9c3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page