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>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
7e13068dd2
commit
e58a11c2b4
Executable
+65
@@ -0,0 +1,65 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user