Prepare Renovate bot against Gitea (F-12) + doc sweep
renovate.json: gitea platform, autodiscover Micha/*, group rules (major separate, minor+patch+digest grouped, stateful tier-1 individual, komodo-major disabled), pin range strategy, no automerge, dependency dashboard enabled. ops/renovate/run-renovate.sh: one-shot docker run wrapper that reads the Gitea PAT from /mnt/user/appdata/secrets/renovate_token.txt, runs renovate/renovate:41, logs into /mnt/user/services/renovate/logs/. docs/RENOVATE.md: 5-step operator setup (Gitea service account, PAT, token file, first run, six-hourly user script). Explicit no-automerge stance with notfall-stop checklist. Cross-doc sweep: SECRETS_MAP entry for renovate_token.txt, REPO_MAP entry for RENOVATE.md, AUDIT_2026-05-25_TODO new Sprint 8 with F-15, F-07, F-09 rest, F-12 status, MIGRATION_LOG captures the four-block sprint in one entry. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -99,6 +99,15 @@ In diesem Audit-Zyklus werden diese Punkte **nicht** umgesetzt. Sie sind dokumen
|
||||
| erledigt | `infra/redis` Doku-Etikett korrigieren (F-16) | SERVICE_CATALOG, REPO_MAP, MASTER (Sektion 13) und DISASTER_RECOVERY Bootstrap-Stufe 2 auf "primaer Paperless-Redis" praezisiert; keine Compose-Aenderung |
|
||||
| erledigt | Paperless-DBPass DR-Restore-Reihenfolge in DR-Doc (F-20) | DISASTER_RECOVERY 6.2.1 (Restore-Quellen fuer Stack-ENV-Werte) ergaenzt; SECRETS_MAP um Abschnitt "Stack-ENV-only Secrets - Restore-Wege" mit Reihenfolge Komodo-Mongo-Dump -> Vaultwarden -> externe Notiz erweitert; Paperless, Immich, Mail-Archiver, Speedtest, Komodo, Hermes und Glance je mit Restore-Quelle dokumentiert |
|
||||
|
||||
## Sprint 8 - Reife der Stack-Hygiene (2026-05-29)
|
||||
|
||||
| Status | Aufgabe | Ergebnis |
|
||||
|---|---|---|
|
||||
| erledigt 2026-05-29 | Healthchecks fuer Tier-1 (F-15) | postgresql17 (`pg_isready`), Redis (`redis-cli ping` mit Auth), Vaultwarden (`curl /alive`), Gitea (`wget /api/healthz`), Traefik (`traefik healthcheck --ping`, `--ping=true` in CLI), Authelia (`wget /api/health`, weil v4.39 `helper health-check` entfernt hat); komodo-mongo war bereits gepinnt healthy. Live-Smoke: alle 6 healthy nach Recreate. Postgres- und Gitea-Stack-Workspace waren Komodo-seitig zurueckgeblieben (124 bzw. 52 commits behind); manuell per `cp` + `docker compose up -d` synchronisiert. |
|
||||
| erledigt 2026-05-29 | Monitoring-Stack Digest-Pinning (F-07) | 9 Container in `monitoring/docker-compose.yml` per Tag@sha256 gepinnt: prometheus, alertmanager, alertmanager-ntfy-bridge (python:3.13-alpine), blackbox-exporter, loki, promtail, grafana, node-exporter, cadvisor. Digests aus dem aktuell laufenden Container ausgelesen, damit der Pin den Live-Stand reflektiert. influxdb3-core war bereits gepinnt. |
|
||||
| erledigt 2026-05-29 | Komodo-Bootstrap-Trockenlauf-Skript (F-09 Rest) | `ops/restore-tests/komodo-bootstrap-{compose.test.yml,test.sh,plan.md,runbook.md}` analog zum Immich-Restore-Test angelegt. Test-Compose nutzt dieselben Image-Digests wie Produktion, isoliert unter Project `restoretest-komodo`, Test-Periphery ohne docker.sock-Mount, Test-Port nur `127.0.0.1:19120`. Wegwerf-Secrets im Compose. Erster Lauf manuell durch Operator. |
|
||||
| vorbereitet 2026-05-29 (Setup-Schritte Operator-Aufgabe) | Renovate-Bot gegen Gitea (F-12) | `renovate.json` im Repo-Root mit Group-Rules (Major getrennt, Minor/Patch/Digest gruppiert, Tier-1-Datenhalter einzeln, Komodo-Major deaktiviert). `ops/renovate/run-renovate.sh` als One-Shot-Wrapper. `docs/RENOVATE.md` mit Setup-Anleitung: Gitea-Service-Account `renovate` anlegen, PAT erzeugen, in `/mnt/user/appdata/secrets/renovate_token.txt` ablegen, User-Script `renovate-six-hourly` (`20 */6 * * *`) aktivieren. Kein Auto-Merge, jede PR braucht Operator-Sichtpruefung. |
|
||||
|
||||
## Sprint 7 - Off-site und 3-2-1 (offen)
|
||||
|
||||
| Status | Aufgabe | Bemerkung |
|
||||
|
||||
@@ -17,6 +17,39 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab
|
||||
|
||||
## Historische Meilensteine
|
||||
|
||||
### 2026-05-29 - Stack-Hygiene Sprint: Healthchecks, Monitoring-Digests, Komodo-Bootstrap-Skript, Renovate-Vorbereitung
|
||||
|
||||
Vier Audit-Punkte am Stueck abgearbeitet. Pro Block: Live-Verifikation am Host, Doku im Repo.
|
||||
|
||||
**F-15 Tier-1 Healthchecks**
|
||||
|
||||
- 6 Tier-1-Stacks bekommen Healthchecks: postgresql17 (`pg_isready`), Redis (`redis-cli ping` mit Auth aus dem mount), Vaultwarden (`curl /alive`), Gitea (`wget /api/healthz`), Traefik (`traefik healthcheck --ping`, vorher `--ping=true` in CLI aktiviert), Authelia (`wget /api/health` - Authelia v4.39 hat `helper health-check` entfernt, daher direkter Endpoint).
|
||||
- Erste Iteration in Vaultwarden + Authelia schlug fehl: Vaultwarden hat kein `wget`, Authelia kennt das `helper`-Subcommand nicht mehr. Probe per `docker exec` zeigte: Vaultwarden hat `curl`, Authelia hat `wget`. Compose entsprechend nachgezogen, zweiter Lauf gruen.
|
||||
- Komodo-Stack-Workspaces fuer `postgresql17` (124 commits behind) und `gitea` (52 commits behind) wurden Komodo-seitig nicht automatisch gepullt. Manuell ueber `git pull --ff-only` plus `cp` der aktuellen Compose-Datei aus dem Host-Repo-Clone in den Stack-Workspace synchronisiert, dann `docker compose up -d`. Gitea-Workspace hatte zusaetzlich untracked Doku-Files; nur die im aktuellen Master tracked-en Files entfernt, nicht via `git clean -fd`. Workspace-Drift selbst ist nicht heute Auftrag, aber als Folge-Befund notiert.
|
||||
- Endstand Live: alle 6 Healthchecks `healthy`.
|
||||
|
||||
**F-07 Monitoring-Stack Digest-Pinning**
|
||||
|
||||
- 9 Container in `monitoring/docker-compose.yml` per Tag@sha256 gepinnt (prometheus, alertmanager, alertmanager-ntfy-bridge, blackbox-exporter, loki, promtail, grafana, node-exporter, cadvisor; plus zweiter python:3.13-alpine im Bootstrap-Dashboard-Importer). InfluxDB war bereits gepinnt.
|
||||
- Digests aus den laufenden Containern per `docker inspect ... .Config.Image` + `docker image inspect ... .RepoDigests` ausgelesen, damit die Pins exakt dem Live-Stand entsprechen.
|
||||
- Kein Recreate ausgeloest, weil die Images identisch sind; nur die Compose-Datei ist jetzt reproduzierbar wie die Tier-1-Stateful-Stacks.
|
||||
|
||||
**F-09 Rest - Komodo-Bootstrap-Trockenlauf-Skript**
|
||||
|
||||
- `ops/restore-tests/komodo-bootstrap-{compose.test.yml,test.sh,plan.md,runbook.md}` analog zum Immich-Restore-Test-Muster angelegt.
|
||||
- Test-Compose nutzt dieselben Image-Digests wie Produktion (mongo:7.0.32, komodo-core:2, komodo-periphery:2), isoliert unter Compose-Project `restoretest-komodo`, Test-Port nur `127.0.0.1:19120`, **Test-Periphery ohne docker.sock-Mount und ohne `/mnt/user/services`-Mount** - kann produktive Container nicht managen.
|
||||
- Wegwerf-Secrets sind im Compose hardcodiert, produktive `KOMODO_*`-Werte werden nicht beruehrt.
|
||||
- Smoke-Test-Kriterien: docker compose config valid, Mongo healthy, Mongo Auth-Ping ok, Core HTTP 200/302/303/401, Periphery container `running`.
|
||||
- Erster Lauf bleibt manueller Operator-Schritt.
|
||||
|
||||
**F-12 Renovate-Bot (vorbereitet)**
|
||||
|
||||
- `renovate.json` im Repo-Root mit Homelab-tauglichen Group-Rules: Major-Updates getrennt, Minor/Patch/Digest fuer Docker-Compose und Dockerfile gruppiert, Tier-1-Datenhalter (Postgres, Mongo, Redis, pgvecto-rs) einzeln ohne Group, Komodo-Major-Updates explizit deaktiviert.
|
||||
- `ops/renovate/run-renovate.sh` als One-Shot-Container-Wrapper: liest Gitea-PAT aus Host-Secret-Datei, startet `renovate/renovate:41` einmalig, schreibt Log unter `/mnt/user/services/renovate/logs/`.
|
||||
- `docs/RENOVATE.md` mit kompletter Operator-Setup-Anleitung (5 Schritte): Gitea-Service-Account `renovate`, Access-Token, Token-Datei, Erstlauf, User-Script `renovate-six-hourly` (`20 */6 * * *`).
|
||||
- Bewusst KEIN Auto-Merge: jede PR braucht Operator-Sichtpruefung.
|
||||
- Setup-Schritte (Gitea-User, PAT, Token-Datei, User-Script-Aktivierung) bleiben Operator-Aufgabe; Repo-seitig alles vorbereitet.
|
||||
|
||||
### 2026-05-29 - Borg-Source `/local/appdata/homepage` verspaetet entfernt + Removal-Checkliste in WORKFLOW
|
||||
|
||||
- Befund aus den ersten Tagen scharfer Alert-Pipeline: `HomelabBorgLastJobCompletedWithWarnings` firing fuer die letzten vier Borg-Laeufe (26.05.-29.05.), jeweils Exit-Code 107.
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
# Renovate Bot - Self-hosted gegen Gitea
|
||||
|
||||
Status: **vorbereitet 2026-05-29**; PAT-Setup und Cron-Aktivierung sind Operator-Schritte.
|
||||
Audit-Bezug: `docs/AUDIT_2026-05-25.md` Finding **F-12**.
|
||||
|
||||
## Zweck
|
||||
|
||||
Wir pinnen Image-Versionen und Digests konsequent (siehe `HOMELAB_ARCHITECTURE_MASTER_V2.md` Sektion 13, "Reproduzierbare Deployments"). Das macht das Setup stabil, aber jede Image-Aktualisierung musste bisher manuell laufen. Renovate uebernimmt das in Zukunft: scant das Repo periodisch, oeffnet Pull-Requests in Gitea fuer Image-/Digest-Updates, gruppiert sinnvoll, laesst Operator entscheiden.
|
||||
|
||||
Bewusst kein Auto-Merge: jede PR braucht eine Operator-Sichtpruefung und einen Merge-Click. Komodo deployt danach automatisch ueber den Standard-Webhook-Pfad.
|
||||
|
||||
## Architektur
|
||||
|
||||
- **Image:** `renovate/renovate:41` (versioniert, kein latest)
|
||||
- **Lauf:** ein-shot pro Cron-Tick, danach beendet sich der Container; persistente State liegt in `/mnt/user/services/renovate/state/`
|
||||
- **Schedule:** alle 6 Stunden (User-Script `renovate-six-hourly`)
|
||||
- **Plattform:** Gitea via `https://git.kaleschke.info/api/v1`
|
||||
- **Authentifizierung:** Gitea-PAT als Host-Secret-Datei
|
||||
- **Konfiguration:** `renovate.json` im Repo-Root
|
||||
|
||||
## Operator-Setup (einmalig, ~10 Minuten)
|
||||
|
||||
### Schritt 1 - Service-Account in Gitea
|
||||
|
||||
1. Als Admin in Gitea einloggen.
|
||||
2. Neuen User anlegen:
|
||||
- Username: `renovate`
|
||||
- E-Mail: ein gueltiges Postfach (Renovate sendet keine Mails, aber Gitea braucht eine Adresse)
|
||||
- Passwort: zufaellig, in Vaultwarden speichern
|
||||
3. Diesem User Schreibrechte fuer die Repos geben, die Renovate scannen soll. Einfachster Weg: dem User direkt Maintainer-Recht in jedem Repo unter `Micha/` geben (Settings -> Collaborators -> Add Collaborator -> `renovate` -> Permission `Write`).
|
||||
|
||||
### Schritt 2 - Access-Token erzeugen
|
||||
|
||||
1. Als `renovate`-User in Gitea einloggen.
|
||||
2. Profile -> Settings -> Applications -> Generate New Token.
|
||||
3. Token-Name: `renovate-bot`.
|
||||
4. Scopes:
|
||||
- `read:user`
|
||||
- `write:repository`
|
||||
- `write:issue` (Renovate setzt Labels und kann den Dependency Dashboard erstellen)
|
||||
5. Token kopieren (wird nur einmal angezeigt).
|
||||
|
||||
### Schritt 3 - Token als Host-Secret ablegen
|
||||
|
||||
Am Unraid-Host:
|
||||
|
||||
```bash
|
||||
TOKEN='hier-das-token-einfuegen'
|
||||
echo -n "$TOKEN" > /mnt/user/appdata/secrets/renovate_token.txt
|
||||
chmod 600 /mnt/user/appdata/secrets/renovate_token.txt
|
||||
chown root:root /mnt/user/appdata/secrets/renovate_token.txt
|
||||
```
|
||||
|
||||
Token-Wert nicht in dieses Repo, nicht in Logs, nicht in Issues.
|
||||
|
||||
### Schritt 4 - Erstlauf manuell
|
||||
|
||||
```bash
|
||||
bash /mnt/user/services/homelab-infra/ops/renovate/run-renovate.sh
|
||||
```
|
||||
|
||||
Erwartete Ausgabe: Renovate verbindet sich mit Gitea, scant Repos unter `Micha/*` und entweder
|
||||
|
||||
- erstellt Pull-Requests, falls Updates verfuegbar sind, **oder**
|
||||
- erstellt nur die "Renovate Dependency Dashboard"-Issue im Repo (Onboarding-PR ist via `onboarding: false` deaktiviert)
|
||||
|
||||
Log liegt unter `/mnt/user/services/renovate/logs/renovate-<timestamp>.log` und symlinkt auf `latest.log`.
|
||||
|
||||
### Schritt 5 - User-Script aktivieren
|
||||
|
||||
Unraid User Scripts:
|
||||
|
||||
```
|
||||
Name: renovate-six-hourly
|
||||
Description: Run Renovate against Gitea every 6 hours.
|
||||
Schedule: 20 */6 * * *
|
||||
Script: bash /mnt/user/services/homelab-infra/ops/renovate/run-renovate.sh
|
||||
```
|
||||
|
||||
20 Minuten nach jeder vollen Stunde, damit es nicht mit `gitea-bundle-mirror-6h` (Minute 10) kollidiert.
|
||||
|
||||
## Was Renovate macht und was nicht
|
||||
|
||||
| Verhalten | Renovate-Konfig | Wirkung |
|
||||
|---|---|---|
|
||||
| Major-Updates | `groupName: major-updates`, `automerge: false` | Eine gesammelte PR pro Lauf mit allen Major-Updates, manueller Merge |
|
||||
| Minor + Patch + Digest fuer Docker-Compose | `groupName: minor-and-patch-updates`, `automerge: false` | Eine gesammelte PR; Operator merged manuell |
|
||||
| Tier-1-Datenhalter (Postgres, Mongo, Redis, pgvecto-rs) | `groupName: null`, eigener Label | Einzelne PRs ohne Group, hoehere Sichtbarkeit |
|
||||
| Komodo-Major-Updates | `enabled: false` fuer matchPackageNames + matchUpdateTypes major | Komodo bleibt auf `:2`, wird nicht versehentlich auf `:3` migriert |
|
||||
| Lock-File-Maintenance | `lockFileMaintenance.enabled: false` | Renovate macht keine reinen Lock-File-Refreshs |
|
||||
| Schedule | `extends ["schedule:weekly"]` | Renovate-Engine prueft, aber PRs/Updates folgen Wochen-Profilen wo sinnvoll |
|
||||
| Dependency Dashboard | aktiv | Gitea-Issue, die alle ausstehenden Updates auflistet |
|
||||
| Onboarding-PR | `onboarding: false` | Keine `Configure Renovate`-Onboarding-PR; wir nutzen die Repo-`renovate.json` direkt |
|
||||
| Ignore-Pfade | `_archive`, `ops/grafana-influxdb`, `ops/loki` | Renovate scant alte/abgeloeste Stacks nicht |
|
||||
|
||||
## Erwartete erste PRs
|
||||
|
||||
Beim Erstlauf wird Renovate vermutlich PRs fuer einige der digest-gepinnten Images oeffnen, weil diese Digests seit Wochen nicht erneuert wurden. Reihenfolge der Sichtpruefung:
|
||||
|
||||
1. **Stateful Tier-1 zuerst, einzeln**: Postgres, Redis, Mongo, pgvecto-rs - jeder eigener PR, einzeln pruefen und mergen. Smoke-Test nach Merge ueber Komodo-Webhook-Deploy beobachten.
|
||||
2. **Gruppe minor-and-patch-updates**: Alle anderen Docker-Compose-Images zusammen. Wenn der Diff vernuenftig aussieht, mergen.
|
||||
3. **Gruppe major-updates**: Erst nach Operator-Sichtpruefung pro Image, ggf. zurueckstellen oder manuell entscheiden.
|
||||
|
||||
## Notfall-Stop
|
||||
|
||||
Wenn Renovate aus irgendeinem Grund zu aggressiv wird oder ungewollte PRs oeffnet:
|
||||
|
||||
```bash
|
||||
# 1. User-Script disablen
|
||||
# Unraid UI: User Scripts -> renovate-six-hourly -> Schedule -> Disabled
|
||||
|
||||
# 2. Im Worst Case: Token sofort widerrufen
|
||||
# Gitea -> Login als renovate -> Settings -> Applications -> Token loeschen
|
||||
|
||||
# 3. Offene PRs schliessen ohne mergen
|
||||
```
|
||||
|
||||
## Was bewusst NICHT enthalten ist
|
||||
|
||||
- **Auto-Merge**: keine PR wird ohne Operator-Click ausgerollt. Auto-Merge waere bei einem GitOps-Setup mit live-Webhooks ein zu grosses Risiko.
|
||||
- **Renovate-UI**: kein Mend.io-Cloud-Account, kein zusaetzlicher Service; lokal genutzte CLI im Docker-Container.
|
||||
- **Slack/E-Mail-Benachrichtigungen**: Renovate signalisiert ueber Gitea-PRs und das Dependency Dashboard.
|
||||
- **Self-hosted Renovate-Runner-Cluster**: ein einzelner User-Script-Lauf reicht fuer den Homelab-Scope.
|
||||
|
||||
## Verwandte Doku
|
||||
|
||||
- `HOMELAB_ARCHITECTURE_MASTER_V2.md` Sektion 13 ("Reproduzierbare Deployments", Digest-Pinning)
|
||||
- `docs/WORKFLOW.md` Image-Versionierungs-Regel
|
||||
- `docs/SECRETS_MAP.md` (Renovate-Token wird dort nach Aktivierung ergaenzt)
|
||||
@@ -41,6 +41,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam
|
||||
| `docs/FAMILY_VIEW_DASHBOARD.md` | Spezifikation fuer das Grafana Family-View-Dashboard (Doku-only, kein JSON) |
|
||||
| `docs/RESTORE_DRILL_ROUTINE.md` | Quartalsweise Restore-Drill-Routine, Tier-Belegung, DR-Sanity-Check |
|
||||
| `docs/IMMICH_RESTORE_TEST.md` | Operator-Overview Immich-Restore-Test, Erstlauf 2026-05-27 erfolgreich |
|
||||
| `docs/RENOVATE.md` | Self-hosted Renovate gegen Gitea (Setup + Wartung) |
|
||||
| `docs/FRITZBOX_PORT_CORRECTION_PLAN.md` | Vorbereitungs-Doku fuer FRITZ!Box-Portfreigaben-Korrektur (kein Router-Eingriff) |
|
||||
| `docs/OFFSITE_BACKUP_OPTIONS.md` | Entscheidungsvorlage zweites Offsite-Backup-Ziel (rsync.net vs. BorgBase EU2 vs. Cold-Platte) |
|
||||
| `docs/AUDIT_2026-05-25_TODO.md` | Operative Arbeitsliste aus dem Audit vom 2026-05-25; Authelia-2FA bewusst geparkt |
|
||||
|
||||
@@ -52,6 +52,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb
|
||||
| Monitoring Grafana | Admin Password | `/mnt/user/appdata/secrets/monitoring_grafana_admin_password.txt` -> Docker Secret `/run/secrets/monitoring_grafana_admin_password` -> `GF_SECURITY_ADMIN_PASSWORD__FILE` | aktiv |
|
||||
| Monitoring Grafana -> InfluxDB | Datasource Token | `/mnt/user/appdata/secrets/monitoring_grafana_influxdb_token.txt` -> Docker Secret `/run/secrets/monitoring_grafana_influxdb_token` | aktiv |
|
||||
| Home Assistant -> InfluxDB | HA InfluxDB Token | `/homeassistant/secrets.yaml` -> `influxdb3_homeassistant_token` | geplant |
|
||||
| Renovate Bot | Gitea Service-Account PAT | `/mnt/user/appdata/secrets/renovate_token.txt` -> Host-Datei (chmod 600), gelesen von `ops/renovate/run-renovate.sh` und an Renovate-Container als `RENOVATE_TOKEN` weitergegeben | aktiv nach Operator-Setup (siehe `docs/RENOVATE.md`) |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Self-hosted Renovate runner fuer Gitea.
|
||||
#
|
||||
# Wird vom Host-User-Script `renovate-six-hourly` aufgerufen. Liest das
|
||||
# Gitea-PAT aus einer Host-Secret-Datei, startet den Renovate-Container
|
||||
# ein einziges Mal, schreibt ein Log, beendet sich.
|
||||
#
|
||||
# Operator-Setup-Aufgaben (einmalig):
|
||||
# 1. Gitea-User `renovate` anlegen (Service-Account), 2FA nicht zwingend
|
||||
# 2. Diesem User Repo-Schreibrechte auf `Micha/*` geben
|
||||
# 3. Im Gitea-Profil des renovate-Users ein Access-Token erzeugen:
|
||||
# Scope: `write:repository` + `read:user`
|
||||
# 4. Token in `/mnt/user/appdata/secrets/renovate_token.txt` ablegen (chmod 600)
|
||||
# 5. Erstlauf: `bash /mnt/user/services/homelab-infra/ops/renovate/run-renovate.sh`
|
||||
# 6. User-Script `renovate-six-hourly` aktivieren
|
||||
|
||||
RENOVATE_IMAGE="${RENOVATE_IMAGE:-renovate/renovate:41}"
|
||||
RENOVATE_TOKEN_FILE="${RENOVATE_TOKEN_FILE:-/mnt/user/appdata/secrets/renovate_token.txt}"
|
||||
RENOVATE_LOG_DIR="${RENOVATE_LOG_DIR:-/mnt/user/services/renovate/logs}"
|
||||
RENOVATE_STATE_DIR="${RENOVATE_STATE_DIR:-/mnt/user/services/renovate/state}"
|
||||
RENOVATE_CONFIG_FILE="${RENOVATE_CONFIG_FILE:-/mnt/user/services/homelab-infra/renovate.json}"
|
||||
|
||||
if [ ! -r "$RENOVATE_TOKEN_FILE" ]; then
|
||||
echo "Renovate token file missing or unreadable: $RENOVATE_TOKEN_FILE" >&2
|
||||
echo "See ops/renovate/run-renovate.sh header for operator setup steps." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -r "$RENOVATE_CONFIG_FILE" ]; then
|
||||
echo "Renovate config missing: $RENOVATE_CONFIG_FILE" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mkdir -p "$RENOVATE_LOG_DIR" "$RENOVATE_STATE_DIR"
|
||||
|
||||
TS="$(date -u '+%Y-%m-%dT%H-%M-%SZ')"
|
||||
LOG_FILE="$RENOVATE_LOG_DIR/renovate-$TS.log"
|
||||
LATEST_SYMLINK="$RENOVATE_LOG_DIR/latest.log"
|
||||
|
||||
# Renovate liest die Konfiguration ueber RENOVATE_CONFIG_FILE als Pfad im
|
||||
# Container; wir mounten die Repo-Datei read-only nach /usr/src/app/config.json.
|
||||
{
|
||||
echo "[renovate] starting $TS"
|
||||
echo "[renovate] image: $RENOVATE_IMAGE"
|
||||
echo "[renovate] config: $RENOVATE_CONFIG_FILE"
|
||||
echo "[renovate] log: $LOG_FILE"
|
||||
echo
|
||||
|
||||
docker run --rm \
|
||||
--name renovate-run \
|
||||
-v "$RENOVATE_CONFIG_FILE":/usr/src/app/config.json:ro \
|
||||
-v "$RENOVATE_STATE_DIR":/tmp/renovate \
|
||||
-e RENOVATE_CONFIG_FILE=/usr/src/app/config.json \
|
||||
-e RENOVATE_PLATFORM=gitea \
|
||||
-e RENOVATE_ENDPOINT=https://git.kaleschke.info/api/v1 \
|
||||
-e RENOVATE_TOKEN="$(cat "$RENOVATE_TOKEN_FILE")" \
|
||||
-e LOG_LEVEL="${RENOVATE_LOG_LEVEL:-info}" \
|
||||
"$RENOVATE_IMAGE" 2>&1
|
||||
|
||||
rc=$?
|
||||
echo
|
||||
echo "[renovate] finished rc=$rc"
|
||||
exit $rc
|
||||
} | tee "$LOG_FILE"
|
||||
|
||||
ln -sfn "$LOG_FILE" "$LATEST_SYMLINK"
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
"extends": [
|
||||
"config:recommended",
|
||||
":dependencyDashboard",
|
||||
":semanticCommits",
|
||||
"schedule:weekly"
|
||||
],
|
||||
"platform": "gitea",
|
||||
"endpoint": "https://git.kaleschke.info/api/v1",
|
||||
"username": "renovate",
|
||||
"gitAuthor": "Renovate Bot <renovate@kaleschke.info>",
|
||||
"onboarding": false,
|
||||
"requireConfig": "optional",
|
||||
"autodiscover": true,
|
||||
"autodiscoverFilter": ["Micha/*"],
|
||||
"dependencyDashboardTitle": "Renovate Dependency Dashboard",
|
||||
"prHourlyLimit": 0,
|
||||
"prConcurrentLimit": 5,
|
||||
"branchConcurrentLimit": 10,
|
||||
"labels": ["dependencies"],
|
||||
"rangeStrategy": "pin",
|
||||
"lockFileMaintenance": {
|
||||
"enabled": false
|
||||
},
|
||||
"docker-compose": {
|
||||
"fileMatch": [
|
||||
"(^|/)docker-compose([^/]*)\\.ya?ml$",
|
||||
"(^|/)compose([^/]*)\\.ya?ml$"
|
||||
]
|
||||
},
|
||||
"dockerfile": {
|
||||
"enabled": true
|
||||
},
|
||||
"packageRules": [
|
||||
{
|
||||
"description": "Major-Updates getrennt sammeln, manuell mergen",
|
||||
"matchUpdateTypes": ["major"],
|
||||
"groupName": "major-updates",
|
||||
"groupSlug": "major-updates",
|
||||
"automerge": false,
|
||||
"labels": ["dependencies", "major"]
|
||||
},
|
||||
{
|
||||
"description": "Patch- und Minor-Digest-Updates fuer stabile Images zusammenfassen",
|
||||
"matchUpdateTypes": ["minor", "patch", "digest"],
|
||||
"matchManagers": ["docker-compose", "dockerfile"],
|
||||
"groupName": "minor-and-patch-updates",
|
||||
"groupSlug": "minor-patch-updates",
|
||||
"automerge": false,
|
||||
"labels": ["dependencies", "minor-patch"]
|
||||
},
|
||||
{
|
||||
"description": "Stateful Tier-1 (Postgres, Mongo, Redis): keine Auto-Group, einzelne PRs, kein Auto-Merge",
|
||||
"matchPackageNames": [
|
||||
"postgres",
|
||||
"mongo",
|
||||
"redis",
|
||||
"tensorchord/pgvecto-rs"
|
||||
],
|
||||
"groupName": null,
|
||||
"automerge": false,
|
||||
"labels": ["dependencies", "stateful-tier1"]
|
||||
},
|
||||
{
|
||||
"description": "Komodo Major-Tag (release :2 mit Digest-Pin) wird nicht von Renovate auf :3 hochgesetzt",
|
||||
"matchPackageNames": [
|
||||
"ghcr.io/moghtech/komodo-core",
|
||||
"ghcr.io/moghtech/komodo-periphery"
|
||||
],
|
||||
"matchUpdateTypes": ["major"],
|
||||
"enabled": false
|
||||
}
|
||||
],
|
||||
"ignorePaths": [
|
||||
"**/_archive/**",
|
||||
"ops/grafana-influxdb/**",
|
||||
"ops/loki/**"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user