Add pre-commit hook to auto-sync News/homepage/bot pages
Versioned hook at tools/git-hooks/pre-commit runs build_listings.py and build_botlinks.py on every commit and stages their output, so the News hub, homepage "Latest news", /llms.txt and /links-for-bots/ always reflect the actual Blog/Projects/News content — no manual step. Non-blocking: warns and proceeds if Python or a generator fails. Activated with `git config core.hooksPath tools/git-hooks`. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
cf3fce2522
commit
3eef7a9314
|
|
@ -0,0 +1,22 @@
|
|||
# Git hooks
|
||||
|
||||
Versioned hooks that keep auto-generated files in sync.
|
||||
|
||||
## Activate (once per clone)
|
||||
|
||||
```sh
|
||||
git config core.hooksPath tools/git-hooks
|
||||
```
|
||||
|
||||
That points git at this folder. From then on, every `git commit` runs
|
||||
`tools/build_listings.py` and `tools/build_botlinks.py` and stages their output,
|
||||
so the News hub, homepage "Latest news", `/llms.txt` and `/links-for-bots/` stay
|
||||
in sync with the actual Blog / Projects / News pages.
|
||||
|
||||
The hook never blocks a commit — if Python or a generator fails it just prints a
|
||||
warning and lets the commit proceed.
|
||||
|
||||
> Note: SEO metadata and the sitemap are **not** regenerated on commit (that is a
|
||||
> heavier, all-pages pass). When you add a new page, also add its date to
|
||||
> `ARTICLE_DATES` in `tools/seo_inject.py` and run
|
||||
> `python tools/seo_inject.py --all --sitemap`.
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
#!/bin/sh
|
||||
# ---------------------------------------------------------------------------
|
||||
# MSOS pre-commit hook — keeps derived files in sync automatically.
|
||||
#
|
||||
# On every commit it regenerates and stages:
|
||||
# - the News hub grid + homepage "Latest news" (tools/build_listings.py)
|
||||
# - /llms.txt and /links-for-bots/ (tools/build_botlinks.py)
|
||||
# so adding a blog post or an event/project flows through to News, the homepage
|
||||
# and the bot pages without any manual command.
|
||||
#
|
||||
# It never blocks a commit: if Python or a generator fails, it warns and lets
|
||||
# the commit proceed.
|
||||
#
|
||||
# Activate once per clone: git config core.hooksPath tools/git-hooks
|
||||
# ---------------------------------------------------------------------------
|
||||
set -u
|
||||
|
||||
PY="$(command -v python || command -v python3 || true)"
|
||||
if [ -z "$PY" ]; then
|
||||
echo "pre-commit: Python not found — skipping News/bot regeneration." >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Run from the repo root regardless of where git invoked the hook.
|
||||
ROOT="$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
|
||||
cd "$ROOT" || exit 0
|
||||
|
||||
"$PY" tools/build_listings.py >/dev/null 2>&1 \
|
||||
|| echo "pre-commit: build_listings.py failed — News/homepage not refreshed." >&2
|
||||
"$PY" tools/build_botlinks.py >/dev/null 2>&1 \
|
||||
|| echo "pre-commit: build_botlinks.py failed — bot pages not refreshed." >&2
|
||||
|
||||
# Stage only the generated outputs (no-op if unchanged).
|
||||
git add -- \
|
||||
en/news/index.html mk/news/index.html si/news/index.html \
|
||||
en/index.html mk/index.html si/index.html \
|
||||
llms.txt links-for-bots >/dev/null 2>&1 || true
|
||||
|
||||
exit 0
|
||||
Loading…
Reference in New Issue