Monitor vulnerabilities in dependencies and keep them up-to-date
Dependabot ist ein Tool, um die in einem Repo verwendeten Dependencies automatisch auf dem aktuellen Stand zu halten. So können Sicherheitsprobleme mit älteren Versionen vermieden werden.
Integration über GitHub Actions
Im Repository unter /.github
eine Datei dependabot.yml
erstellen:
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "npm"
directory: "/app/"
schedule:
interval: "daily"
time : "05:00"
timezone : "Europe/Berlin"
- package-ecosystem: "bundler"
directory: "/"
allow:
- dependency-type: "all"
schedule:
interval: "daily"
time: "05:00"
timezone: "Europe/Berlin"
Im angegebenen Beispiel werden alle GitHub Actions (in den Workflow Dateien) und die Dependencies in der build.gradle
einmal wöchentlich aktualisiert.
Es gibt vielfältige Möglichkeiten der Konfiguration.
Über das package-ecosystem
wird angegeben, in welchen Dateien nach Versionen geschaut werden soll:
- github-actions -> .workflow/*.yml
- gradle -> build.gradle
- npm -> package.json und Lock files
- bundler -> Gemfile und Lock files
Mit
directory
wird angegeben, in welchem Verzeichnis sich die Configdateien befinden. Befindet sich die package.json z.B. in einem Unterverzeichnis app, dann hier/app/
angeben.
Dependabot schaut nach aktualisierten Versionen erstellt einen Pull Request mit den Änderungen.
Die Pull Requests können entweder manuell oder automatisch gemerged werden. Wenn dies automatisch geschehen soll, dann unter /.github/workflows
eine Datei dependabot-automerge.yml
erstellen mit folgendem Inhalt:
name: Dependabot auto merge
concurrency:
group: dependabot
cancel-in-progress: false
permissions:
id-token: write
pull-requests: write
contents: write
on: pull_request_target
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1.3.1
- name: Checkout PR Branch
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Build and test
uses: eskatos/gradle-command-action@v2.1.5
with:
arguments: clean build
- name: Enable auto merge for Dependabot PRs
if: ${{steps.metadata.outputs.update-type != 'version-update:semver-major'}}
run: gh pr merge --auto --squash "$PR_URL"
env:
PR_URL: ${{github.event.pull_request.html_url}}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Damit werden Minor Updates in den Versionen automatisch in den Code übernommen, wenn der Build erfolgreich durchlaufen wird. Major Updates müssen weiterhin manuell gemerged werden. So wird sichergestellt, dass Major Updates keine Breaking Changes mitbringen. Das GitHub Token muss an dieser Stelle angegeben werden, um von einem GitHub Action Workflow die GitHub CLI nutzen zu können