diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 0000000..cac716e --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,34 @@ +name: Renovate + +on: + schedule: + # Run every Monday at 8:00 AM UTC + - cron: "0 8 * * 1" + workflow_dispatch: + inputs: + logLevel: + description: "Log level" + required: false + default: "info" + type: choice + options: + - info + - debug + - trace + +env: + LOG_LEVEL: ${{ inputs.logLevel || 'info' }} + +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Renovate + uses: renovatebot/github-action@v42.0.4 + with: + configurationFile: renovate.json + env: + LOG_LEVEL: ${{ env.LOG_LEVEL }} diff --git a/renovate.json b/renovate.json new file mode 100644 index 0000000..76dd966 --- /dev/null +++ b/renovate.json @@ -0,0 +1,138 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended", + ":dependencyDashboard", + ":semanticCommits", + ":automergeDigests", + ":automergeBranch" + ], + "timezone": "UTC", + "schedule": ["before 9am on Monday"], + "labels": ["dependencies"], + "assignees": ["@me"], + "rangeStrategy": "bump", + "prConcurrentLimit": 5, + "prHourlyLimit": 2, + "lockFileMaintenance": { + "enabled": true, + "automerge": false, + "schedule": ["before 9am on Monday"] + }, + "packageRules": [ + { + "description": "Astro and React ecosystem packages", + "matchPackagePatterns": ["^@astrojs/", "^astro", "^react", "^@types/react"], + "groupName": "Astro and React core", + "schedule": ["before 9am on Monday"], + "automerge": false, + "reviewersFromCodeOwners": true + }, + { + "description": "Development dependencies", + "matchDepTypes": ["devDependencies"], + "groupName": "Dev dependencies", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr", + "minimumReleaseAge": "3 days" + }, + { + "description": "Testing packages", + "matchPackagePatterns": [ + "^@testing-library/", + "^@playwright/", + "^vitest", + "^@vitest/", + "^jsdom" + ], + "groupName": "Testing packages", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr" + }, + { + "description": "ESLint and TypeScript packages", + "matchPackagePatterns": ["^@typescript-eslint/", "^eslint", "^typescript", "^@types/"], + "excludePackagePatterns": ["^@types/react"], + "groupName": "TypeScript and ESLint", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr" + }, + { + "description": "Formatting and code quality tools", + "matchPackageNames": [ + "prettier", + "prettier-plugin-astro", + "prettier-plugin-tailwindcss", + "husky", + "lint-staged" + ], + "groupName": "Code formatting tools", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr" + }, + { + "description": "TailwindCSS ecosystem", + "matchPackagePatterns": ["^tailwind", "^@tailwindcss/"], + "matchPackageNames": ["autoprefixer", "postcss", "clsx", "tailwind-merge"], + "groupName": "TailwindCSS ecosystem", + "schedule": ["before 9am on Monday"], + "automerge": false + }, + { + "description": "FontAwesome packages", + "matchPackagePatterns": ["^@fortawesome/"], + "groupName": "FontAwesome packages", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr" + }, + { + "description": "Lucide icon packages", + "matchPackagePatterns": ["^lucide-"], + "groupName": "Lucide icons", + "schedule": ["before 9am on Monday"], + "automerge": false, + "automergeType": "pr" + }, + { + "description": "Major updates require manual review", + "matchUpdateTypes": ["major"], + "automerge": false, + "schedule": ["before 9am on Monday"], + "labels": ["dependencies", "major-update"], + "reviewersFromCodeOwners": true + }, + { + "description": "Pin Node.js to LTS versions", + "matchPackageNames": ["node"], + "allowedVersions": "/^(18|20|22)\\./", + "automerge": false + }, + { + "description": "Cloudflare Workers and Wrangler", + "matchPackageNames": ["wrangler", "@astrojs/cloudflare"], + "groupName": "Cloudflare ecosystem", + "schedule": ["before 9am on Monday"], + "automerge": false, + "reviewersFromCodeOwners": true + } + ], + "vulnerabilityAlerts": { + "enabled": true, + "labels": ["security", "dependencies"], + "automerge": false, + "schedule": ["at any time"] + }, + "osvVulnerabilityAlerts": true, + "dependencyDashboard": true, + "dependencyDashboardTitle": "Dependency Dashboard", + "dependencyDashboardHeader": "This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.", + "dependencyDashboardFooter": "Configure Renovate in `renovate.json`", + "configMigration": true, + "platformAutomerge": true, + "automergeStrategy": "squash" +}