Saltar al contenido principal

Renovate Runner

Plataforma empresarial para distribuir y crear configuraciones personalizadas de Renovate a escala.

Repositorio: https://gitlab.wiedii.co/wildcat/renovate-runner
Versión: 6.5.0
Imagen base: renovate/renovate:43.209.1@sha256:1ac704319b8aa45a412c35d287b7ca1afeabf3d25f042eb22e4c267faf86decc


¿Qué es?

Renovate Runner cumple dos propósitos simultáneos:

  1. Preset compartido (.gitlab/renovate.json): fuente de verdad de las reglas de actualización de dependencias para todos los repositorios de Wiedii.
  2. Runner Dockerizado: imagen de contenedor que ejecuta Renovate con configuración empresarial, caché en S3 y soporte para gestores propietarios.

Preset compartido — Cómo consumirlo

Cualquier repositorio de Wiedii debe extender el preset compartido en su renovate.json raíz:

{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["local>wildcat/renovate-runner//.gitlab/renovate.json"]
}

¿Qué significa local>?

Le indica a Renovate que cargue el preset desde un repositorio en la misma plataforma Git (GitLab). El formato es:

local><namespace>/<proyecto>//<ruta>

Para Wiedii, el preset vive en:

  • Repositorio: wildcat/renovate-runner
  • Ruta del archivo: /.gitlab/renovate.json

Requisito: Renovate debe tener acceso de lectura al repositorio wildcat/renovate-runner.

📄 Documentación interna completa del preset:
https://gitlab.wiedii.co/wildcat/renovate-runner/-/blob/main/docs/renovate-runner-configs.md


¿Qué incluye el preset compartido?

Gestores personalizados (customManagers)

El preset detecta y actualiza automáticamente versiones de herramientas que los managers estándar de Renovate no cubren:

HerramientaArchivos detectadosFuente
Bunpackage.json, renovate.jsonGitHub Releases (oven-sh/bun)
pnpmpackage.json, renovate.jsonnpm
yarnpackage.json, renovate.jsonnpm
npmpackage.json, renovate.jsonnpm
Node.jspackage.json, renovate.jsonnode datasource
PHPcomposer.json, renovate.jsonGitHub Tags
Pythonrenovate.jsonDocker
uvrenovate.jsonGitHub Releases (astral-sh/uv)
Terraformrenovate.json, root.hcl, *.tfGitHub Releases
Terragruntrenovate.json, root.hclGitHub Releases
TFLintrenovate.jsonGitHub Releases
Checkovroot.hclPyPI
Imagen Renovate*.md, .cursorrulesDocker (con digest)
Bun/Node en docs*.mdGitHub Releases / node

Políticas de seguridad

  • rangeStrategy: "pin" — todas las dependencias se pinnean a versiones exactas.
  • minimumReleaseAge: "3 days" — espera 3 días antes de actualizar (evita paquetes maliciosos recién publicados).
  • pinDigests: true para imágenes Docker.
  • rollbackPrs: true — crea PRs de rollback si una versión es inestable.
  • Integra OpenSSF Scorecard y npm minimum release age vía presets de seguridad.
  • config:best-practices como base.

Agrupaciones de actualizaciones

Las actualizaciones se agrupan en ramas únicas para reducir el ruido:

GrupoIncluye
Terraform and TerragruntTerraform, Terragrunt (source URLs + aqua en mise)
Bun Version Updateoven-sh/bun
Pnpm / Yarn / NPMGestores de paquetes JS
Go runtime/toolingImágenes golang, mise go/golang
Uv Version Updateastral-sh/uv
Lefthook / Hadolint / Shfmt / ShellcheckHerramientas de dev
Terraform Module UpdatesMódulos Terraform
Wiedii Registry UpdatePaquetes @wiedii-registry/*
Checkov Version Updatecheckov (uvx)
wiediiregistry-phpImagen custom PHP de Wiedii

Otras configuraciones notables

  • dependencyDashboard: true — dashboard de Renovate activo en GitLab.
  • baseBranchPatterns: ["develop"] — rama base es develop.
  • semanticCommits: "enabled" con scope workspace.
  • configMigration: true — migra automáticamente configs obsoletas.
  • postUpdateOptions: deduplicación de yarn, pnpm, npm; inflación de Helm; etc.
  • ignorePresets: monorepo:terraform, group:terraformMonorepo (se usan reglas propias).
  • Paths ignorados: .terragrunt-cache/, node_modules/, mise.toml.original*.

Sobrerides en repositorios consumidores

Los repositorios pueden añadir reglas sin romper el preset compartido:

{
"extends": ["local>wildcat/renovate-runner//.gitlab/renovate.json"],
"packageRules": [
{ "enabled": false, "matchPackageNames": ["terraform-aws-modules/vpc/aws"] }
]
}

El preset compartido es la fuente de verdad para reglas empresariales. Solo se añaden overrides locales cuando el proyecto tiene necesidades específicas.


Arquitectura del runner Docker

Dockerfile
├── Base: renovate/renovate:43.209.1@sha256:1ac704319b8aa45a412c35d287b7ca1afeabf3d25f042eb22e4c267faf86decc@sha256:3de1665...
├── Instala: mise (versión pinneada vía ARG)
├── Variables ENV:
│ ├── RENOVATE_REPOSITORY_CACHE=enabled
│ ├── RENOVATE_REPOSITORY_CACHE_TYPE=s3://$AWS_S3_BUCKET/renovate-bot/cache/
│ ├── RENOVATE_REPORT_TYPE=s3
│ └── RENOVATE_REPORT_PATH=s3://$AWS_S3_BUCKET/renovate-bot/logs/report.json
└── Entrypoint: etc/renovate-entrypoint.sh (wraps original)

Variables de entorno requeridas

VariableDescripción
AWS_REGIONRegión AWS (ej: us-east-2)
AWS_S3_BUCKETBucket S3 para caché y reportes
RENOVATE_TOKENToken GitLab para Renovate
RENOVATE_ENDPOINThttps://gitlab.wiedii.co/api/v4/
RENOVATE_GIT_AUTHOR"Renovate Bot <renovate@wiedii.co>"
GITLAB_TOKENToken GitLab para operaciones Git

Caché S3

  • Caché: s3://bucket/renovate-bot/cache/
  • Reportes: s3://bucket/renovate-bot/logs/report.json

Comandos frecuentes

# Clonar el repositorio
git clone https://gitlab.wiedii.co/wildcat/renovate-runner.git
cd renovate-runner

# Instalar herramientas y dependencias
mise install && bun install && bun run prepare

# Validar configuración de Renovate (obligatorio antes de merge)
bun run renovate:validate
# Equivalente explícito:
mise exec -- bunx --yes --package renovate@latest -- renovate-config-validator --strict

# Construir imagen Docker
DOCKER_BUILDKIT=1 docker build -t renovate-runner:local .

# Ejecutar contenedor localmente
docker run --rm \
-e RENOVATE_TOKEN=*** \
-e RENOVATE_ENDPOINT=https://gitlab.wiedii.co/api/v4/ \
-e AWS_REGION=us-east-2 \
-e AWS_S3_BUCKET=your-s3-bucket \
renovate-runner:local

Seguridad

  • git-crypt: archivos sensibles (.env, claves privadas) cifrados en el repositorio.
  • Imagen pinneada por digest: supply chain segura, builds reproducibles.
  • Usuario no-root (ubuntu) en runtime.
  • Secrets via environment variables: nunca en el código.
  • S3 con políticas de acceso restringidas para caché y reportes.

Workflow de desarrollo

  • Rama base: develop
  • Naming de ramas: feature/TK283545-<slug>, hotfix/<slug>, release/<version>
  • Commits: Conventional Commits via bun run commit (czg)
  • Git hooks: Lefthook — valida configuración Renovate, linting Dockerfile/Bash, format
  • Merge Request: Plantilla default en .gitlab/merge_request_templates/default.md

Definition of Done

  • bun run renovate:validate pasa sin errores
  • Imagen construye y corre localmente
  • Sin secrets en los cambios

Estructura del proyecto

renovate-runner/
├── .gitlab/renovate.json ← Preset compartido (FUENTE DE VERDAD)
├── renovate.json ← Wrapper local (extiende el preset)
├── Dockerfile ← Imagen del runner
├── etc/
│ ├── renovate-entrypoint.sh ← Entrypoint custom del contenedor
│ └── install-tools.sh ← Herramientas post-upgrade
├── scripts/
│ └── env-to-dockerfile.sh ← Exporta .env a variables runtime
├── docs/
│ └── renovate-runner-configs.md ← Documentación de configs
├── lefthook.yml ← Git hooks
├── mise.toml ← Toolchain pinneado
└── package.json ← Scripts (Bun)

Troubleshooting

Bun no instala: curl -fsSL https://bun.sh/install | bash

Git hooks no funcionan: mise exec -- lefthook install

Build Docker falla:

docker system prune -a
docker build --no-cache -t renovate-runner .

Permisos S3 faltantes → errores de caché/reporte. Verificar políticas IAM del bucket.

Digest no pinneado → builds no reproducibles. Siempre usar imagen con @sha256:....

Post-upgrade commands no permitidos → Renovate los bloquea. Verificar RENOVATE_ALLOWED_POST_UPGRADE_COMMANDS.


Referencias