meta/ansible/roles/wetgit-forgejo/templates/daily-sync.sh.j2
Coornhert 03402cdfa0 feat: dagelijkse sync pipeline + cron job
- sync.py: vergelijkt SRU catalogus met lokale staat, verwerkt delta's
- daily-sync.sh: wrapper script voor cron (lock, clone, pull, sync, push)
- Cron job: dagelijks om 03:00 op dt-prod-01
- Forgejo API token in group_vars voor git push authenticatie

Refs #9
2026-03-30 06:42:04 +02:00

53 lines
1.5 KiB
Django/Jinja

#!/usr/bin/env bash
set -euo pipefail
# WetGIT dagelijkse sync — managed by Ansible
# Haalt delta-updates op via SRU en commit naar wetgit/rijk.
LOG_PREFIX="[$(date '+%Y-%m-%d %H:%M:%S')]"
SYNC_DIR="{{ app_dir }}/sync"
RIJK_REPO="$SYNC_DIR/rijk"
XML_CACHE="{{ data_dir }}/xml-cache"
META_REPO="$SYNC_DIR/meta"
LOCK_FILE="$SYNC_DIR/.sync.lock"
# Voorkom parallelle runs
if [ -f "$LOCK_FILE" ]; then
pid=$(cat "$LOCK_FILE")
if kill -0 "$pid" 2>/dev/null; then
echo "$LOG_PREFIX Sync al actief (PID $pid), overslaan."
exit 0
fi
fi
echo $$ > "$LOCK_FILE"
trap "rm -f $LOCK_FILE" EXIT
# Zorg dat de repos gecloned zijn
mkdir -p "$SYNC_DIR" "$XML_CACHE"
if [ ! -d "$RIJK_REPO/.git" ]; then
echo "$LOG_PREFIX Eerste run — clone wetgit/rijk..."
git clone https://{{ forgejo_admin_user }}:{{ forgejo_api_token }}@{{ forgejo_domain }}/wetgit/rijk.git "$RIJK_REPO"
cd "$RIJK_REPO"
git config user.name "Coornhert"
git config user.email "coornhert@wetgit.nl"
else
cd "$RIJK_REPO"
git pull --ff-only origin main 2>/dev/null || true
fi
if [ ! -d "$META_REPO/.git" ]; then
echo "$LOG_PREFIX Eerste run — clone wetgit/meta..."
git clone https://{{ forgejo_admin_user }}:{{ forgejo_api_token }}@{{ forgejo_domain }}/wetgit/meta.git "$META_REPO"
fi
cd "$META_REPO"
git pull --ff-only origin main 2>/dev/null || true
echo "$LOG_PREFIX Start sync..."
PYTHONPATH="$META_REPO/src" python3 -m wetgit.pipeline.sync \
--rijk-repo "$RIJK_REPO" \
--xml-cache "$XML_CACHE" \
--delay 0.15
echo "$LOG_PREFIX Sync voltooid."