mirror of https://github.com/kubeflow/website.git
93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
"""Mark outdated docs as requiring updating
|
|
|
|
This script finds all markdown files under `content/` that haven't been updated
|
|
recently (default 30 days) according to git, and adds a header warning that the
|
|
file is out of date.
|
|
|
|
Example usage:
|
|
|
|
python scripts/add_outdated_banner.py --old-version 1.0 --new-version 1.1
|
|
|
|
"""
|
|
|
|
import argparse
|
|
import re
|
|
from datetime import datetime, timedelta
|
|
from pathlib import Path
|
|
from subprocess import check_output
|
|
|
|
|
|
WARNING = """
|
|
|
|
{{%% alert title="Out of date" color="warning" %%}}
|
|
This guide contains outdated information pertaining to Kubeflow %s. This guide
|
|
needs to be updated for Kubeflow %s.
|
|
{{%% /alert %%}}
|
|
|
|
"""
|
|
|
|
WARNING_REGEX = r"""
|
|
|
|
{{% alert title="Out of date".*{{% /alert %}}
|
|
|
|
"""
|
|
|
|
|
|
def main(warning_text: str, cutoff: timedelta):
|
|
now = datetime.utcnow().astimezone()
|
|
|
|
for md in Path("content/").rglob("*.md"):
|
|
last_changed = check_output(
|
|
["git", "log", "-1", "--pretty=format:%ci", md]
|
|
).decode("utf-8")
|
|
last_changed = datetime.strptime(last_changed, "%Y-%m-%d %H:%M:%S %z")
|
|
|
|
# If the docs are recent, don't add the header
|
|
if now - last_changed < cutoff:
|
|
continue
|
|
|
|
contents = md.read_text()
|
|
|
|
# If the doc already has an out of date warning, replace it with the new one
|
|
if re.search(WARNING_REGEX, contents, flags=re.MULTILINE | re.DOTALL):
|
|
md.write_text(
|
|
re.sub(
|
|
WARNING_REGEX,
|
|
warning_text,
|
|
contents,
|
|
flags=re.MULTILINE | re.DOTALL,
|
|
)
|
|
)
|
|
# Otherwise, check to see if there's a front matter section delimited by `+++`. If so,
|
|
# add the out of date warning directly afterwards.
|
|
else:
|
|
pluses = list(re.finditer(r"\+\+\+", contents))
|
|
if len(pluses) == 2:
|
|
p = pluses[1]
|
|
|
|
# If there's only a front matter section and no actual content, don't bother
|
|
# adding the warning.
|
|
if contents[p.end():].strip():
|
|
md.write_text(contents[:p.end()] + warning_text + contents[p.end():])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
parser = argparse.ArgumentParser(description="Mark old docs as requiring updating")
|
|
|
|
parser.add_argument(
|
|
"--old-version",
|
|
required=True,
|
|
help="The docs version that is considered out of date",
|
|
)
|
|
parser.add_argument("--new-version", required=True, help="The newest docs version")
|
|
parser.add_argument(
|
|
"--cutoff",
|
|
default=30,
|
|
type=int,
|
|
help="Cutoff in days that a document must have been "
|
|
"updated within to not be considered out of date",
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
main(WARNING % (args.old_version, args.new_version), timedelta(days=args.cutoff))
|