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. In :ref:`update-uv-lock` ist beschrieben, wie ihr
mit ``uv lock --upgrade`` alle Abhängigkeiten und mit :samp:`uv lock
--upgrade-package {PACKAGE}=={VERSION}` einzelne Abhängigkeiten kontrolliert
aktualisieren könnt. Ihr könnt euch jedoch hierbei auch von `Renovate
`_ unterstützen lassen.
Renovate nutzt die :ref:`uv_lock`-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 und Entwicklungsabhängigkeiten
vor. Renovate aktualisiert sowohl die Dateien :file:`pyproject.toml` als auch
:file:`uv.lock`.
Installation und Konfiguration
------------------------------
Das Renovate CLI-Tool kann installiert werden mit
.. code-block:: console
$ npm install renovate
.. tip::
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 :doc:`/productive/git/advanced/gitlab/index`-Server könnt ihr nun
Renovate konfigurieren. Renovate sucht standardmäßig nach einer
:file:`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 :abbr:`z.B. (zum Beispiel)` so aussehen:
.. code-block:: js
:caption: 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'],
};
.. note::
Ändert die Pfade zu den Repositories in etwas Passendes. Ersetzt auch den
Wert GitLab-Token durch den im vorherigen Schritt erstellten Wert.
.. seealso::
* `Renovate configuration overview
`_
Wenn ihr nun die :file:`uv.lock`-Datei in eurem Repository regelmäßig
aktualisieren wollt, solltet ihr :abbr:`z.B. (zum Beispiel)` in der
:file:`renovate.json5`-Datei in eurem Repository die Option `lockFileMaintenance
`_
verwenden:
.. code-block:: json5
:caption: renovate.json5
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
lockFileMaintenance: {
enabled: true,
},
}
Renovate erkennt jedoch nicht automatisch Dateien mit
:ref:`inline-script-metadata`. Ihr müsst diese Python-Skripte explizit mit
`fileMatch
`_ angegeben,
:abbr:`z.B. (zum Beispiel)` mit:
.. code-block:: json5
:caption: renovate.json5
:emphasize-lines: 4-5
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
pep723: {
fileMatch: [
"app\\.py",
],
},
}
.. seealso::
* `lockFileMaintenance
`_
Schließlich sollte noch die zeitliche Ausführung von Renovate geplant werden,
:abbr:`z.B. (zum Beispiel)` mit `Cron `_:
.. code-block:: bash
#!/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 :doc:`cicd` eingebunden werden:
* `GitHub Action `_
* `GitLab Runner `_