diff --git a/config.js b/config.js index 9c439ca..5d88be0 100644 --- a/config.js +++ b/config.js @@ -6,4 +6,126 @@ module.exports = { "autodiscover": true, "GITHUB_COM_TOKEN": "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", "optimizeForDisabled": true, + "extends": [ + "config:recommended", + "schedule:earlyMondays" + ], + "timezone": "America/Mexico_City", + "assignees": ["manuelcortez"], + "reviewers": ["manuelcortez"], + "labels": ["renovate", "dependencies"], + + // Control de concurrencia + "prConcurrentLimit": 10, + "branchConcurrentLimit": 8, + "packageRules": [ + { + "description": "Flutter y Dart - agrupar updates menores", + "matchManagers": ["pub"], + "groupName": "Flutter dependencies", + "separateMinorPatch": false, + "schedule": ["before 6am on monday"] + }, + { + "description": "Python requirements - agrupar patches", + "matchManagers": ["pip_requirements", "pipenv", "poetry"], + "matchUpdateTypes": ["patch"], + "groupName": "Python patches", + "automerge": true + }, + { + "description": "Python minor/major - separados", + "matchManagers": ["pip_requirements", "pipenv", "poetry"], + "matchUpdateTypes": ["minor", "major"], + "separateMajorMinor": true, + "excludePackageNames": ["django", "flask"] + }, + { + "description": "Django - major updates con cuidado especial", + "matchPackageNames": ["django"], + "major": { + "automerge": false, + "labels": ["breaking-change", "django-major"] + }, + "minor": { + "automerge": false + } + }, + { + "description": "JavaScript dev dependencies", + "matchManagers": ["npm", "yarn"], + "matchDepTypes": ["devDependencies"], + "groupName": "JS dev dependencies", + "automerge": true, + "matchUpdateTypes": ["patch", "minor"] + }, + { + "description": "Docker images - weekly updates", + "matchManagers": ["docker-compose", "dockerfile"], + "schedule": ["before 6am on monday"], + "groupName": "Docker images" + }, + { + "description": "Major updates - requieren review manual", + "matchUpdateTypes": ["major"], + "automerge": false, + "labels": ["major-update", "breaking-change"], + "prBody": "🚨 **MAJOR VERSION UPDATE** 🚨\n\nEste PR actualiza {{depName}} de `{{currentVersion}}` a `{{newVersion}}`.\n\n⚠️ **POSIBLES BREAKING CHANGES** - Revisa:\n- [Changelog de {{depName}}]({{sourceUrl}}/releases)\n- [Documentación de migración]({{sourceUrl}})\n- Tests antes de hacer merge\n\n---\n⚡ Generado por Renovate Bot", + "addLabels": ["needs-manual-review"] + }, + { + "description": "Security updates - high priority", + "matchPackagePatterns": ["*"], + "vulnerabilityAlerts": { + "enabled": true + }, + "labels": ["security", "renovate"], + "automerge": false + } + ], + + // Configuración de automerge + "automerge": true, + "platformAutomerge": true, + "automergeType": "pr", + "automergeStrategy": "squash", + + // Configuración de automerge por tipo de update + "major": { + "automerge": false, + "labels": ["major-update", "breaking-change"], + "prPriority": 10 // Alta prioridad para review manual + }, + "minor": { + "automerge": false, + "labels": ["minor-update"] + }, + "patch": { + "automerge": true, + "labels": ["patch-update"] + }, + + // Configuración de commits y PRs + "semanticCommits": "enabled", + "commitMessagePrefix": "chore(deps):", + "prTitle": "{{#if isPinDigest}}📌 Pin {{depName}} digest{{else}}{{#if isMajor}}🚨 MAJOR: {{else}}{{#if isMinor}}📈 MINOR: {{else}}🔧 PATCH: {{/if}}{{/if}}{{#if groupName}}{{{groupName}}}{{else}}{{depName}}{{/if}}{{#unless groupName}} to {{#if isSingleVersion}}v{{{newVersion}}}{{else}}{{{newValue}}}{{/if}}{{/unless}}{{/if}}", + + // Mantenimiento de lockfiles + "lockFileMaintenance": { + "enabled": true, + "schedule": ["before 3am on the first day of the month"] + }, + + // Configuración de rebase y conflictos + "rebaseWhen": "conflicted", + "ignoreTests": false, + + // Configuración de logs y notificaciones + "suppressNotifications": ["prIgnoreNotification"], + "gitIgnoredAuthors": ["renovate[bot]"], + "includeForks": false, + + // Limitar a repos que tengan renovate.json + "onboarding": false, + "requireConfig": "optional" }; \ No newline at end of file