Dependency-Bot

Es ist eine bewährte Praxis, Abhängigkeiten regelmäßig zu aktualisieren, um Schwachstellen zu vermeiden, Inkompatibilitäten zwischen Abhängigkeiten einzuschränken und komplexe Upgrades zu vermeiden, wenn von einer zu alten Version aktualisiert wird. Eine Vielzahl von Werkzeugen kann dabei helfen, auf dem neuesten Stand zu bleiben. uv wird hierbei von Renovate unterstützt.

Renovate nutzt die uv.lock-Datei-Datei, um festzustellen, dass uv für die Verwaltung von Abhängigkeiten verwendet wird, und schlägt Aktualisierungen für Projektabhängigkeiten, optionale Abhängigkeiten undEntwicklungsabhängigkeiten vor. Renovate aktualisiert sowohl die Dateien pyproject.toml als auch uv.lock.

Installation und Konfiguration

Das Renovate CLI-Tool kann installiert werden mit

$ npm install renovate

Tipp

Der Renovate-Bot sollte unter einem eigenen Service-User laufen. Daher empfehlen wir, einen eigenen Account, renovate-bot, für den Bot zu erstellen und zu verwenden. Erstellt und speichert anschließend ein Zugangs-Token für dieses Konto.

Für euren GitLab-Server könnt ihr nun Renovate konfigurieren. Renovate sucht standardmäßig nach einer config.js-Datei im aktuellen Arbeitsverzeichnis. Ihr könnt dies jedoch außer Kraft setzen, indem ihr die Umgebungsvariable RENOVATE_CONFIG_FILE definiert. Die Konfiguration kann dann z.B. so aussehen:

config.js
module.exports = {
  endpoint: 'https://ce.cusy.io/api/v4/',
  token: 'GITLAB_TOKEN',
  platform: 'gitlab',
  onboardingConfig: {
    extends: ['config:recommended'],
  },
  repositories: ['USERNAME/REPO', 'ORGNAME/REPO'],
};

Bemerkung

Ändert die Pfade zu den Repositories in etwas Passendes. Ersetzt auch den Wert GitLab-Token durch den im vorherigen Schritt erstellten Wert.

Wenn ihr nun die uv.lock-Datei in eurem Repository regelmäßig aktualisieren wollt, solltet ihr z.B. in der renovate.json5-Datei in eurem Repository die Option lockFileMaintenance verwenden:

renovate.json5
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  lockFileMaintenance: {
    enabled: true,
  },
}

Renovate erkennt jedoch nicht automatisch Dateien mit Inline script metadata. Ihr müsst diese Python-Skripte explizit mit fileMatch angegeben, z.B. mit:

renovate.json5
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  pep723: {
    fileMatch: [
      "app\\.py",
    ],
  },
}

Siehe auch

Schließlich sollte noch die zeitliche Ausführung von Renovate geplant werden, z.B. mit Cron:

#!/bin/bash

export PATH="/home/renovate-bot/.node_modules/.bin/renovate:$PATH"
export RENOVATE_CONFIG_FILE="/home/renovate-bot/config.js"
export RENOVATE_TOKEN="GITLAB_TOKEN"

0 * * * * renovate

CI/CD-Pipeline

Renovate kann auch in CI/CD-Pipelines eingebunden werden: