#!/usr/bin/env bash # scripts/kb/publish.sh — publikacja kb-site (kroki 2-4 z kb/runbooks/kb-site-deploy.md) # # Uruchamiane z węzła generującego (SATURN/SOLARIA), nie z PIHA. # Kolejność bramek: token -> generacja -> --check -> sanity linków -> upload -> smoke test. # Każda bramka zatrzymuje publikację przy porażce — patrz runbook, sekcja 2-3. # # Usage: scripts/kb/publish.sh set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" PIHA_HOST="${PIHA_HOST:-piha.local}" BASE_URL="https://kb-e2a24af3.okit.pl" TOKEN_FILE="/opt/homelab/config/kb-site/.env" BUILD_DIR="$REPO_ROOT/build/kb-site" TARBALL="/tmp/kb-site.tgz" log() { echo "[kb-publish] $*" } fail() { echo "[kb-publish] BLAD: $*" >&2 exit 1 } log "krok 1/6: wczytanie ACCESS_TOKEN z $TOKEN_FILE" [[ -f "$TOKEN_FILE" ]] || fail "brak pliku $TOKEN_FILE — patrz kb/runbooks/kb-site-deploy.md sekcja 0" set -a # shellcheck disable=SC1090 . "$TOKEN_FILE" set +a [[ -n "${ACCESS_TOKEN:-}" ]] || fail "ACCESS_TOKEN pusty w $TOKEN_FILE — nie publikuje bez tokenu" log "krok 2/6: generacja treści (gen_pages.py --base-url $BASE_URL)" cd "$REPO_ROOT" python3 scripts/kb/gen_pages.py --base-url "$BASE_URL" log "krok 3/6: kontrola wyciekow (gen_pages.py --check)" if ! python3 scripts/kb/gen_pages.py --check; then fail "--check wykryl wyciek — publikacja WSTRZYMANA, popraw zrodlo i uruchom ponownie" fi log "krok 4/6: sanity check — token w linkach index.html" KEY_COUNT=$(grep -c 'key=' "$BUILD_DIR/index.html" || true) [[ "$KEY_COUNT" -gt 0 ]] || fail "0 wystapien 'key=' w $BUILD_DIR/index.html — token nie trafil do linkow" log " -> $KEY_COUNT linkow z tokenem" log "krok 5/6: pakowanie i wgranie na $PIHA_HOST" tar -czf "$TARBALL" -C "$BUILD_DIR" . log " -> scp $TARBALL do $PIHA_HOST:/tmp/kb-site.tgz" scp "$TARBALL" "$PIHA_HOST:/tmp/kb-site.tgz" log " -> helper alpine: podmiana wolumenu kb-site_kb-site_content" ssh "$PIHA_HOST" 'docker run --rm \ -v kb-site_kb-site_content:/content \ -v /tmp:/src:ro \ alpine sh -c "rm -rf /content/* /content/.[!.]* 2>/dev/null; \ tar -xzf /src/kb-site.tgz -C /content"' log " -> sprzatanie /tmp (lokalnie i na $PIHA_HOST)" rm -f "$TARBALL" ssh "$PIHA_HOST" 'rm -f /tmp/kb-site.tgz' log "krok 6/6: smoke test na $PIHA_HOST:8250" SMOKE_OUTPUT=$(ssh "$PIHA_HOST" 'curl -s localhost:8250' | head -c 300) log " -> odpowiedz (pierwsze 300 znakow):" echo "$SMOKE_OUTPUT" log "publikacja zakonczona."