diff --git a/CLAUDE.md b/CLAUDE.md index 8648265..e82b0ff 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,7 +18,7 @@ DNS/DHCP-Ablösung, WLAN via **CAPsMAN auf dem Core** (TP28, 2026-08-17), Firewa **Prosa/Detail = Repo** (`docs/teilprojekte.md` aktiv + `teilprojekte-archiv.md`, `### TPnn`-Abschnitte) · **Live-Gerätedaten = Nautobot** (Compliance-Zahl, RouterOS-Version …). Ein Status ändert sich **in Gitea**, nicht mehr in einer Repo-Datei. Archiv-Backfill-Werkzeug `bin/gitea-tp-sync.py` (Dry-Run default, - Token aus `~/.hermes/.env`, **nie ausgeben**). + Token aus `~/.secrets/credentials.env` (Fallback `~/.hermes/.env`), **nie ausgeben**). - 🔴 **Die TP-Header in beiden Dateien tragen KEINEN Status mehr** (seit 2026-10-03). Form: `### TP25 · Gitea #17 — — `. Der `· Gitea #N`-Zeiger ist die Brücke zum Issue. Wer einen Status sucht, liest das **Label im Board** — nicht den Datei-Kopf. Der alte `▸ ✅ FERTIG …`-Anspruch diff --git a/bin/gitea-tp-sync.py b/bin/gitea-tp-sync.py index 99de9ee..8bdcc85 100644 --- a/bin/gitea-tp-sync.py +++ b/bin/gitea-tp-sync.py @@ -18,7 +18,8 @@ Abgrenzung: - Status/Thema/State bestehender Issues: aendert nur der Mensch im Board. - Per-TP-Prosa: bleibt in docs/teilprojekte.md / teilprojekte-archiv.md. -Token: ~/.hermes/.env (GITEA_ACCESS_TOKEN, GITEA_HOST) — wird NIE ausgegeben. +Token: ~/.secrets/credentials.env (Fallback ~/.hermes/.env) — GITEA_ACCESS_TOKEN/GITEA_HOST, +wird NIE ausgegeben. Aufruf: python3 bin/gitea-tp-sync.py # Dry-Run (default) — zeigt, was fehlt @@ -36,6 +37,7 @@ REPO = Path(__file__).resolve().parent.parent ACTIVE = REPO / "docs" / "teilprojekte.md" ARCHIV = REPO / "docs" / "teilprojekte-archiv.md" HERMES = Path.home() / ".hermes" / ".env" +SECRETS = Path.home() / ".secrets" / "credentials.env" OWNER_REPO = "admin/bf-infra" COMMIT = "--commit" in sys.argv @@ -65,17 +67,26 @@ THEME = { def hermes_env(): + """Token/Host suchen: zuerst ~/.secrets/credentials.env, dann ~/.hermes/.env. + + Seit 2026-10-28 liegt der Token im Secrets-Store; das alte .env ist Fallback. + """ tok = host = None - for line in HERMES.read_text().splitlines(): - m = re.match(r"\s*(GITEA_ACCESS_TOKEN|GITEA_HOST)\s*=\s*(.+?)\s*$", line) - if not m: + for path in (SECRETS, HERMES): + if not path.exists(): continue - if m.group(1) == "GITEA_ACCESS_TOKEN": - tok = m.group(2).strip().strip('"').strip("'") - else: - host = m.group(2).strip().strip('"').strip("'") + for line in path.read_text(errors="ignore").splitlines(): + m = re.match(r"\s*(?:export\s+)?(GITEA_ACCESS_TOKEN|GITEA_HOST)\s*=\s*(.+?)\s*$", line) + if not m: + continue + if m.group(1) == "GITEA_ACCESS_TOKEN": + tok = m.group(2).strip().strip('"').strip("'") + else: + host = m.group(2).strip().strip('"').strip("'") + if tok: + break if not tok: - sys.exit("GITEA_ACCESS_TOKEN nicht in %s gefunden." % HERMES) + sys.exit("GITEA_ACCESS_TOKEN weder in %s noch in %s gefunden." % (SECRETS, HERMES)) host = (host or "https://gitea.emsenhuber.net").rstrip("/") if not host.startswith("http"): host = "https://" + host