diff --git a/configs/bank-landing/index.html b/configs/bank-landing/index.html index 52c3955..ba5857d 100644 --- a/configs/bank-landing/index.html +++ b/configs/bank-landing/index.html @@ -1556,10 +1556,10 @@ tw run-until-done && tw balance /privacy.

-

- Landing v42 - · content - · b01058c +

+ Bank landing v42 + · content + · 2504315

diff --git a/configs/exchange-landing/index.html b/configs/exchange-landing/index.html index 44991b0..6b498ad 100644 --- a/configs/exchange-landing/index.html +++ b/configs/exchange-landing/index.html @@ -490,10 +490,10 @@ sudo apt-get install -y taler-wallet-cli /privacy.

-

- Landing v42 - · content - · b01058c +

+ Exchange landing v42 + · content + · 2504315

diff --git a/configs/merchant-landing/index.html b/configs/merchant-landing/index.html index 6797c55..21dc6f5 100644 --- a/configs/merchant-landing/index.html +++ b/configs/merchant-landing/index.html @@ -833,10 +833,10 @@ sudo apt-get install -y taler-wallet-cli /privacy.

-

- Landing v42 - · content - · b01058c +

+ Merchant landing v42 + · content + · 2504315

diff --git a/configs/shared/landing-version.json b/configs/shared/landing-version.json index f3ccae7..4aec0ff 100644 --- a/configs/shared/landing-version.json +++ b/configs/shared/landing-version.json @@ -1,9 +1,35 @@ { - "version": 42, - "updated_iso": "2026-07-17T13:31:57+02:00", - "updated_human": "2026-07-17 13:31 CEST", - "commit": "b01058c6c1f8bf25fa1ddcd1224c65fb12a1debd", - "commit_short": "b01058c", - "repo_commit_url": "https://git.hacktivism.ch/hernani/koopa-admin-log/commit/b01058c6c1f8bf25fa1ddcd1224c65fb12a1debd", - "note": "Bump with scripts/taler-landing/stamp-landing-version.sh --bump after each landing content change." + "note": "Per-site landing content versions (start 42). Bump: scripts/taler-landing/stamp-landing-version.sh --bump bank|exchange|merchant", + "sites": { + "bank": { + "version": 42, + "label": "Bank landing", + "path": "configs/bank-landing", + "updated_iso": "2026-07-17T13:32:58+02:00", + "updated_human": "2026-07-17 13:32 CEST", + "commit": "250431590ede905cddf79f7390d2267578a5e758", + "commit_short": "2504315", + "repo_commit_url": "https://git.hacktivism.ch/hernani/koopa-admin-log/commit/250431590ede905cddf79f7390d2267578a5e758" + }, + "exchange": { + "version": 42, + "label": "Exchange landing", + "path": "configs/exchange-landing", + "updated_iso": "2026-07-17T13:32:58+02:00", + "updated_human": "2026-07-17 13:32 CEST", + "commit": "250431590ede905cddf79f7390d2267578a5e758", + "commit_short": "2504315", + "repo_commit_url": "https://git.hacktivism.ch/hernani/koopa-admin-log/commit/250431590ede905cddf79f7390d2267578a5e758" + }, + "merchant": { + "version": 42, + "label": "Merchant landing", + "path": "configs/merchant-landing", + "updated_iso": "2026-07-17T13:32:58+02:00", + "updated_human": "2026-07-17 13:32 CEST", + "commit": "250431590ede905cddf79f7390d2267578a5e758", + "commit_short": "2504315", + "repo_commit_url": "https://git.hacktivism.ch/hernani/koopa-admin-log/commit/250431590ede905cddf79f7390d2267578a5e758" + } + } } diff --git a/scripts/taler-landing/README.md b/scripts/taler-landing/README.md index 8e70120..f9e9d62 100644 --- a/scripts/taler-landing/README.md +++ b/scripts/taler-landing/README.md @@ -147,15 +147,17 @@ podman exec taler-hacktivism-bank crontab -l # inspect curl -sS https://bank.hacktivism.ch/intro/stats.json | python3 -m json.tool | head ``` -## Landing content version +## Landing content version (per site) -Footers show **Landing vN** + last content change + linkified git commit. +Each landing footer shows **Bank|Exchange|Merchant landing vN** + last content +change + linkified git commit. Versions are **independent** (start **v42** each). -- State: `configs/shared/landing-version.json` (start **v42**) -- After editing any `configs/*-landing/` content: +- State: `configs/shared/landing-version.json` → `sites.bank|exchange|merchant` +- After editing one site (example bank): ```bash - ./scripts/taler-landing/stamp-landing-version.sh --bump - git add configs/ && git commit -m "landing: …" - ./scripts/taler-landing/stamp-landing-version.sh + ./scripts/taler-landing/stamp-landing-version.sh --bump bank + git add configs/ && git commit -m "landing(bank): …" + ./scripts/taler-landing/stamp-landing-version.sh bank git add configs/ && git commit --amend --no-edit # optional pin ``` +- Re-stamp all without bump: `./scripts/taler-landing/stamp-landing-version.sh --all` diff --git a/scripts/taler-landing/stamp-landing-version.sh b/scripts/taler-landing/stamp-landing-version.sh index 570636c..9616dec 100755 --- a/scripts/taler-landing/stamp-landing-version.sh +++ b/scripts/taler-landing/stamp-landing-version.sh @@ -1,57 +1,83 @@ #!/usr/bin/env bash -# Stamp landing footers with version + last content change + linkified commit. +# Stamp landing footers per site: version + last content change + linkified commit. +# +# Sites: bank | exchange | merchant # # Usage (from koopa-admin-log root): -# ./scripts/taler-landing/stamp-landing-version.sh # re-stamp with HEAD + current version -# ./scripts/taler-landing/stamp-landing-version.sh --bump # version += 1, then stamp HEAD -# ./scripts/taler-landing/stamp-landing-version.sh --set 42 # force version +# ./scripts/taler-landing/stamp-landing-version.sh bank +# re-stamp bank with current version + HEAD +# ./scripts/taler-landing/stamp-landing-version.sh --bump bank +# bank version += 1, then stamp HEAD +# ./scripts/taler-landing/stamp-landing-version.sh --set 42 exchange +# force exchange version to 42 +# ./scripts/taler-landing/stamp-landing-version.sh --all +# re-stamp all sites (no bump) +# ./scripts/taler-landing/stamp-landing-version.sh --bump --all +# bump every site by 1 (rare) # -# Typical flow after editing landing HTML/CSS/JS: -# 1) edit landings -# 2) ./scripts/taler-landing/stamp-landing-version.sh --bump -# 3) git add configs/ && git commit -# 4) ./scripts/taler-landing/stamp-landing-version.sh && git add configs/ && git commit --amend --no-edit -# -# Or one-shot (commits for you if GIT_STAMP_COMMIT=1). +# Typical flow after editing one site: +# 1) edit configs/bank-landing/… +# 2) ./scripts/taler-landing/stamp-landing-version.sh --bump bank +# 3) git add configs/ && git commit -m "landing(bank): …" +# 4) ./scripts/taler-landing/stamp-landing-version.sh bank +# git add configs/ && git commit --amend --no-edit # optional pin set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" VER_FILE="$ROOT/configs/shared/landing-version.json" REPO_WEB="${LANDING_REPO_WEB:-https://git.hacktivism.ch/hernani/koopa-admin-log}" -LANDINGS=( - "$ROOT/configs/bank-landing/index.html" - "$ROOT/configs/exchange-landing/index.html" - "$ROOT/configs/merchant-landing/index.html" + +declare -A SITE_HTML=( + [bank]="$ROOT/configs/bank-landing/index.html" + [exchange]="$ROOT/configs/exchange-landing/index.html" + [merchant]="$ROOT/configs/merchant-landing/index.html" +) +declare -A SITE_LABEL=( + [bank]="Bank landing" + [exchange]="Exchange landing" + [merchant]="Merchant landing" +) +declare -A SITE_PATH=( + [bank]="configs/bank-landing" + [exchange]="configs/exchange-landing" + [merchant]="configs/merchant-landing" ) export TZ="${TZ:-Europe/Zurich}" bump=0 set_ver="" +do_all=0 +sites=() + while [ $# -gt 0 ]; do case "$1" in --bump) bump=1; shift ;; --set) set_ver="${2:-}"; shift 2 ;; + --all) do_all=1; shift ;; + bank|exchange|merchant) sites+=("$1"); shift ;; -h|--help) - sed -n '2,20p' "$0" + sed -n '2,28p' "$0" exit 0 ;; - *) echo "unknown arg: $1" >&2; exit 2 ;; + *) echo "unknown arg: $1 (sites: bank exchange merchant)" >&2; exit 2 ;; esac done +if [ "$do_all" = 1 ]; then + sites=(bank exchange merchant) +fi +if [ "${#sites[@]}" -eq 0 ]; then + echo "usage: $0 [--bump|--set N] bank|exchange|merchant|--all" >&2 + exit 2 +fi + if [ ! -f "$VER_FILE" ]; then - echo '{"version":42,"updated_iso":"","updated_human":"","commit":"","commit_short":""}' >"$VER_FILE" + cat >"$VER_FILE" <<'EOF' +{"note":"per-site","sites":{"bank":{"version":42},"exchange":{"version":42},"merchant":{"version":42}}} +EOF fi -version=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1])).get("version",42))' "$VER_FILE") -if [ -n "$set_ver" ]; then - version="$set_ver" -elif [ "$bump" = 1 ]; then - version=$((version + 1)) -fi - -# Prefer staged/index commit identity after commit; allow OVERRIDE_COMMIT if [ -n "${OVERRIDE_COMMIT:-}" ]; then full="$OVERRIDE_COMMIT" else @@ -62,34 +88,6 @@ iso=$(date +%Y-%m-%dT%H:%M:%S%z | sed -E 's/([+-][0-9]{2})([0-9]{2})$/\1:\2/') human=$(date +"%Y-%m-%d %H:%M %Z") url="${REPO_WEB}/commit/${full}" -python3 - "$VER_FILE" "$version" "$iso" "$human" "$full" "$short" "$url" <<'PY' -import json, sys -path, version, iso, human, full, short, url = sys.argv[1:] -data = { - "version": int(version), - "updated_iso": iso, - "updated_human": human, - "commit": full, - "commit_short": short, - "repo_commit_url": url, - "note": "Bump with scripts/taler-landing/stamp-landing-version.sh --bump after each landing content change.", -} -open(path, "w", encoding="utf-8").write(json.dumps(data, indent=2, ensure_ascii=False) + "\n") -print(f"version={version} commit={short} at={human}") -PY - -# HTML block injected into each footer (idempotent via markers) -block=$(cat < -

- Landing v${version} - · content - · ${short} -

- -EOF -) - css_snip=' .landing-rev { margin: 0.75rem 0 0; font-size: 0.72rem; @@ -101,27 +99,80 @@ css_snip=' .landing-rev { .landing-rev strong { font-weight: 750; } ' -for f in "${LANDINGS[@]}"; do - [ -f "$f" ] || { echo "missing $f" >&2; exit 1; } +for site in "${sites[@]}"; do + html="${SITE_HTML[$site]:-}" + label="${SITE_LABEL[$site]:-}" + relpath="${SITE_PATH[$site]:-}" + [ -n "$html" ] && [ -f "$html" ] || { echo "missing site/html: $site" >&2; exit 1; } + + # resolve version for this site + version=$(python3 - "$VER_FILE" "$site" "$bump" "$set_ver" <<'PY' +import json, sys +path, site, bump, set_ver = sys.argv[1:5] +data = json.load(open(path, encoding="utf-8")) +sites = data.setdefault("sites", {}) +entry = sites.setdefault(site, {"version": 42}) +v = int(entry.get("version", 42)) +if set_ver: + v = int(set_ver) +elif bump == "1": + v += 1 +print(v) +PY +) + + # update JSON entry for this site (preserve others) + python3 - "$VER_FILE" "$site" "$version" "$label" "$relpath" "$iso" "$human" "$full" "$short" "$url" <<'PY' +import json, sys +path, site, version, label, relpath, iso, human, full, short, url = sys.argv[1:] +data = json.load(open(path, encoding="utf-8")) +data["note"] = ( + "Per-site landing content versions (start 42). " + "Bump: scripts/taler-landing/stamp-landing-version.sh --bump bank|exchange|merchant" +) +sites = data.setdefault("sites", {}) +sites[site] = { + "version": int(version), + "label": label, + "path": relpath, + "updated_iso": iso, + "updated_human": human, + "commit": full, + "commit_short": short, + "repo_commit_url": url, +} +open(path, "w", encoding="utf-8").write(json.dumps(data, indent=2, ensure_ascii=False) + "\n") +print(f"{site}: v{version} commit={short} at={human}") +PY + + block=$(cat < +

+ ${label} v${version} + · content + · ${short} +

+ +EOF +) + # ensure CSS once - if ! grep -q '\.landing-rev' "$f"; then - # insert before of first style block - python3 - "$f" "$css_snip" <<'PY' + if ! grep -q '\.landing-rev' "$html"; then + python3 - "$html" "$css_snip" <<'PY' import sys path, snip = sys.argv[1], sys.argv[2] t = open(path, encoding="utf-8").read() if ".landing-rev" in t: - sys.exit(0) + raise SystemExit(0) idx = t.find("") if idx < 0: raise SystemExit(f"no in {path}") -t = t[:idx] + snip + "\n" + t[idx:] -open(path, "w", encoding="utf-8").write(t) +open(path, "w", encoding="utf-8").write(t[:idx] + snip + "\n" + t[idx:]) print(f"css → {path}") PY fi - # replace or insert rev block before - python3 - "$f" "$block" <<'PY' + + python3 - "$html" "$block" <<'PY' import sys, re path, block = sys.argv[1], sys.argv[2] t = open(path, encoding="utf-8").read() @@ -130,7 +181,6 @@ pat = re.compile(r"[ \t]*.*?\n?", re.S) if pat.search(t): t = pat.sub(block, t, count=1) else: - # before closing footer t2, n = re.subn(r"(\n)([ \t]*)", r"\1" + block + r"\2", t, count=1) if n != 1: raise SystemExit(f"could not insert landing-rev in {path}") @@ -140,4 +190,4 @@ print(f"stamp → {path}") PY done -echo "OK landing v${version} → ${short} (${human})" +echo "OK stamped: ${sites[*]}"