All checks were successful
Build and publish policy-nexus image / build-and-push (push) Successful in 43s
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import datetime as dt
|
|
from pathlib import Path
|
|
|
|
from build_site import _add_interval, load_manifest, repository_paths
|
|
from render import split_frontmatter
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("manifest", type=Path)
|
|
parser.add_argument("--as-of", type=dt.date.fromisoformat, default=dt.date.today())
|
|
args = parser.parse_args()
|
|
manifest_path = args.manifest.resolve()
|
|
manifest = load_manifest(manifest_path)
|
|
repositories = repository_paths(manifest_path, manifest)
|
|
stale = 0
|
|
for document in manifest["documents"]:
|
|
repo = repositories[document["source_repo"]]
|
|
source = (repo / document["source_path"]).resolve()
|
|
meta, _markdown = split_frontmatter(source.read_text(encoding="utf-8"))
|
|
reviewed = meta.get("last_reviewed") or meta.get("updated")
|
|
interval = document.get("review_interval") or meta.get("review_interval")
|
|
if not reviewed or not interval:
|
|
print(f"UNDECLARED {document['id']}: review date/interval missing")
|
|
stale += 1
|
|
continue
|
|
due = _add_interval(reviewed, interval)
|
|
state = "STALE" if due < args.as_of else "current"
|
|
print(f"{state} {document['id']}: reviewed {reviewed}, due {due}")
|
|
stale += state == "STALE"
|
|
return 1 if stale else 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|