Automatyzuje kroki 2-3 z kb/runbooks/kb-site-deploy.md (generacja, kontrola wyciekow, upload przez helper alpine, smoke test) w jednym fail-closed skrypcie zamiast recznego klikania. Runbook zaktualizowany, zeby referencjonowal skrypt, z zachowaniem wyjasnien co/dlaczego dla kazdej bramki. Dodaje skill kb-publish, ktory przypomina operatorowi o publikacji po zmianach w kb/**/*.md, ale nigdy sam nie uruchamia skryptu (dotyka prod przez SSH). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
74 lines
2.4 KiB
Bash
Executable file
74 lines
2.4 KiB
Bash
Executable file
#!/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."
|