forked from aurora-opensource/au
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mike_bin.py
78 lines (63 loc) · 2.42 KB
/
mike_bin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Copyright 2023 Aurora Operations, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import re
import subprocess
import sys
from unittest import mock
import mike.driver
import mike.mkdocs_utils
from mike.mkdocs_utils import docs_version_var
# We need to monkey patch any function in mike which calls `mkdocs` via its
# command line interface. Fortunately, there are only two: `version` and
# `build`.
def override_version():
"""Override mike's native logic for retrieving the version."""
output = subprocess.run(
["update_docs", "--version"],
check=True,
stdout=subprocess.PIPE,
universal_newlines=True,
).stdout.rstrip()
# Original line:
#
# m = re.search('^mkdocs, version (\\S*)', output)
#
# Changed version:
m = re.search("^\\S+, version (\\S*)", output)
return m.group(1)
def override_build(config_file, version, verbose=True):
"""Override mike's native logic for building the docs."""
# Original line:
#
# command = (
# ['mkdocs', 'build', '--clean'] +
# (['--config-file', config_file] if config_file else [])
# )
#
# Changed version (reformatted with Black):
command = ["update_docs", "build", "--clean"] + (
["--config-file", config_file] if config_file else []
)
env = os.environ.copy()
env[docs_version_var] = version
output = None if verbose else subprocess.DEVNULL
subprocess.run(command, check=True, env=env, stdout=output, stderr=output)
if __name__ == "__main__":
# `update_docs` is our name for `mkdocs`. It will be found in the same folder as this script.
# We need to add this folder to the PATH.
os.environ["PATH"] = f"{os.path.join(os.getcwd())}:{os.environ['PATH']}"
with mock.patch("mike.mkdocs_utils.version", override_version):
with mock.patch("mike.mkdocs_utils.build", override_build):
sys.exit(mike.driver.main())