Renovate configuration reference¶
Renovate reads three kinds of configuration: the deployment manifests in dp-infra/renovate/, the global config.js, and a renovate.json in each managed repository.
Deployment¶
The CDK8S code in dp-infra/renovate/ renders namespace, ClusterSecretStore, ExternalSecret, one ConfigMap and CronJob per instance, and a PrometheusRule.
Key in |
Example |
Notes |
|---|---|---|
|
|
Renovate image tag; the |
|
|
GitLab API base |
|
|
Resource-name suffix; the empty suffix is the original kup6s instance |
|
|
Cron schedule, evaluated in |
|
|
Key in |
|
list |
Repositories the instance operates on |
Each instance is one GitLab group: a Renovate run authenticates with exactly one platform token, and group access tokens are bound to their group.
Every CronJob uses concurrencyPolicy: Forbid and an emptyDir working volume, so each run starts from a clean checkout.
Secrets¶
Renovate authenticates as a GitLab group access token per instance (a bot user with api scope and Developer role on the instance’s group).
The tokens live in the application-secrets namespace as renovate-secrets-source and are mirrored into the renovate namespace by ESO as renovate-secrets.
gitlab-tokenRequired. The group access token for
kup6s/dp. Exposed to therenovateCronJob asRENOVATE_TOKEN.gitlab-token-heidiRequired. The group access token for
heidi. Exposed to therenovate-helixCronJob asRENOVATE_TOKEN.github-tokenOptional. A GitHub read-only token, shared by all instances. Exposed as
GITHUB_COM_TOKENfor release-note retrieval. Without it, merge requests omit upstream changelogs.
Important
The group access tokens expire yearly. Rotate them before expiry — see How to operate Renovate.
Global config (config.js)¶
One ConfigMap per instance (renovate-config, renovate-config-helix) holds the admin-level configuration that must not live in a managed repository.
It sets platform, endpoint, the repositories list, onboarding: false, requireConfig: 'required', the git author, and allowedCommands.
allowedCommands is a security allowlist of regular expressions.
A postUpgradeTasks command runs only if it matches one of them.
Warning
Renovate executes postUpgradeTasks commands without a shell.
Wrap any command that uses cd or && in sh -c '...', and keep the allowedCommands regex in sync.
Per-repository config (renovate.json)¶
Each managed repository carries a renovate.json at its root.
It sets assignees (drives the notification email), labels, prConcurrentLimit, the custom manager, and the package rules.
Package rules and manifest regeneration¶
A CDK8S deployment must regenerate its committed manifests when a version changes.
One generic package rule per repository does this for every deployment, using
Renovate’s {{{packageFileDir}}} template and executionMode: update so the
build runs in the directory of whichever package file changed:
{
"matchFileNames": ["**"],
"postUpgradeTasks": {
"commands": ["sh -c 'cd {{{packageFileDir}}} && (test -f pnpm-lock.yaml && pnpm install --frozen-lockfile || npm ci) && npm run build'"],
"fileFilters": ["**/manifests/**", "**/package-lock.json", "**/pnpm-lock.yaml"],
"executionMode": "update"
}
}
The command auto-detects the package manager: pnpm install --frozen-lockfile
when a pnpm-lock.yaml is present, otherwise npm ci.
Important
The allowedCommands regex must match this command literally.
Renovate compiles the allowlist entries as regular expressions, so the shell
metacharacters (, ), and || are matched with . rather than
backslash-escaped — escaping does not survive the ConfigMap → config.js →
RegExp chain.
Deployments that need a specific rule¶
A more-specific rule after the generic one overrides it for these paths:
nextcloud is an npm workspace; a deployment-level
cdcannot build it. Its rule builds from the workspace root (cd internal/nextcloud && npm ci && npm run build).mailu and nextcloud currently set
postUpgradeTasks: {"commands": []}(disabled). mailu depends on the unpublishedcdk8s-mailuthrough aworkspace:*link togeneric-charts/, which adp-infra-only checkout cannot resolve; nextcloud carries pre-existing manifest drift that must be reviewed before its first regenerated merge request. Their merge requests are review-only until these are resolved — rebuild manually in the meta-repo workspace before merging.strimzi and pages (
helix-infra-charts) vendor their operator CRDs, because Helm never upgrades a chart’scrds/directory. Their rules run the component’sscripts/update-crds.shbefore the build; pages additionally runsnpm run import, because itscdk8s.yamlreferences the versioned CRD file.
helix repositories¶
helix-infra-charts follows the same layout as dp-infra: one CDK8S component per directory, pinned versions annotated in config.yaml.
Its renovate.json excludes monitoring/** (helix-stage, GitOps-frozen) and staging-secrets/** through ignorePaths.
helix-argocd contains no version pins — its ArgoCD applications point at helix-infra-charts paths without revisions.
Renovate manages only the npm toolchain there and targets the deployed production branch through baseBranches; the config lives on the default branch main and identically on production.
Build prerequisites for a managed deployment¶
The postUpgradeTasks build runs in a clean container checkout, so the deployment must build hermetically:
Commit the generated
imports/directory. Most deployments gitignore it; a managed deployment must track it, ortscfails on the missing types.Declare
cdk8s-clias a dependency. Without it,cdk8s synthfails withcdk8s: not foundundernpm ci.Commit the lockfile (
package-lock.jsonorpnpm-lock.yaml).
Rate limiting¶
prConcurrentLimit caps the number of open merge requests per repository.
Updates beyond the cap are listed under Rate-Limited in the repository’s Dependency Dashboard issue and are created as slots free up.
Comment-annotation manager¶
Pinned versions in a
config.yamlare updated through a comment placed directly above the version line:The annotation fields are:
datasourceRequired.
dockerorhelm.registryUrlOptional. The chart repository URL for
helm.depNameRequired. The image or chart name Renovate looks up upstream.
versioningOptional. A non-default versioning scheme.
Only lines carrying a
# renovate:comment are matched. An unannotatedconfig.yamlproduces no custom-manager updates.