Renovate Dependency Automation
Automates the creation of dependency update pull requests by configuring Renovate bot for version policies, branch strategies, commit templates, and PR templates. This skill makes the model set up Renovate configuration files, define update rules per ecosystem, and ensure automated PRs follow team conventions for review and merge.
TL;DR Checklist
- Place
renovate.json5in repo root (or.github/renovate.json5for GitHub-specific config) - Define
platform,repository, andonboardingsettings before setting update rules - Configure at least one
packageRulesblock per ecosystem (npm, docker, github-actions) - Set branch prefix pattern and commit message convention
- Add PR title and description templates via
prHeader/prFooteror PR template file - Enable
pruneStaleBranches: trueto prevent branch accumulation - Validate config with
npx renovate-config-validatorbefore committing
When to Use
Use this skill when:
- Setting up automated dependency updates for a new project or monorepo
- Renegotiating existing dependency update practices (branch strategy, commit messages, PR templates)
- Configuring Renovate for a monorepo with multiple package managers (npm + docker + github-actions)
- Enforcing security-only updates for production services while allowing full updates for development
- Integrating Renovate with team workflows (branch protection rules, required reviewers, merge strategies)
When NOT to Use
Avoid this skill for:
- One-off manual version bumps — use
npm update,pip install --upgrade, or manual PRs instead - Locking dependency versions in CI — this is a configuration concern, not a runtime concern
- Auditing known vulnerabilities in a specific project — use
npm audit,pip-audit, or Trivy instead - Designing release pipelines (semantic-release, changesets) — use
coding-semantic-releaseorcoding-changesetsinstead
Core Workflow
Determine Project Topology — Classify the project as single-repo, monorepo, or multi-repo. For monorepos, identify package directories (
apps/,packages/,libs/) and whether they share apackage.jsonor have independent ones. For multi-repo setups, decide whether to use Renovate'sconfigMigrationor a shared config repository withextends: ["github>org/renovate-config"]. Checkpoint: Confirm the topology maps to the correctbaseDirorrepositoriesconfiguration. Monorepos neednpmmanager settings withworkspacesenabled.Create Base
renovate.json5Configuration — Write the top-level configuration withplatform,repositories, andonboardingsettings. Define the automation scope before adding update rules.{ $schema: "https://docs.renovatebot.com/renovate-schema.json", platform: "github", repositories: ["org/project"], // General automation settings onboardingConfig: { commitMessageTopic: "{{depName}}", includeForks: true, }, forkProcessing: "auto", requireConfig: "optional", }Checkpoint: The
$schemaURL resolves and points to valid Renovate schema.platformmatches the SCM in use.requireConfigisoptionalonly if the repo accepts bare-bones automation; otherwise set torequired.Define Package Rules Per Ecosystem — Create
packageRulesthat group packages by manager, apply versioning strategies, set branch prefixes, and define schedule windows. Each rule targets a specific dependency family with explicit update behavior.{ packageRules: [ // Production dependencies: minor + patch only, weekdays only { matchManagers: ["npm"], matchPaths: ["package.json"], groupName: "production npm dependencies", schedule: ["* * * * 1-5"], rangeStrategy: "pin", pruneAfterBranch: true, }, // Development dependencies: all updates, weekends allowed { matchManagers: ["npm"], matchPaths: ["package.json"], matchDepTypes: ["devDependencies", "peerDependencies"], groupName: "dev npm dependencies", schedule: ["* * * * 0,6"], }, // Docker images: pin to major tags, update daily { matchManagers: ["docker"], groupName: "docker images", versioning: "docker", schedule: ["* * * * *"], prPriority: 5, }, // GitHub Actions: group all actions, update weekly { matchManagers: ["github-actions"], groupName: "GitHub Actions", schedule: ["* * * * 1"], commitMessageTopic: "GitHub Actions {{depName}}", }, // Security-only updates for all managers { matchDatasources: ["npm", "docker", "go", "pypi"], matchUpdateTypes: ["major"], labels: ["security", "major"], commitMessagePrefix: "[security] ", enabled: false, // disabled by default — enable per-project policy }, ], }Checkpoint: No two
packageRulescontradict each other on the same package. Branch names are unique viabranchPrefixoradditionalBranchPrefix. Prune settings prevent orphan branches.Configure Branch Strategy and Pruning — Set branch naming conventions, stale branch cleanup, and branch priority. Ensure branches are cleaned up automatically after merge to prevent accumulation.
{ branchPrefix: "renovate/", branchTopic: "{{{packageType}}}-{{{prettyDepType}}}-{{{depName}}}{{{lockFileVersion}}}", commitMessageTopic: "{{{depName}}}{{{lockFileVersion}}}", commitMessageExtra: "({{{currentValue}}} → {{{newValue}}})", pruneStaleBranches: true, internalChecksFilter: "strict", vulnerabilityAlerts: { enabled: true, labels: ["security", "vulnerability"], }, }Checkpoint:
branchTopicproduces deterministic branch names.pruneStaleBranchesistrue.internalChecksFilterisstrictto avoid merging branches that failed Renovate's own checks.Set Up PR Templates and Messaging — Configure PR titles, descriptions, headers, and footers. Optionally link to a
.github/PULL_REQUEST_TEMPLATE.mdfor team conventions on what reviewers should check.{ prTitleTemplate: "fix: release {{depName}} v{{{newVersion}}}", prHeader: "<!-- Renovation Bot PR -->", prFooter: "This PR was generated by [Renovate Bot](https://github.com/renovatebot/renovate).", additionalReviewers: ["team-dependency-review"], }Add a PR template file at
.github/PULL_REQUEST_TEMPLATE.md(orrenovate.d/pr-template.hbsfor Handlebars templating):<!-- renovate:pr-template --> ## Dependency Update Summary | Field | Value | |-------------|--------------------------------| | Package | {{depName}} | | Old Version | {{currentValue}} | | New Version | {{newVersion}} | | Datasource | {{datasource}} | | Changelog | [{{datasource}}/{{depName}}]({{resolveChangeLogURL}}) | ## Review Checklist - [ ] Changelog reviewed for breaking changes - [ ] `package.json` or lock file updated correctly - [ ] Tests pass with new version - [ ] No transitive dependency regressions --- Generated by Renovate BotCheckpoint: Handlebars variables in the template resolve to valid Renovate context. The
resolveChangeLogURLhelper is supported by Renovate's default changelog logic.Validate Configuration and Run in Dry-Run Mode — Execute Renovate's built-in config validator and run a dry-run against the repository to verify expected PRs are generated.
# Validate the configuration schema npx renovate-config-validator # Run a dry-run (no PRs created, logs what would happen) npx renovate --dry-run --repository org/project # Check the output for expected package groups # Look for: "Found N dependency updates" # Look for: "Branch names: renovate/npm-production-deps-foo-2.x"Checkpoint:
renovate-config-validatorexits with code 0. Dry-run output shows PRs for all configured package groups. No warnings about unresolved templates or invalid rule matchers.
Implementation Patterns
Pattern 1: Monorepo with Workspaces
Configure Renovate to manage independent npm packages within a monorepo structure. Each package has its own package.json and Renovate creates separate branches per workspace.
{
$schema: "https://docs.renovatebot.com/renovate-schema.json",
platform: "github",
repositories: ["org/monorepo"],
enabledManagers: ["npm", "docker", "github-actions"],
npm: {
fileMatch: ["(^|/)package\\.json$", "(^|/)package-lock\\.json$"],
supportSurvey: {
placeholderURL: "https://github.com/org/monorepo/issues/new",
},
},
packageRules: [
// Per-workspace dependency groups
{
matchManagers: ["npm"],
matchPaths: ["apps/*/package.json"],
groupName: "app workspace dependencies",
rangeStrategy: "replace",
automerge: false,
},
{
matchManagers: ["npm"],
matchPaths: ["packages/*/package.json"],
groupName: "shared package dependencies",
rangeStrategy: "widen",
automerge: true,
automergeType: "pr",
},
{
// Shared root-level tooling (linters, formatters, build tools)
matchManagers: ["npm"],
matchPaths: ["package.json"],
groupName: "root tooling",
labels: ["tooling"],
},
// Docker-based packages (apps and services)
{
matchManagers: ["docker"],
matchPaths: ["**/Dockerfile*", "**/docker-compose*.yml"],
groupName: "docker images",
versioning: "docker",
semanticCommits: "enabled",
},
],
// Ensure branches are cleaned up after merge
branchPrefix: "renovate/",
pruneStaleBranches: true,
}
Pattern 2: GitHub Actions Ecosystem Updates
Configure Renovate to manage actions/* dependencies in .github/workflows/*.yml files. This ensures CI/CD tooling stays current without manual intervention.
{
packageRules: [
{
// Group all GitHub Actions into a single update PR
matchManagers: ["github-actions"],
matchFileNames: [".github/workflows/*.yml"],
groupName: "GitHub Actions workflow updates",
commitMessageTopic: "GitHub Actions",
labels: ["ci", "github-actions"],
prPriority: 3,
// Group by action owner to reduce noise
group: {
branchTopic: "renovate/github-actions-group",
matchSourceUrls: [
"github/**/*.yml",
],
},
// Update to latest patch versions automatically
automerge: true,
automergeType: "branch",
},
// Critical infrastructure actions require manual review
{
matchManagers: ["github-actions"],
matchDepNames: ["actions/checkout", "actions/setup-node", "actions/upload-artifact"],
labels: ["ci", "critical"],
automerge: false,
requiredStatusChecks: ["ci/actions-check"],
},
],
}
Pattern 3: Docker Image Pinning with Digest Selection
Configure Renovate to update Docker images using digest pinning for production deployments, providing cryptographic verification of image contents.
{
packageRules: [
{
// Production: use digest pinning for immutability
matchManagers: ["docker"],
matchFileNames: ["**/docker-compose*.yml"],
matchDepNames: ["node", "python", "golang", "alpine", "nginx"],
pinDigests: true,
groupName: "pinned docker images",
labels: ["production", "docker"],
prPriority: 10,
// Set up digest-based versioning
versioning: "docker",
},
// Development: tag-based updates, digest not required
{
matchManagers: ["docker"],
matchFileNames: ["Dockerfile*", "**/docker-compose*.dev.yml"],
groupName: "development docker images",
labels: ["development", "docker"],
prPriority: 1,
automerge: true,
},
],
docker: {
versioning: "docker",
pinDigests: false,
followTags: ["alpine", "slim", "latest"],
},
}
Constraints
MUST DO
- Always include
$schemainrenovate.json5to enable IDE validation and schema checking - Set
pruneStaleBranches: trueto prevent stale branch accumulation - Use
packageRulesto group related packages with consistent labels, schedules, and branch prefixes - Configure
semanticCommits: enabledfor conventional commit formatting in PR titles and commit messages - Validate every configuration change with
npx renovate-config-validatorbefore committing - Use
matchPathsto scope rules to specific directories in monorepo projects - Set
pruneAfterBranch: trueon individualpackageRulesto clean up branches per-group - Include
labelson all package rules so PRs are triageable in the repository - Test configuration with
--dry-runbefore deploying to a production repository - Use
requiredStatusChecksfor critical updates (e.g.,actions/checkout) to prevent merge of unverified changes - Document the
branchTopicpattern so team members can predict branch names
MUST NOT DO
- Never set
automerge: truefor major version updates without explicit team approval - Never remove
pruneStaleBranches— orphan branches accumulate and confuse CI - Never use bare
schedule: ["* * * * *"]for production packages — restrict to weekday business hours - Never pin all Docker images to
latesttag without digest — defeats the purpose of immutability - Never skip
npx renovate-config-validator— invalid configs create silent failures that skip updates - Never configure Renovate to update
dependenciesanddevDependencieswith identical rules — they have different risk profiles - Never use
allowedVersionswith wildcards that could exclude valid patch versions - Never rely solely on Renovate without a manual periodic audit (monthly
npm auditor equivalent)
Output Template
When this skill is active, the model outputs:
- Configuration Block — Complete
renovate.json5with all settings, or specificpackageRulesblocks if modifying an existing config - Branch Strategy Summary — Explained branch naming conventions, prune settings, and cleanup behavior
- PR Template — Either inline
prHeader/prFooterconfig or a link to.github/PULL_REQUEST_TEMPLATE.md - Validation Command — The exact
npx renovate-config-validatorcommand and expected exit code - Schedule Window — The cron schedule for updates, with rationale for the chosen window
Related Skills
| Skill | Purpose |
|---|---|
coding-gitlab-ci-cd-pipelines |
Automate dependency update testing in CI pipelines |
coding-github-actions-workflows |
Configure GitHub Actions workflows that Renovate updates |
cncf-azure-devops |
Alternative automation pipeline for Azure DevOps repositories |
Live References
- Renovate Documentation — Official documentation for configuration, managers, and features
- Renovate Schema Reference — JSON schema for config validation
- Renovate Config Validator — CLI tool for validating configuration files
- GitHub App Installation — Official Renovate GitHub app installation page
- Renovate Package Rules Guide — Detailed documentation on packageRule targeting and matching
- Renovate Docker Manager — Docker-specific configuration options including digest pinning
- Semantic Commit Messages — Conventional commits specification used by
semanticCommitsoption