Dependabot
Dependabot benytter GitHub dependency graph for å gi beskjed om sårbare avhengigheter, samt oppgradering av disse. Dette er skrudd på automatisk for alle GitHub-repoer. I tillegg kan det skrus på automatiske versjonsoppdateringer med Dependabot, slik at Dependabot lager PR-er for nye versjoner for språk/økosystem som er aktivert.
Skru på automatiske versjonsoppdateringer
Automatiske versjonsoppdateringer må skrus på av en bruker med "Admin"-rolle i repoet. For det aktuelle repoet kan du gå til "Settings > Code security > Dependabot > Dependabot version updates" og trykke på "Enable".
Dersom dette ikke er gjort fra før må du sette opp en initiell versjon av filen .github/dependabot.yml
. Det er anbefalt å sette opp både for oppdatering av GitHub Actions for alle repoer som et minimum:
version: 2
updates:
- package-ecosystem: "github-actions"
directory: ".github/workflows"
schedule:
interval: "daily"
I tillegg bør det settes opp for de ulike språkene/økosystemene som ligger i repoet. Se eksemplene i avsnittet Eksempelkonfigurasjoner.
Feilsøking av Dependabot
For å se Dependabot-feil i et repo kan man gå til "Insights > Dependency graph > Dependabot" for å se feil, status og logger fra siste kjøringer.
Se også GitHub-dokumentasjonen for mer detaljert beskrivelse av feilsøking.
Konfigurasjon av Dependabot
Begrense antallet pull requests fra Dependabot
Antallet PR-er er begrenset til 5 for vanlige versjonsoppdateringer og 10 for sikkerhetsoppdateringer. Antallet åpne PR-er kan konfigureres med open-pull-requests-limit
for hvert økosystem. F.eks.:
- package-ecosystem: "<ecosystem>"
open-pull-requests-limit: 20
# ... More config ...
Oppdateringsintervall
Man kan styre Dependabot kjører ved å konfigurere schedule
for hvert package-ecosystem
.
For å kjøre oppdateringer hver morgen i ukedagene:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "daily"
time: "07:00"
timezone: "Europe/Oslo"
For å kjøre oppdateringer hver mandag morgen:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
day: "monday"
time: "07:00"
timezone: "Europe/Oslo"
Innlogging til private registries
For at Dependabot skal kunne oppdatere dependencies som ligger i private/internal repoer (eks. actions), pakker i private package registries (npm, maven) elle
Merk at dette krever PATs eller access tokens som må ligge som en Dependabot repository secret i repoet.
Private registries må legges i registries
-listen, og må i tillegg refereres til i updates
-listen for relevante økosystemer. Eks.:
version: 2
registries:
npm-github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{ secrets.PAT_GHCR_READ }}
updates:
- package-ecosystem: npm
# Check also for updates in GitHub Maven Package frontend-aut-lib
registries:
- npm-github
# Remaining configuration skipped
NPM
Se også dokumentasjonen.
registries:
npm-github:
type: npm-registry
url: https://npm.pkg.github.com
token: ${{ secrets.PAT_GHCR_READ }}
GitHub
Denne brukes typisk for actions som ligger i private/interne repoer. Dependabot må bli gitt eksplisitt tilgang for å lese nye private/interne repoer (spør om hjelp i #gen-github
på Slack). Se også dokumentasjonen.
registries:
github-repo-name:
type: git
url: https://github.com
username: x-access-token
password: ${{ secrets.PAT_READ_REPO_NAME }}
Maven
Denne brukes for å lese Maven-pakker som er publisert i et gitt repo. Se også dokumentasjonen.
registries:
maven-repo-name:
type: maven-repository
url: https://maven.pkg.github.com/kartverket/repo-name
username: ${{ secrets.GH_USERNAME }}
password: ${{ secrets.PAT_GHCR_READ }}
Eksempelkonfigurasjoner
De ulike økosystemene fungerer litt ulikt, og støtte kan variere. For mer informasjon se dokumentasjonen for økosystemer.
Under følger noen vanlige konfigurasjoner som flere team bruker. Disse er et gir et godt utgangspunkt men må i noen tilfeller konfigureres mer for å fungere.
GitHub Actions
- package-ecosystem: "github-actions"
directory: ".github/workflows"
schedule:
interval: "daily"
Git submodules
Denne kan legges til i repoer som bruker git submodules, eks. apps-repoer som benytter argokit.
- package-ecosystem: "gitsubmodule"
directory: "/"
schedule:
interval: "daily"
Docker
Pass på at directory
peker til mappen som inneholder Dockerfile
.
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
Gradle
- package-ecosystem: "gradle"
directory: "/"
schedule:
interval: "daily"
NPM
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
For å unngå for mange PR-er for minor- og patchversjoner er det i mange tilfeller ok å gruppere disse for NPM:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
groups:
minor-and-patch-dependencies:
patterns:
- "*"
update-types:
- "minor"
- "patch"
Go
- package-ecosystem: "gomod"
directory: "/"
schedule:
interval: "daily"
Terraform
Oppdater directory
med riktig filsti.
- package-ecosystem: "terraform"
directory: "/"
schedule:
interval: "daily"
Dersom det er flere mapper som inneholder Terraform kan directories
brukes:
- package-ecosystem: "terraform"
directories:
- "dev"
- "prod"
schedule:
interval: "daily"
Python
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "daily"