renovate 44.39.3 → 44.40.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/config/migration.js.map +1 -1
  2. package/dist/config/migrations/custom/host-rules-migration.js +9 -7
  3. package/dist/config/migrations/custom/host-rules-migration.js.map +1 -1
  4. package/dist/config/options/index.js +1 -1
  5. package/dist/config/options/index.js.map +1 -1
  6. package/dist/config/validation.js +421 -411
  7. package/dist/config/validation.js.map +1 -1
  8. package/dist/data/mise-registry.js +18 -14
  9. package/dist/global-config-option-defaults.generated.js +1 -1
  10. package/dist/global-config-option-defaults.generated.js.map +1 -1
  11. package/dist/logger/utils.js +9 -6
  12. package/dist/logger/utils.js.map +1 -1
  13. package/dist/modules/datasource/docker/index.js +13 -12
  14. package/dist/modules/datasource/docker/index.js.map +1 -1
  15. package/dist/modules/datasource/docker/schema.js +10 -8
  16. package/dist/modules/datasource/docker/schema.js.map +1 -1
  17. package/dist/modules/datasource/index.js +5 -3
  18. package/dist/modules/datasource/index.js.map +1 -1
  19. package/dist/modules/datasource/maven/util.js +4 -2
  20. package/dist/modules/datasource/maven/util.js.map +1 -1
  21. package/dist/modules/datasource/npm/npmrc.js +7 -5
  22. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  23. package/dist/modules/manager/azure-pipelines/extract.js +10 -8
  24. package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
  25. package/dist/modules/manager/bazel/rules/go.js +4 -2
  26. package/dist/modules/manager/bazel/rules/go.js.map +1 -1
  27. package/dist/modules/manager/bundler/extract.js.map +1 -1
  28. package/dist/modules/manager/cake/index.js +4 -2
  29. package/dist/modules/manager/cake/index.js.map +1 -1
  30. package/dist/modules/manager/cargo/extract.js.map +1 -1
  31. package/dist/modules/manager/cocoapods/extract.js +11 -10
  32. package/dist/modules/manager/cocoapods/extract.js.map +1 -1
  33. package/dist/modules/manager/composer/utils.js +8 -5
  34. package/dist/modules/manager/composer/utils.js.map +1 -1
  35. package/dist/modules/manager/deps-edn/extract.js.map +1 -1
  36. package/dist/modules/manager/deps-edn/parser.js +18 -15
  37. package/dist/modules/manager/deps-edn/parser.js.map +1 -1
  38. package/dist/modules/manager/devbox/artifacts.js +10 -9
  39. package/dist/modules/manager/devbox/artifacts.js.map +1 -1
  40. package/dist/modules/manager/dockerfile/extract.js +25 -21
  41. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  42. package/dist/modules/manager/gomod/artifacts.js +10 -7
  43. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  44. package/dist/modules/manager/gomod/update.js +32 -26
  45. package/dist/modules/manager/gomod/update.js.map +1 -1
  46. package/dist/modules/manager/gradle/extract.js +8 -4
  47. package/dist/modules/manager/gradle/extract.js.map +1 -1
  48. package/dist/modules/manager/leiningen/extract.js.map +1 -1
  49. package/dist/modules/manager/npm/extract/index.js +42 -39
  50. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  51. package/dist/modules/manager/npm/extract/post/locked-versions.js +9 -7
  52. package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
  53. package/dist/modules/manager/npm/npmrc.js +16 -14
  54. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  55. package/dist/modules/manager/npm/post-update/yarn.js +6 -4
  56. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  57. package/dist/modules/manager/npm/update/dependency/pnpm.js +4 -3
  58. package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
  59. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js +20 -18
  60. package/dist/modules/manager/npm/update/locked-dependency/package-lock/index.js.map +1 -1
  61. package/dist/modules/manager/nuget/extract.js +4 -2
  62. package/dist/modules/manager/nuget/extract.js.map +1 -1
  63. package/dist/modules/manager/nuget/util.js +17 -15
  64. package/dist/modules/manager/nuget/util.js.map +1 -1
  65. package/dist/modules/manager/pep621/utils.js +4 -2
  66. package/dist/modules/manager/pep621/utils.js.map +1 -1
  67. package/dist/modules/manager/pipenv/extract.js +9 -8
  68. package/dist/modules/manager/pipenv/extract.js.map +1 -1
  69. package/dist/modules/manager/poetry/schema.js +4 -2
  70. package/dist/modules/manager/poetry/schema.js.map +1 -1
  71. package/dist/modules/manager/sbt/extract.js +5 -3
  72. package/dist/modules/manager/sbt/extract.js.map +1 -1
  73. package/dist/modules/manager/terraform/extractors/resources/helm-release.js +4 -2
  74. package/dist/modules/manager/terraform/extractors/resources/helm-release.js.map +1 -1
  75. package/dist/modules/manager/terragrunt/modules.js +6 -5
  76. package/dist/modules/manager/terragrunt/modules.js.map +1 -1
  77. package/dist/modules/manager/tflint-plugin/plugins.js.map +1 -1
  78. package/dist/modules/manager/travis/extract.js.map +1 -1
  79. package/dist/modules/platform/bitbucket-server/index.js +26 -24
  80. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  81. package/dist/modules/platform/comment.js.map +1 -1
  82. package/dist/modules/platform/forgejo/index.js +15 -13
  83. package/dist/modules/platform/forgejo/index.js.map +1 -1
  84. package/dist/modules/platform/gitea/index.js +15 -13
  85. package/dist/modules/platform/gitea/index.js.map +1 -1
  86. package/dist/modules/platform/github/index.js +10 -8
  87. package/dist/modules/platform/github/index.js.map +1 -1
  88. package/dist/modules/versioning/conan/range.js.map +1 -1
  89. package/dist/modules/versioning/gradle/compare.js +6 -5
  90. package/dist/modules/versioning/gradle/compare.js.map +1 -1
  91. package/dist/modules/versioning/maven/compare.js +30 -27
  92. package/dist/modules/versioning/maven/compare.js.map +1 -1
  93. package/dist/util/check-token.js +4 -2
  94. package/dist/util/check-token.js.map +1 -1
  95. package/dist/util/exec/containerbase.js +11 -9
  96. package/dist/util/exec/containerbase.js.map +1 -1
  97. package/dist/util/exec/docker/index.js +15 -12
  98. package/dist/util/exec/docker/index.js.map +1 -1
  99. package/dist/util/exec/index.js +4 -2
  100. package/dist/util/exec/index.js.map +1 -1
  101. package/dist/util/http/auth.js +8 -6
  102. package/dist/util/http/auth.js.map +1 -1
  103. package/dist/util/schema-utils/index.js +9 -8
  104. package/dist/util/schema-utils/index.js.map +1 -1
  105. package/dist/util/string.js +17 -15
  106. package/dist/util/string.js.map +1 -1
  107. package/dist/util/unicode.js +10 -8
  108. package/dist/util/unicode.js.map +1 -1
  109. package/dist/workers/global/config/parse/cli.js.map +1 -1
  110. package/dist/workers/global/config/parse/env.js.map +1 -1
  111. package/dist/workers/repository/config-migration/branch/index.js +4 -2
  112. package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
  113. package/dist/workers/repository/finalize/prune.js +36 -35
  114. package/dist/workers/repository/finalize/prune.js.map +1 -1
  115. package/dist/workers/repository/process/lookup/index.js +4 -2
  116. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  117. package/dist/workers/repository/update/branch/auto-replace.js +7 -5
  118. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  119. package/dist/workers/repository/update/branch/bump-versions.js +9 -8
  120. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
  121. package/dist/workers/repository/update/branch/get-updated.js +38 -37
  122. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  123. package/dist/workers/repository/update/branch/handle-existing.js +12 -8
  124. package/dist/workers/repository/update/branch/handle-existing.js.map +1 -1
  125. package/dist/workers/repository/update/branch/index.js +48 -39
  126. package/dist/workers/repository/update/branch/index.js.map +1 -1
  127. package/dist/workers/repository/update/pr/body/updates-table.js +4 -2
  128. package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
  129. package/dist/workers/repository/update/pr/index.js +6 -4
  130. package/dist/workers/repository/update/pr/index.js.map +1 -1
  131. package/dist/workers/repository/update/pr/participants.js +12 -8
  132. package/dist/workers/repository/update/pr/participants.js.map +1 -1
  133. package/dist/workers/repository/updates/branch-name.js +19 -15
  134. package/dist/workers/repository/updates/branch-name.js.map +1 -1
  135. package/dist/workers/repository/updates/generate.js +6 -4
  136. package/dist/workers/repository/updates/generate.js.map +1 -1
  137. package/package.json +3 -3
  138. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","names":[],"sources":["../../lib/config/migration.ts"],"sourcesContent":["import {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger/index.ts';\nimport { clone } from '../util/clone.ts';\nimport { regEx } from '../util/regex.ts';\nimport { MigrationsService } from './migrations/index.ts';\nimport { getOptions } from './options/index.ts';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types.ts';\nimport { mergeChildConfig } from './utils.ts';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(regEx(/\\.in$/), '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(regEx(/\\.in\\/$/), '.txt/');\n }\n return pattern.replace(regEx(/\\.in\\$\\/$/), '.txt$/');\n });\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig.matchManagers) &&\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.includes('gradle-lite')\n ) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"migration.js","names":[],"sources":["../../lib/config/migration.ts"],"sourcesContent":["import {\n isArray,\n isBoolean,\n isNonEmptyArray,\n isNonEmptyObject,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger/index.ts';\nimport { clone } from '../util/clone.ts';\nimport { regEx } from '../util/regex.ts';\nimport { MigrationsService } from './migrations/index.ts';\nimport { getOptions } from './options/index.ts';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types.ts';\nimport { mergeChildConfig } from './utils.ts';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (isString(val) && val.includes('{{baseDir}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (isString(val) && val.includes('{{lookupName}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (isString(val) && val.includes('{{depNameShort}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (isString(val) && val.startsWith('{{semanticPrefix}}')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && isBoolean(val)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = true;\n } else if (val === 'false') {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n isArray(val) &&\n val.length === 1\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = String(val[0]);\n } else if (isArray(val)) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (isArray(migratedConfig?.[key])) {\n const newArray = [];\n // @ts-expect-error -- TODO: fix me\n for (const item of migratedConfig[key]) {\n if (isObject(item) && !isArray(item)) {\n const arrMigrate = migrateConfig(item);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = newArray;\n }\n } else if (isObject(val)) {\n const subMigrate = migrateConfig(\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n // @ts-expect-error -- TODO: fix me\n if (isString(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n // @ts-expect-error -- TODO: fix me\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (isNonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n // @ts-expect-error -- TODO: fix me\n if (isArray(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n // @ts-expect-error -- TODO: fix me\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n // @ts-expect-error -- TODO: fix me\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyObject(migratedConfig['pip-compile']) &&\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig['pip-compile'].managerFilePatterns)\n ) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig['pip-compile'].managerFilePatterns = migratedConfig[\n 'pip-compile'\n ].managerFilePatterns.map((filePattern) => {\n const pattern = filePattern as string;\n if (pattern.endsWith('.in')) {\n return pattern.replace(regEx(/\\.in$/), '.txt');\n }\n if (pattern.endsWith('.in/')) {\n return pattern.replace(regEx(/\\.in\\/$/), '.txt/');\n }\n return pattern.replace(regEx(/\\.in\\$\\/$/), '.txt$/');\n });\n }\n if (\n // @ts-expect-error -- TODO: fix me\n isNonEmptyArray(migratedConfig.matchManagers) &&\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.includes('gradle-lite')\n ) {\n // @ts-expect-error -- TODO: fix me\n // v8 ignore else -- TODO: add test #40625\n if (!migratedConfig.matchManagers.includes('gradle')) {\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers.push('gradle');\n }\n // @ts-expect-error -- TODO: fix me\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n // @ts-expect-error -- TODO: fix me\n (manager) => manager !== 'gradle-lite',\n );\n }\n // @ts-expect-error -- TODO: fix me\n if (isNonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n // @ts-expect-error -- TODO: fix me\n migratedConfig['gradle-lite'],\n );\n }\n // @ts-expect-error -- TODO: fix me\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"],"mappings":"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"}
@@ -50,13 +50,15 @@ function validateHostRule(rule) {
50
50
  endpoint,
51
51
  host
52
52
  });
53
- if (Object.keys(hosts).length > 1) if (new Set(Object.values(hosts)).size > 1) {
54
- const error = new Error(CONFIG_VALIDATION);
55
- error.validationSource = "config";
56
- error.validationMessage = "`hostRules` cannot contain more than one host-matching field - use `matchHost` only.";
57
- error.validationError = "The renovate configuration file contains some invalid settings";
58
- throw error;
59
- } else logger.warn({ hosts }, "Duplicate host values found, please only use `matchHost` to specify the host");
53
+ if (Object.keys(hosts).length > 1) {
54
+ if (new Set(Object.values(hosts)).size > 1) {
55
+ const error = new Error(CONFIG_VALIDATION);
56
+ error.validationSource = "config";
57
+ error.validationMessage = "`hostRules` cannot contain more than one host-matching field - use `matchHost` only.";
58
+ error.validationError = "The renovate configuration file contains some invalid settings";
59
+ throw error;
60
+ } else logger.warn({ hosts }, "Duplicate host values found, please only use `matchHost` to specify the host");
61
+ }
60
62
  }
61
63
  function removeUndefinedFields(obj) {
62
64
  const result = {};
@@ -1 +1 @@
1
- {"version":3,"file":"host-rules-migration.js","names":[],"sources":["../../../../lib/config/migrations/custom/host-rules-migration.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { HostRule } from '../../../types/index.ts';\nimport type { LegacyHostRule } from '../../../util/host-rules.ts';\nimport { massageHostUrl } from '../../../util/url.ts';\nimport { AbstractMigration } from '../base/abstract-migration.ts';\nimport { migrateDatasource } from './datasource-migration.ts';\n\nexport class HostRulesMigration extends AbstractMigration {\n override readonly propertyName = 'hostRules';\n\n override run(value: (LegacyHostRule & HostRule)[]): void {\n const newHostRules: HostRule[] = [];\n for (const hostRule of value) {\n validateHostRule(hostRule);\n const newRule: any = {};\n\n for (const [key, value] of Object.entries(hostRule)) {\n if (key === 'platform') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= value;\n }\n continue;\n }\n\n if (key === 'matchHost') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n if (key === 'hostType') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= migrateDatasource(value);\n }\n continue;\n }\n\n if (\n key === 'endpoint' ||\n key === 'host' ||\n key === 'baseUrl' ||\n key === 'hostName' ||\n key === 'domainName'\n ) {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n newRule[key] = value;\n }\n\n newHostRules.push(newRule);\n }\n\n this.rewrite(newHostRules);\n }\n}\n\nfunction validateHostRule(rule: LegacyHostRule & HostRule): void {\n const { matchHost, hostName, domainName, baseUrl, endpoint, host } = rule;\n const hosts: Record<string, string> = removeUndefinedFields({\n matchHost,\n hostName,\n domainName,\n baseUrl,\n endpoint,\n host,\n });\n\n if (Object.keys(hosts).length > 1) {\n const distinctHostValues = new Set(Object.values(hosts));\n // check if the host values are duplicated\n if (distinctHostValues.size > 1) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationMessage =\n '`hostRules` cannot contain more than one host-matching field - use `matchHost` only.';\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n throw error;\n } else {\n logger.warn(\n { hosts },\n 'Duplicate host values found, please only use `matchHost` to specify the host',\n );\n }\n }\n}\n\nfunction removeUndefinedFields(\n obj: Record<string, any>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const key of Object.keys(obj)) {\n if (isString(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;AASA,IAAa,qBAAb,cAAwC,kBAAkB;CACxD,eAAiC;CAEjC,IAAa,OAA4C;EACvD,MAAM,eAA2B,CAAC;EAClC,KAAK,MAAM,YAAY,OAAO;GAC5B,iBAAiB,QAAQ;GACzB,MAAM,UAAe,CAAC;GAEtB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;IACnD,IAAI,QAAQ,YAAY;;KAEtB,IAAI,SAAS,KAAK,GAChB,QAAQ,aAAa;KAEvB;IACF;IAEA,IAAI,QAAQ,aAAa;;KAEvB,IAAI,SAAS,KAAK,GAChB,QAAQ,cAAc,eAAe,KAAK;KAE5C;IACF;IAEA,IAAI,QAAQ,YAAY;;KAEtB,IAAI,SAAS,KAAK,GAChB,QAAQ,aAAa,kBAAkB,KAAK;KAE9C;IACF;IAEA,IACE,QAAQ,cACR,QAAQ,UACR,QAAQ,aACR,QAAQ,cACR,QAAQ,cACR;;KAEA,IAAI,SAAS,KAAK,GAChB,QAAQ,cAAc,eAAe,KAAK;KAE5C;IACF;IAEA,QAAQ,OAAO;GACjB;GAEA,aAAa,KAAK,OAAO;EAC3B;EAEA,KAAK,QAAQ,YAAY;CAC3B;AACF;AAEA,SAAS,iBAAiB,MAAuC;CAC/D,MAAM,EAAE,WAAW,UAAU,YAAY,SAAS,UAAU,SAAS;CACrE,MAAM,QAAgC,sBAAsB;EAC1D;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,GAG9B,IAAI,IAF2B,IAAI,OAAO,OAAO,KAAK,CAEjC,CAAC,CAAC,OAAO,GAAG;EAC/B,MAAM,QAAQ,IAAI,MAAM,iBAAiB;EACzC,MAAM,mBAAmB;EACzB,MAAM,oBACJ;EACF,MAAM,kBACJ;EACF,MAAM;CACR,OACE,OAAO,KACL,EAAE,MAAM,GACR,8EACF;AAGN;AAEA,SAAS,sBACP,KACwB;CACxB,MAAM,SAAiC,CAAC;CACxC,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG,GAC/B,IAAI,SAAS,IAAI,IAAI,GACnB,OAAO,OAAO,IAAI;CAGtB,OAAO;AACT"}
1
+ {"version":3,"file":"host-rules-migration.js","names":[],"sources":["../../../../lib/config/migrations/custom/host-rules-migration.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { HostRule } from '../../../types/index.ts';\nimport type { LegacyHostRule } from '../../../util/host-rules.ts';\nimport { massageHostUrl } from '../../../util/url.ts';\nimport { AbstractMigration } from '../base/abstract-migration.ts';\nimport { migrateDatasource } from './datasource-migration.ts';\n\nexport class HostRulesMigration extends AbstractMigration {\n override readonly propertyName = 'hostRules';\n\n override run(value: (LegacyHostRule & HostRule)[]): void {\n const newHostRules: HostRule[] = [];\n for (const hostRule of value) {\n validateHostRule(hostRule);\n const newRule: any = {};\n\n for (const [key, value] of Object.entries(hostRule)) {\n if (key === 'platform') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= value;\n }\n continue;\n }\n\n if (key === 'matchHost') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n if (key === 'hostType') {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.hostType ??= migrateDatasource(value);\n }\n continue;\n }\n\n if (\n key === 'endpoint' ||\n key === 'host' ||\n key === 'baseUrl' ||\n key === 'hostName' ||\n key === 'domainName'\n ) {\n // v8 ignore else -- TODO: add test #40625\n if (isString(value)) {\n newRule.matchHost ??= massageHostUrl(value);\n }\n continue;\n }\n\n newRule[key] = value;\n }\n\n newHostRules.push(newRule);\n }\n\n this.rewrite(newHostRules);\n }\n}\n\nfunction validateHostRule(rule: LegacyHostRule & HostRule): void {\n const { matchHost, hostName, domainName, baseUrl, endpoint, host } = rule;\n const hosts: Record<string, string> = removeUndefinedFields({\n matchHost,\n hostName,\n domainName,\n baseUrl,\n endpoint,\n host,\n });\n\n if (Object.keys(hosts).length > 1) {\n const distinctHostValues = new Set(Object.values(hosts));\n // check if the host values are duplicated\n if (distinctHostValues.size > 1) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationMessage =\n '`hostRules` cannot contain more than one host-matching field - use `matchHost` only.';\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n throw error;\n } else {\n logger.warn(\n { hosts },\n 'Duplicate host values found, please only use `matchHost` to specify the host',\n );\n }\n }\n}\n\nfunction removeUndefinedFields(\n obj: Record<string, any>,\n): Record<string, string> {\n const result: Record<string, string> = {};\n for (const key of Object.keys(obj)) {\n if (isString(obj[key])) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;AASA,IAAa,qBAAb,cAAwC,kBAAkB;CACxD,eAAiC;CAEjC,IAAa,OAA4C;EACvD,MAAM,eAA2B,CAAC;EAClC,KAAK,MAAM,YAAY,OAAO;GAC5B,iBAAiB,QAAQ;GACzB,MAAM,UAAe,CAAC;GAEtB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;IACnD,IAAI,QAAQ,YAAY;;KAEtB,IAAI,SAAS,KAAK,GAChB,QAAQ,aAAa;KAEvB;IACF;IAEA,IAAI,QAAQ,aAAa;;KAEvB,IAAI,SAAS,KAAK,GAChB,QAAQ,cAAc,eAAe,KAAK;KAE5C;IACF;IAEA,IAAI,QAAQ,YAAY;;KAEtB,IAAI,SAAS,KAAK,GAChB,QAAQ,aAAa,kBAAkB,KAAK;KAE9C;IACF;IAEA,IACE,QAAQ,cACR,QAAQ,UACR,QAAQ,aACR,QAAQ,cACR,QAAQ,cACR;;KAEA,IAAI,SAAS,KAAK,GAChB,QAAQ,cAAc,eAAe,KAAK;KAE5C;IACF;IAEA,QAAQ,OAAO;GACjB;GAEA,aAAa,KAAK,OAAO;EAC3B;EAEA,KAAK,QAAQ,YAAY;CAC3B;AACF;AAEA,SAAS,iBAAiB,MAAuC;CAC/D,MAAM,EAAE,WAAW,UAAU,YAAY,SAAS,UAAU,SAAS;CACrE,MAAM,QAAgC,sBAAsB;EAC1D;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,GAAG;EAGjC,IAAI,IAF2B,IAAI,OAAO,OAAO,KAAK,CAEjC,CAAC,CAAC,OAAO,GAAG;GAC/B,MAAM,QAAQ,IAAI,MAAM,iBAAiB;GACzC,MAAM,mBAAmB;GACzB,MAAM,oBACJ;GACF,MAAM,kBACJ;GACF,MAAM;EACR,OACE,OAAO,KACL,EAAE,MAAM,GACR,8EACF;CAEJ;AACF;AAEA,SAAS,sBACP,KACwB;CACxB,MAAM,SAAiC,CAAC;CACxC,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG,GAC/B,IAAI,SAAS,IAAI,IAAI,GACnB,OAAO,OAAO,IAAI;CAGtB,OAAO;AACT"}
@@ -656,7 +656,7 @@ const options = [
656
656
  name: "dockerSidecarImage",
657
657
  description: "Change this value to override the default Renovate sidecar image.",
658
658
  type: "string",
659
- default: "ghcr.io/renovatebot/base-image:13.89.2",
659
+ default: "ghcr.io/renovatebot/base-image:13.89.3",
660
660
  globalOnly: true,
661
661
  deprecationMsg: "The usage of `binarySource=docker` is deprecated, and will be removed in the future"
662
662
  },