| #!/usr/bin/env python3 |
| # A script to invoke mkdocs with the correct environment. |
| # Additionally supports deploying via mike: |
| # ./mkdocs deploy [mike-deploy-options] |
| # For example: |
| # ./mkdocs deploy <version> |
| # This will checkout the website to fmt/build/fmt.dev and deploy documentation |
| # <version> there. |
| |
| import errno, os, shutil, sys |
| from subprocess import call |
| |
| support_dir = os.path.dirname(os.path.normpath(__file__)) |
| build_dir = os.path.join(os.path.dirname(support_dir), 'build') |
| |
| # Set PYTHONPATH for the mkdocstrings handler. |
| env = os.environ.copy() |
| path = env.get('PYTHONPATH') |
| env['PYTHONPATH'] = \ |
| (path + ':' if path else '') + os.path.join(support_dir, 'python') |
| |
| redirect_page = \ |
| '''<!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>Redirecting</title> |
| <noscript> |
| <meta http-equiv="refresh" content="1; url=11.0/" /> |
| </noscript> |
| <script> |
| window.location.replace( |
| "api/" + window.location.search + window.location.hash |
| ); |
| </script> |
| </head> |
| <body> |
| Redirecting to <a href="api/">api</a>... |
| </body> |
| </html> |
| ''' |
| |
| config_path = os.path.join(support_dir, 'mkdocs.yml') |
| args = sys.argv[1:] |
| if len(args) > 0: |
| command = args[0] |
| if command == 'deploy' or command == 'set-default': |
| git_url = 'https://github.com/' if 'CI' in os.environ else 'git@github.com:' |
| site_repo = git_url + 'fmtlib/fmt.dev.git' |
| |
| site_dir = os.path.join(build_dir, 'fmt.dev') |
| try: |
| shutil.rmtree(site_dir) |
| except OSError as e: |
| if e.errno == errno.ENOENT: |
| pass |
| ret = call(['git', 'clone', '--depth=1', site_repo, site_dir]) |
| if ret != 0: |
| sys.exit(ret) |
| |
| # Copy the config to the build dir because the site is built relative to it. |
| config_build_path = os.path.join(build_dir, 'mkdocs.yml') |
| shutil.copyfile(config_path, config_build_path) |
| |
| version = args[1] |
| ret = call(['mike'] + args + ['--config-file', config_build_path, |
| '--branch', 'master'], cwd=site_dir, env=env) |
| if ret != 0 or version == 'dev': |
| sys.exit(ret) |
| current_doc_path = os.path.join(site_dir, version) |
| # mike stages files added by deploy for deletion for unclear reason, |
| # undo it. |
| ret = call(['git', 'reset', '--hard'], cwd=site_dir) |
| if False: |
| os.makedirs(current_doc_path, exist_ok=True) |
| redirect_page_path = os.path.join(current_doc_path, 'api.html') |
| with open(redirect_page_path, "w") as file: |
| file.write(redirect_page) |
| ret = call(['git', 'add', redirect_page_path], cwd=site_dir) |
| if ret != 0: |
| sys.exit(ret) |
| ret = call(['git', 'commit', '--amend', '--no-edit'], cwd=site_dir) |
| sys.exit(ret) |
| elif not command.startswith('-'): |
| args += ['-f', config_path] |
| sys.exit(call(['mkdocs'] + args, env=env)) |