Files
pw/scripts/verify-approvals.py
T
Asger Geel WeirsøeandClaude Opus 5.5 e58a11c2b4 feat: flyt sitet fra Astro til Zola
Samme indhold, URL'er og udseende, bygget af en enkelt zola-binær og Tailwind
standalone-CLI uden Node. Kanonisk domæne er asger.weirsoe.dk.

Blogindlæg ligger som page bundles med frontmatter Zola forstår, så de gamle
stempler er ugyldige, indtil scripts/omstempl.py er kørt med PUBLISH_KEY.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 16:47:08 +01:00

66 lines
2.1 KiB
Python
Executable File

#!/usr/bin/env python3
"""Stopper buildet hvis et blogindlæg mangler et gyldigt `godkendt:`-stempel.
PUBLISH_KEY=<hex> python3 scripts/verify-approvals.py
"""
import hmac
import os
import sys
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from godkendelse import BLOG, assets_for, read_text, sign, stamp_of # noqa: E402
def main():
key = os.environ.get("PUBLISH_KEY")
if not key:
print("PUBLISH_KEY mangler; kan ikke verificere godkendelser.", file=sys.stderr)
return 1
key = bytes.fromhex(key)
bad = ok = 0
def fail(msg):
nonlocal bad
print(f"✗ {msg}", file=sys.stderr)
bad += 1
for name in sorted(os.listdir(BLOG)):
path = f"{BLOG}/{name}"
if name == "_index.md":
continue
# Zola bygger enhver .md under content/blog, så intet må ligge uden for en bundle.
if not os.path.isdir(path):
fail(f"{path}: et indlæg skal ligge som {BLOG}/<slug>/index.md")
continue
rel = f"{path}/index.md"
if not os.path.isfile(rel):
fail(f"{path}/: filer uden et godkendt indlæg")
continue
text = read_text(rel)
stamp, draft = stamp_of(text)
if draft:
fail(f"{rel}: udkast (draft: true) må ikke ligge i det offentlige repo")
continue
if not stamp:
fail(f"{rel}: mangler godkendelse")
continue
try:
assets = assets_for(name)
except ValueError as e:
fail(str(e))
continue
if not hmac.compare_digest(stamp, sign(key, rel, text, assets)):
fail(f"{rel}: godkendelsen passer ikke til indholdet (ændret efter godkendelse?)")
continue
ok += 1
print(f"✓ {rel}" + (f" (+{len(assets)} billeder)" if assets else ""))
if bad:
print(f"\n{bad} indlæg er ikke godkendt. Intet bliver udgivet.", file=sys.stderr)
return 1
print(f"\nAlle {ok} indlæg er godkendt.")
return 0
if __name__ == "__main__":
sys.exit(main())