chore: Renovate zentral in ci-templates

Abhaengigkeits-Updates laufen an einer Stelle statt in jedem Repo einzeln.
Der woechentliche Lauf liest die Repository-Liste im Workflow und legt die
PRs jeweils dort an.

- renovate-basis.json: Minor und Patch gebuendelt in einen PR pro Woche,
  Major nur nach Freigabe ueber das Dashboard, Sicherheits-Updates am
  Zeitplan vorbei.
- renovate.yml: montags 04:00 UTC, dazu workflow_dispatch mit dry-run.
  Node 24, weil Renovate 44 das verlangt.

Braucht das Repo-Secret RENOVATE_TOKEN (Gitea-Token mit Schreibrecht auf
die gelisteten Repositories).
This commit is contained in:
rhentschel
2026-09-05 15:14:38 +02:00
parent 61ee909eb0
commit 47966ddb13
3 changed files with 99 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
# Renovate fuer die Node-Projekte. Laeuft an einer Stelle statt in jedem Repo einzeln:
# der Lauf liest die Repository-Liste unten und legt die PRs jeweils dort an.
#
# Voraussetzung: Repo-Secret RENOVATE_TOKEN — ein Gitea-Zugriffstoken mit Schreibrecht
# auf die gelisteten Repositories (Bereiche: repository, issue, pull request). Ohne das
# Token kann Renovate keine Branches schieben und bricht mit 401 ab.
#
# Ein Projekt nimmt teil, sobald es eine renovate.json mit
# { "extends": ["local>roland/ci-templates:renovate-basis"] }
# hat UND hier in RENOVATE_REPOSITORIES steht.
name: renovate
on:
schedule:
- cron: "0 4 * * 1" # montags 04:00 UTC
workflow_dispatch:
inputs:
dry-run:
description: "Nur anzeigen, was Renovate taete (keine PRs)"
type: boolean
default: false
jobs:
renovate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
with:
node-version: 24 # Renovate 44 verlangt Node 24
- name: Renovate laufen lassen
env:
RENOVATE_PLATFORM: gitea
RENOVATE_ENDPOINT: https://git.rolandhentschel.de/api/v1
RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }}
RENOVATE_REPOSITORIES: roland/rako-hausverwaltung,roland/clickfortravel-tms
RENOVATE_GIT_AUTHOR: "Renovate <renovate@rolandhentschel.de>"
# Ohne "onboarding" legt Renovate keine Konfigurations-PRs an: teilnehmen soll nur,
# wer selbst eine renovate.json hat.
RENOVATE_ONBOARDING: "false"
RENOVATE_REQUIRE_CONFIG: "required"
RENOVATE_DRY_RUN: ${{ inputs.dry-run && 'full' || '' }}
LOG_LEVEL: info
run: npx --yes renovate@44
+6
View File
@@ -5,5 +5,11 @@ die Prüfschritte (Check, Audit, gitleaks, Kuma-Meldung) leben hier an einer Ste
- `node-check.yml`: Node/npm-Projekte. Eingaben `check-command` (Default `npm run check`) und
`node-version` (Default 22), Secret `KUMA_PUSH_TOKEN` (pro Repo, Kuma-Monitor "CI <repo>").
- `renovate.yml`: Abhaengigkeits-Updates, montags 04:00 UTC, laeuft nur hier und legt die PRs
in den unter `RENOVATE_REPOSITORIES` gelisteten Repositories an. Braucht das Secret
`RENOVATE_TOKEN` (Gitea-Token mit Schreibrecht). Ein Projekt nimmt teil, wenn es eine
`renovate.json` mit `{"extends": ["local>roland/ci-templates:renovate-basis"]}` hat.
- `renovate-basis.json`: die gemeinsamen Renovate-Regeln. Minor und Patch gebuendelt in einen
woechentlichen PR, Major nur nach Freigabe ueber das Dashboard, Sicherheits-Updates sofort.
Aufruf siehe Kopf der jeweiligen Datei. Actions sind auf Commit-SHAs gepinnt.
+46
View File
@@ -0,0 +1,46 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"description": "Gemeinsame Renovate-Grundlage fuer die Node-Projekte. Ein Repo bindet sie mit extends: [\"local>roland/ci-templates:renovate-basis\"] ein.",
"extends": ["config:recommended", ":semanticCommitTypeAll(chore)"],
"timezone": "Europe/Berlin",
"schedule": ["* 4-7 * * 1"],
"prConcurrentLimit": 3,
"prHourlyLimit": 2,
"dependencyDashboard": true,
"labels": ["abhaengigkeiten"],
"rangeStrategy": "bump",
"packageRules": [
{
"description": "Patch und Minor gebuendelt: ein PR pro Woche statt zwanzig. Die CI des Repos entscheidet.",
"matchUpdateTypes": ["minor", "patch"],
"groupName": "kleine Updates",
"groupSlug": "klein"
},
{
"description": "Major einzeln, damit der Changelog im PR lesbar bleibt.",
"matchUpdateTypes": ["major"],
"dependencyDashboardApproval": true
},
{
"description": "Typen-Pakete folgen ihrer Bibliothek, nicht dem eigenen Rhythmus.",
"matchPackageNames": ["/^@types//"],
"groupName": "kleine Updates",
"groupSlug": "klein"
}
],
"vulnerabilityAlerts": {
"description": "Sicherheitsluecken laufen am Zeitplan vorbei.",
"schedule": null,
"labels": ["abhaengigkeiten", "sicherheit"],
"dependencyDashboardApproval": false
},
"lockFileMaintenance": {
"enabled": true,
"schedule": ["* 4-7 1 * *"]
}
}