diff --git a/.gitea/workflows/renovate.yml b/.gitea/workflows/renovate.yml new file mode 100644 index 0000000..7cf7ebb --- /dev/null +++ b/.gitea/workflows/renovate.yml @@ -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 " + # 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 + diff --git a/README.md b/README.md index f6819a0..f815391 100644 --- a/README.md +++ b/README.md @@ -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 "). +- `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. diff --git a/renovate-basis.json b/renovate-basis.json new file mode 100644 index 0000000..88a6f50 --- /dev/null +++ b/renovate-basis.json @@ -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 * *"] + } +}