ci: add Renovate for automated dependency updates (#34)
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
name: Renovate
|
||||
run-name: Renovate — Dependency Updates
|
||||
|
||||
on:
|
||||
# Run on a schedule (every 6 hours) to discover new updates.
|
||||
schedule:
|
||||
- cron: "0 */6 * * *"
|
||||
# Allow manual runs for testing or forcing an update check.
|
||||
workflow_dispatch:
|
||||
|
||||
# Only one Renovate run at a time.
|
||||
concurrency:
|
||||
group: renovate
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
renovate:
|
||||
name: Renovate
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Run Renovate
|
||||
uses: renovatebot/github-action@v42.1.0
|
||||
with:
|
||||
configurationFile: renovate.json5
|
||||
token: ${{ secrets.RENOVATE_TOKEN }}
|
||||
env:
|
||||
LOG_LEVEL: info
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
// Renovate configuration for YellowJacket.
|
||||
// Self-hosted via .github/workflows/renovate.yml — no external app required.
|
||||
//
|
||||
// Design decisions:
|
||||
// - PR titles use "chore(deps):" prefix to satisfy commitlint and avoid
|
||||
// triggering a semantic-release version bump on merge.
|
||||
// - Go and frontend (pnpm) dependency updates are grouped separately to keep
|
||||
// PRs reviewable and CI matrix manageable.
|
||||
// - GitHub Actions are tracked and grouped into a single PR.
|
||||
// - The custom beep fork (TheCodeOfCaleb/beep) is excluded from updates.
|
||||
// - Go tool directives (templ, sqlc, lefthook) are tracked automatically.
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
||||
|
||||
// Inherit sensible defaults (schedule, automerge policies, etc.).
|
||||
"extends": [
|
||||
"config:recommended",
|
||||
"docker:pinDigests",
|
||||
":semanticCommits",
|
||||
":semanticCommitTypeAll(chore)",
|
||||
":semanticCommitScopeDisabled",
|
||||
"schedule:weekends",
|
||||
],
|
||||
|
||||
// Use conventional-commit PR titles that satisfy the commitlint job.
|
||||
"commitMessagePrefix": "chore(deps):",
|
||||
"commitMessageAction": "update",
|
||||
|
||||
// Let CI pass before flagging PRs as ready.
|
||||
"prCreation": "not-pending",
|
||||
"prHourlyLimit": 3,
|
||||
"prConcurrentLimit": 5,
|
||||
|
||||
// Keep the lockfile in sync.
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true,
|
||||
"schedule": ["before 6am on monday"],
|
||||
},
|
||||
|
||||
// ── Manager-specific settings ──────────────────────────────
|
||||
"gomod": {
|
||||
"enabled": true,
|
||||
// Let Renovate run `go mod tidy` after bumping versions.
|
||||
"postUpdateOptions": ["gomodTidy"],
|
||||
},
|
||||
|
||||
"npm": {
|
||||
"enabled": true,
|
||||
// Lockfile lives in frontend/, Renovate auto-detects this.
|
||||
},
|
||||
|
||||
// ── Package rules ──────────────────────────────────────────
|
||||
"packageRules": [
|
||||
// 1. Group all non-major Go dependency updates.
|
||||
{
|
||||
"description": "Group minor/patch Go dependency updates",
|
||||
"matchManagers": ["gomod"],
|
||||
"matchUpdateTypes": ["minor", "patch", "digest"],
|
||||
"groupName": "go dependencies (non-major)",
|
||||
},
|
||||
|
||||
// 2. Group all non-major frontend dependency updates.
|
||||
{
|
||||
"description": "Group minor/patch frontend dependency updates",
|
||||
"matchManagers": ["npm"],
|
||||
"matchUpdateTypes": ["minor", "patch"],
|
||||
"groupName": "frontend dependencies (non-major)",
|
||||
},
|
||||
|
||||
// 3. Group GitHub Actions updates.
|
||||
{
|
||||
"description": "Group GitHub Actions updates",
|
||||
"matchManagers": ["github-actions"],
|
||||
"groupName": "github actions",
|
||||
},
|
||||
|
||||
// 4. Ignore the custom beep fork — it's manually managed.
|
||||
{
|
||||
"description": "Ignore custom beep fork (manually managed)",
|
||||
"matchPackageNames": ["github.com/TheCodeOfCaleb/beep/v2"],
|
||||
"enabled": false,
|
||||
},
|
||||
|
||||
// 5. Major updates get individual PRs for careful review.
|
||||
{
|
||||
"description": "Separate PRs for major updates",
|
||||
"matchUpdateTypes": ["major"],
|
||||
"groupName": null,
|
||||
"commitMessagePrefix": "chore(deps)!:",
|
||||
},
|
||||
|
||||
// 6. Auto-merge patch-level updates for dev dependencies.
|
||||
{
|
||||
"description": "Auto-merge patch updates for frontend devDependencies",
|
||||
"matchManagers": ["npm"],
|
||||
"matchDepTypes": ["devDependencies"],
|
||||
"matchUpdateTypes": ["patch"],
|
||||
"automerge": true,
|
||||
"automergeType": "pr",
|
||||
},
|
||||
|
||||
// 7. Pin htmx.org — it uses exact versioning intentionally.
|
||||
{
|
||||
"description": "Keep htmx.org pinned to exact versions",
|
||||
"matchPackageNames": ["htmx.org"],
|
||||
"rangeStrategy": "pin",
|
||||
},
|
||||
|
||||
// 8. Wails is critical infrastructure — separate PR, never auto-merge.
|
||||
{
|
||||
"description": "Wails updates get their own PR (critical dep)",
|
||||
"matchPackageNames": ["github.com/wailsapp/wails/v2"],
|
||||
"groupName": null,
|
||||
"automerge": false,
|
||||
},
|
||||
],
|
||||
|
||||
// ── Vulnerability alerts ───────────────────────────────────
|
||||
"vulnerabilityAlerts": {
|
||||
"enabled": true,
|
||||
"labels": ["security"],
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user