renovate 43.263.1 → 43.263.2

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 (253) hide show
  1. package/dist/config/app-strings.js +1 -1
  2. package/dist/config/app-strings.js.map +1 -1
  3. package/dist/config/decrypt/bcpgp.js +7 -4
  4. package/dist/config/decrypt/bcpgp.js.map +1 -1
  5. package/dist/config/migration.js +4 -6
  6. package/dist/config/migration.js.map +1 -1
  7. package/dist/config/options/index.js +1 -1
  8. package/dist/config/options/index.js.map +1 -1
  9. package/dist/config/validation-helpers/match-base-branches.js +4 -6
  10. package/dist/config/validation-helpers/match-base-branches.js.map +1 -1
  11. package/dist/config/validation-helpers/regex-glob-matchers.js +4 -6
  12. package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
  13. package/dist/config/validation-helpers/utils.js +2 -4
  14. package/dist/config/validation-helpers/utils.js.map +1 -1
  15. package/dist/config/validation.js +4 -6
  16. package/dist/config/validation.js.map +1 -1
  17. package/dist/config-validator.js +1 -3
  18. package/dist/config-validator.js.map +1 -1
  19. package/dist/global-config-option-defaults.generated.js +1 -1
  20. package/dist/global-config-option-defaults.generated.js.map +1 -1
  21. package/dist/modules/datasource/artifactory/index.js +6 -8
  22. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  23. package/dist/modules/datasource/aws-machine-image/index.js +1 -2
  24. package/dist/modules/datasource/aws-machine-image/index.js.map +1 -1
  25. package/dist/modules/datasource/azure-pipelines-tasks/index.js +2 -3
  26. package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
  27. package/dist/modules/datasource/conda/index.js +1 -3
  28. package/dist/modules/datasource/conda/index.js.map +1 -1
  29. package/dist/modules/datasource/dart-version/index.js +1 -2
  30. package/dist/modules/datasource/dart-version/index.js.map +1 -1
  31. package/dist/modules/datasource/datasource.js +1 -3
  32. package/dist/modules/datasource/datasource.js.map +1 -1
  33. package/dist/modules/datasource/devbox/index.js +1 -3
  34. package/dist/modules/datasource/devbox/index.js.map +1 -1
  35. package/dist/modules/datasource/docker/ecr.js +2 -1
  36. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  37. package/dist/modules/datasource/docker/index.js +1 -1
  38. package/dist/modules/datasource/docker/index.js.map +1 -1
  39. package/dist/modules/datasource/galaxy-collection/index.js +1 -1
  40. package/dist/modules/datasource/galaxy-collection/index.js.map +1 -1
  41. package/dist/modules/datasource/go/releases-goproxy.js +2 -2
  42. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  43. package/dist/modules/datasource/java-version/index.js +1 -3
  44. package/dist/modules/datasource/java-version/index.js.map +1 -1
  45. package/dist/modules/datasource/maven/util.js +2 -1
  46. package/dist/modules/datasource/maven/util.js.map +1 -1
  47. package/dist/modules/datasource/nuget/common.js +6 -4
  48. package/dist/modules/datasource/nuget/common.js.map +1 -1
  49. package/dist/modules/datasource/util.js +3 -2
  50. package/dist/modules/datasource/util.js.map +1 -1
  51. package/dist/modules/manager/azure-pipelines/extract.js +1 -1
  52. package/dist/modules/manager/azure-pipelines/extract.js.map +1 -1
  53. package/dist/modules/manager/bazel/extract.js +1 -3
  54. package/dist/modules/manager/bazel/extract.js.map +1 -1
  55. package/dist/modules/manager/bazel/parser.js +1 -1
  56. package/dist/modules/manager/bazel/parser.js.map +1 -1
  57. package/dist/modules/manager/buildpacks/extract.js +1 -1
  58. package/dist/modules/manager/buildpacks/extract.js.map +1 -1
  59. package/dist/modules/manager/bundler/common.js +23 -25
  60. package/dist/modules/manager/bundler/common.js.map +1 -1
  61. package/dist/modules/manager/bundler/extract.js +2 -6
  62. package/dist/modules/manager/bundler/extract.js.map +1 -1
  63. package/dist/modules/manager/cargo/extract.js +4 -6
  64. package/dist/modules/manager/cargo/extract.js.map +1 -1
  65. package/dist/modules/manager/dockerfile/extract.js +3 -3
  66. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  67. package/dist/modules/manager/fingerprint.generated.js +11 -11
  68. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  69. package/dist/modules/manager/flux/extract.js +2 -1
  70. package/dist/modules/manager/flux/extract.js.map +1 -1
  71. package/dist/modules/manager/github-actions/parse.js +1 -1
  72. package/dist/modules/manager/github-actions/parse.js.map +1 -1
  73. package/dist/modules/manager/gradle/extract/catalog.js +4 -3
  74. package/dist/modules/manager/gradle/extract/catalog.js.map +1 -1
  75. package/dist/modules/manager/gradle/extract.js +2 -2
  76. package/dist/modules/manager/gradle/extract.js.map +1 -1
  77. package/dist/modules/manager/gradle/parser/common.js +1 -1
  78. package/dist/modules/manager/gradle/parser/common.js.map +1 -1
  79. package/dist/modules/manager/gradle/parser/handlers.js +1 -1
  80. package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
  81. package/dist/modules/manager/helm-values/extract.js.map +1 -1
  82. package/dist/modules/manager/helmfile/extract.js +1 -1
  83. package/dist/modules/manager/helmfile/extract.js.map +1 -1
  84. package/dist/modules/manager/maven/extract.js.map +1 -1
  85. package/dist/modules/manager/maven/update.js +2 -1
  86. package/dist/modules/manager/maven/update.js.map +1 -1
  87. package/dist/modules/manager/mise/utils.js +5 -7
  88. package/dist/modules/manager/mise/utils.js.map +1 -1
  89. package/dist/modules/manager/npm/extract/common/overrides.js +1 -1
  90. package/dist/modules/manager/npm/extract/common/overrides.js.map +1 -1
  91. package/dist/modules/manager/npm/extract/yarn.js +1 -1
  92. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  93. package/dist/modules/manager/npm/npmrc.js +1 -3
  94. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  95. package/dist/modules/manager/npm/update/dependency/common.js +2 -3
  96. package/dist/modules/manager/npm/update/dependency/common.js.map +1 -1
  97. package/dist/modules/manager/npm/update/dependency/index.js +1 -1
  98. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  99. package/dist/modules/manager/npm/update/dependency/pnpm.js +1 -1
  100. package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
  101. package/dist/modules/manager/npm/update/dependency/yarn.js +1 -1
  102. package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
  103. package/dist/modules/manager/osgi/extract.js +1 -1
  104. package/dist/modules/manager/osgi/extract.js.map +1 -1
  105. package/dist/modules/manager/pep621/processors/uv.js +1 -1
  106. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  107. package/dist/modules/manager/pep621/schema.js.map +1 -1
  108. package/dist/modules/manager/pip_setup/extract.js +1 -1
  109. package/dist/modules/manager/pip_setup/extract.js.map +1 -1
  110. package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
  111. package/dist/modules/manager/poetry/schema.js +2 -2
  112. package/dist/modules/manager/poetry/schema.js.map +1 -1
  113. package/dist/modules/manager/pub/artifacts.js +4 -6
  114. package/dist/modules/manager/pub/artifacts.js.map +1 -1
  115. package/dist/modules/manager/pub/utils.js +2 -2
  116. package/dist/modules/manager/pub/utils.js.map +1 -1
  117. package/dist/modules/manager/puppet/common.js +4 -6
  118. package/dist/modules/manager/puppet/common.js.map +1 -1
  119. package/dist/modules/manager/sbt/extract.js +1 -1
  120. package/dist/modules/manager/sbt/extract.js.map +1 -1
  121. package/dist/modules/manager/sbt/util.js +4 -2
  122. package/dist/modules/manager/sbt/util.js.map +1 -1
  123. package/dist/modules/manager/terraform/lockfile/util.js +1 -1
  124. package/dist/modules/manager/terraform/lockfile/util.js.map +1 -1
  125. package/dist/modules/platform/azure/index.js +15 -19
  126. package/dist/modules/platform/azure/index.js.map +1 -1
  127. package/dist/modules/platform/azure/issue.js +4 -2
  128. package/dist/modules/platform/azure/issue.js.map +1 -1
  129. package/dist/modules/platform/bitbucket/index.js +1 -3
  130. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  131. package/dist/modules/platform/forgejo/index.js +5 -3
  132. package/dist/modules/platform/forgejo/index.js.map +1 -1
  133. package/dist/modules/platform/gerrit/scm.js +5 -7
  134. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  135. package/dist/modules/platform/gitea/index.js +5 -3
  136. package/dist/modules/platform/gitea/index.js.map +1 -1
  137. package/dist/modules/platform/github/index.js +5 -7
  138. package/dist/modules/platform/github/index.js.map +1 -1
  139. package/dist/modules/platform/github/pr.js +1 -1
  140. package/dist/modules/platform/github/pr.js.map +1 -1
  141. package/dist/modules/platform/github/schema.d.ts +4 -4
  142. package/dist/modules/platform/gitlab/index.js +2 -1
  143. package/dist/modules/platform/gitlab/index.js.map +1 -1
  144. package/dist/modules/platform/utils/pr-body.js +2 -1
  145. package/dist/modules/platform/utils/pr-body.js.map +1 -1
  146. package/dist/modules/versioning/apk/index.js +3 -3
  147. package/dist/modules/versioning/apk/index.js.map +1 -1
  148. package/dist/modules/versioning/composer/index.js +4 -7
  149. package/dist/modules/versioning/composer/index.js.map +1 -1
  150. package/dist/modules/versioning/conan/common.js +4 -6
  151. package/dist/modules/versioning/conan/common.js.map +1 -1
  152. package/dist/modules/versioning/conan/index.js +1 -3
  153. package/dist/modules/versioning/conan/index.js.map +1 -1
  154. package/dist/modules/versioning/conan/range.js +4 -5
  155. package/dist/modules/versioning/conan/range.js.map +1 -1
  156. package/dist/modules/versioning/conda/index.js +1 -1
  157. package/dist/modules/versioning/conda/index.js.map +1 -1
  158. package/dist/modules/versioning/gradle/index.js +7 -3
  159. package/dist/modules/versioning/gradle/index.js.map +1 -1
  160. package/dist/modules/versioning/hermit/index.js +2 -2
  161. package/dist/modules/versioning/hermit/index.js.map +1 -1
  162. package/dist/modules/versioning/ivy/index.js +1 -1
  163. package/dist/modules/versioning/ivy/index.js.map +1 -1
  164. package/dist/modules/versioning/maven/compare.js +4 -6
  165. package/dist/modules/versioning/maven/compare.js.map +1 -1
  166. package/dist/modules/versioning/npm/range.js +5 -7
  167. package/dist/modules/versioning/npm/range.js.map +1 -1
  168. package/dist/modules/versioning/nuget/version.js +6 -6
  169. package/dist/modules/versioning/nuget/version.js.map +1 -1
  170. package/dist/modules/versioning/pep440/index.js +1 -1
  171. package/dist/modules/versioning/pep440/index.js.map +1 -1
  172. package/dist/modules/versioning/pep440/range.js +2 -6
  173. package/dist/modules/versioning/pep440/range.js.map +1 -1
  174. package/dist/modules/versioning/poetry/index.js +1 -1
  175. package/dist/modules/versioning/poetry/index.js.map +1 -1
  176. package/dist/modules/versioning/pvp/index.js +2 -2
  177. package/dist/modules/versioning/pvp/index.js.map +1 -1
  178. package/dist/modules/versioning/rpm/index.js +4 -3
  179. package/dist/modules/versioning/rpm/index.js.map +1 -1
  180. package/dist/modules/versioning/ruby/range.js +2 -2
  181. package/dist/modules/versioning/ruby/range.js.map +1 -1
  182. package/dist/modules/versioning/ruby/strategies/bump.js +1 -1
  183. package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
  184. package/dist/modules/versioning/ruby/strategies/replace.js +13 -12
  185. package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
  186. package/dist/modules/versioning/ruby/version.js +1 -1
  187. package/dist/modules/versioning/ruby/version.js.map +1 -1
  188. package/dist/modules/versioning/rust-release-channel/index.js +1 -1
  189. package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
  190. package/dist/modules/versioning/rust-release-channel/util.js +4 -4
  191. package/dist/modules/versioning/rust-release-channel/util.js.map +1 -1
  192. package/dist/util/common.js +1 -3
  193. package/dist/util/common.js.map +1 -1
  194. package/dist/util/exec/common.js +4 -6
  195. package/dist/util/exec/common.js.map +1 -1
  196. package/dist/util/exec/containerbase.js +1 -3
  197. package/dist/util/exec/containerbase.js.map +1 -1
  198. package/dist/util/git/instrument.js +3 -3
  199. package/dist/util/git/instrument.js.map +1 -1
  200. package/dist/util/github/graphql/datasource-fetcher.js +5 -4
  201. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  202. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
  203. package/dist/util/http/github.js +3 -2
  204. package/dist/util/http/github.js.map +1 -1
  205. package/dist/util/http/http.d.ts +1 -1
  206. package/dist/util/http/http.js.map +1 -1
  207. package/dist/util/result.d.ts +8 -8
  208. package/dist/util/result.js +1 -1
  209. package/dist/util/result.js.map +1 -1
  210. package/dist/util/url.js +2 -2
  211. package/dist/util/url.js.map +1 -1
  212. package/dist/workers/global/config/parse/cli.js +18 -20
  213. package/dist/workers/global/config/parse/cli.js.map +1 -1
  214. package/dist/workers/global/config/parse/env.js +3 -5
  215. package/dist/workers/global/config/parse/env.js.map +1 -1
  216. package/dist/workers/repository/config-migration/branch/index.js +3 -5
  217. package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
  218. package/dist/workers/repository/init/merge.js +2 -3
  219. package/dist/workers/repository/init/merge.js.map +1 -1
  220. package/dist/workers/repository/onboarding/branch/check.js +7 -9
  221. package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
  222. package/dist/workers/repository/onboarding/branch/index.js +4 -8
  223. package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
  224. package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js +2 -2
  225. package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js.map +1 -1
  226. package/dist/workers/repository/process/extract-update.js.map +1 -1
  227. package/dist/workers/repository/process/fetch.js.map +1 -1
  228. package/dist/workers/repository/process/libyear.js +1 -3
  229. package/dist/workers/repository/process/libyear.js.map +1 -1
  230. package/dist/workers/repository/process/lookup/filter-checks.js +9 -11
  231. package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
  232. package/dist/workers/repository/process/lookup/index.js +5 -8
  233. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  234. package/dist/workers/repository/process/vulnerabilities.js +3 -3
  235. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  236. package/dist/workers/repository/reconfigure/index.js +3 -5
  237. package/dist/workers/repository/reconfigure/index.js.map +1 -1
  238. package/dist/workers/repository/update/branch/bump-versions.js +1 -1
  239. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
  240. package/dist/workers/repository/update/branch/get-updated.js +3 -5
  241. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  242. package/dist/workers/repository/update/pr/body/updates-table.js +1 -3
  243. package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
  244. package/dist/workers/repository/update/pr/changelog/common.js +1 -1
  245. package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
  246. package/dist/workers/repository/update/pr/index.js +6 -7
  247. package/dist/workers/repository/update/pr/index.js.map +1 -1
  248. package/dist/workers/repository/updates/flatten.js +1 -1
  249. package/dist/workers/repository/updates/flatten.js.map +1 -1
  250. package/dist/workers/repository/updates/generate.js +1 -1
  251. package/dist/workers/repository/updates/generate.js.map +1 -1
  252. package/package.json +2 -2
  253. package/renovate-schema.json +2 -2
@@ -11,11 +11,9 @@ import { isUndefined } from "@sindresorhus/is";
11
11
  async function checkConfigMigrationBranch(config, migratedConfigData) {
12
12
  logger.debug("checkConfigMigrationBranch()");
13
13
  const configMigrationCheckboxState = config.dependencyDashboardChecks?.configMigrationCheckboxState;
14
- if (!config.configMigration) {
15
- if (isUndefined(configMigrationCheckboxState) || configMigrationCheckboxState === "no-checkbox" || configMigrationCheckboxState === "unchecked") {
16
- logger.debug("Config migration needed but config migration is disabled and checkbox not checked or not present.");
17
- return { result: "no-migration-branch" };
18
- }
14
+ if (!config.configMigration && (isUndefined(configMigrationCheckboxState) || configMigrationCheckboxState === "no-checkbox" || configMigrationCheckboxState === "unchecked")) {
15
+ logger.debug("Config migration needed but config migration is disabled and checkbox not checked or not present.");
16
+ return { result: "no-migration-branch" };
19
17
  }
20
18
  const configMigrationBranch = getMigrationBranchName(config);
21
19
  const branchPr = await migrationPrExists(configMigrationBranch, config.baseBranch);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { FindPRConfig, Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport { createConfigMigrationBranch } from './create.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { rebaseMigrationBranch } from './rebase.ts';\n\nexport type CheckConfigMigrationBranchResult =\n | { result: 'no-migration-branch' }\n | {\n result: 'migration-branch-exists' | 'migration-branch-modified';\n migrationBranch: string;\n };\n\nexport async function checkConfigMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<CheckConfigMigrationBranchResult> {\n logger.debug('checkConfigMigrationBranch()');\n const configMigrationCheckboxState =\n config.dependencyDashboardChecks?.configMigrationCheckboxState;\n\n if (!config.configMigration) {\n if (\n isUndefined(configMigrationCheckboxState) ||\n configMigrationCheckboxState === 'no-checkbox' ||\n configMigrationCheckboxState === 'unchecked'\n ) {\n logger.debug(\n 'Config migration needed but config migration is disabled and checkbox not checked or not present.',\n );\n return { result: 'no-migration-branch' };\n }\n }\n\n const configMigrationBranch = getMigrationBranchName(config);\n\n const branchPr = await migrationPrExists(\n configMigrationBranch,\n config.baseBranch,\n ); // handles open/autoclosed PRs\n\n if (!branchPr) {\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n migratedConfigData.filename,\n );\n const prTitle = commitMessageFactory.getPrTitle();\n const closedPrConfig: FindPRConfig = {\n branchName: configMigrationBranch,\n prTitle,\n state: 'closed',\n targetBranch: config.baseBranch,\n };\n\n // handles closed PR\n const closedPr = await platform.findPr(closedPrConfig);\n\n // found closed migration PR\n if (closedPr) {\n logger.debug('Closed config migration PR found.');\n\n // if a closed pr exists and the checkbox for config migration is not checked\n // return no-migration-branch result so that the checkbox gets added again\n // we only want to create a config migration pr if the checkbox is checked\n if (configMigrationCheckboxState !== 'checked') {\n logger.debug(\n 'Config migration is enabled and needed. But a closed pr exists and checkbox is not checked. Skipping migration branch creation.',\n );\n return { result: 'no-migration-branch' };\n }\n\n logger.debug(\n 'Closed migration PR found and checkbox is checked. Try to delete this old branch and create a new one.',\n );\n await handlePr(config, closedPr);\n }\n }\n\n let result: CheckConfigMigrationBranchResult['result'];\n\n if (branchPr) {\n logger.debug('Config Migration PR already exists');\n\n if (await isMigrationBranchModified(config, configMigrationBranch)) {\n logger.debug(\n 'Config Migration branch has been modified. Skipping branch rebase.',\n );\n result = 'migration-branch-modified';\n } else {\n await rebaseMigrationBranch(config, migratedConfigData);\n if (platform.refreshPr) {\n const configMigrationPr = await platform.getBranchPr(\n configMigrationBranch,\n config.baseBranch,\n );\n if (configMigrationPr) {\n await platform.refreshPr(configMigrationPr.number);\n }\n }\n result = 'migration-branch-exists';\n }\n } else {\n logger.debug('Config Migration PR does not exist');\n logger.debug('Need to create migration PR');\n await createConfigMigrationBranch(config, migratedConfigData);\n result = 'migration-branch-exists';\n }\n if (!GlobalConfig.get('dryRun')) {\n await scm.checkoutBranch(configMigrationBranch);\n }\n return {\n migrationBranch: configMigrationBranch,\n result,\n };\n}\n\nexport async function migrationPrExists(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n return await platform.getBranchPr(branchName, targetBranch);\n}\n\nasync function handlePr(config: RenovateConfig, pr: Pr): Promise<void> {\n if (await scm.branchExists(pr.sourceBranch)) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete branch ${pr.sourceBranch}`);\n } else {\n await scm.deleteBranch(pr.sourceBranch);\n }\n }\n}\n\nasync function isMigrationBranchModified(\n config: RenovateConfig,\n configMigrationBranch: string,\n): Promise<boolean> {\n const baseBranch = config.defaultBranch!;\n return await scm.isBranchModified(configMigrationBranch, baseBranch);\n}\n"],"mappings":";;;;;;;;;;AAoBA,eAAsB,2BACpB,QACA,oBAC2C;CAC3C,OAAO,MAAM,8BAA8B;CAC3C,MAAM,+BACJ,OAAO,2BAA2B;CAEpC,IAAI,CAAC,OAAO;MAER,YAAY,4BAA4B,KACxC,iCAAiC,iBACjC,iCAAiC,aACjC;GACA,OAAO,MACL,mGACF;GACA,OAAO,EAAE,QAAQ,sBAAsB;EACzC;;CAGF,MAAM,wBAAwB,uBAAuB,MAAM;CAE3D,MAAM,WAAW,MAAM,kBACrB,uBACA,OAAO,UACT;CAEA,IAAI,CAAC,UAAU;EAMb,MAAM,iBAA+B;GACnC,YAAY;GACZ,SAHc,IAJiB,oCAC/B,QACA,mBAAmB,QAEc,CAAC,CAAC,WAG7B;GACN,OAAO;GACP,cAAc,OAAO;EACvB;EAGA,MAAM,WAAW,MAAM,SAAS,OAAO,cAAc;EAGrD,IAAI,UAAU;GACZ,OAAO,MAAM,mCAAmC;GAKhD,IAAI,iCAAiC,WAAW;IAC9C,OAAO,MACL,iIACF;IACA,OAAO,EAAE,QAAQ,sBAAsB;GACzC;GAEA,OAAO,MACL,wGACF;GACA,MAAM,SAAS,QAAQ,QAAQ;EACjC;CACF;CAEA,IAAI;CAEJ,IAAI,UAAU;EACZ,OAAO,MAAM,oCAAoC;EAEjD,IAAI,MAAM,0BAA0B,QAAQ,qBAAqB,GAAG;GAClE,OAAO,MACL,oEACF;GACA,SAAS;EACX,OAAO;GACL,MAAM,sBAAsB,QAAQ,kBAAkB;GACtD,IAAI,SAAS,WAAW;IACtB,MAAM,oBAAoB,MAAM,SAAS,YACvC,uBACA,OAAO,UACT;IACA,IAAI,mBACF,MAAM,SAAS,UAAU,kBAAkB,MAAM;GAErD;GACA,SAAS;EACX;CACF,OAAO;EACL,OAAO,MAAM,oCAAoC;EACjD,OAAO,MAAM,6BAA6B;EAC1C,MAAM,4BAA4B,QAAQ,kBAAkB;EAC5D,SAAS;CACX;CACA,IAAI,CAAC,aAAa,IAAI,QAAQ,GAC5B,MAAM,IAAI,eAAe,qBAAqB;CAEhD,OAAO;EACL,iBAAiB;EACjB;CACF;AACF;AAEA,eAAsB,kBACpB,YACA,cACoB;CACpB,OAAO,MAAM,SAAS,YAAY,YAAY,YAAY;AAC5D;AAEA,eAAe,SAAS,QAAwB,IAAuB;CACrE,IAAI,MAAM,IAAI,aAAa,GAAG,YAAY,GACxC,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,gCAAgC,GAAG,cAAc;MAE7D,MAAM,IAAI,aAAa,GAAG,YAAY;AAG5C;AAEA,eAAe,0BACb,QACA,uBACkB;CAClB,MAAM,aAAa,OAAO;CAC1B,OAAO,MAAM,IAAI,iBAAiB,uBAAuB,UAAU;AACrE"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/index.ts"],"sourcesContent":["import { isUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { FindPRConfig, Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport { createConfigMigrationBranch } from './create.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { rebaseMigrationBranch } from './rebase.ts';\n\nexport type CheckConfigMigrationBranchResult =\n | { result: 'no-migration-branch' }\n | {\n result: 'migration-branch-exists' | 'migration-branch-modified';\n migrationBranch: string;\n };\n\nexport async function checkConfigMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<CheckConfigMigrationBranchResult> {\n logger.debug('checkConfigMigrationBranch()');\n const configMigrationCheckboxState =\n config.dependencyDashboardChecks?.configMigrationCheckboxState;\n\n if (\n !config.configMigration &&\n (isUndefined(configMigrationCheckboxState) ||\n configMigrationCheckboxState === 'no-checkbox' ||\n configMigrationCheckboxState === 'unchecked')\n ) {\n logger.debug(\n 'Config migration needed but config migration is disabled and checkbox not checked or not present.',\n );\n return { result: 'no-migration-branch' };\n }\n\n const configMigrationBranch = getMigrationBranchName(config);\n\n const branchPr = await migrationPrExists(\n configMigrationBranch,\n config.baseBranch,\n ); // handles open/autoclosed PRs\n\n if (!branchPr) {\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n migratedConfigData.filename,\n );\n const prTitle = commitMessageFactory.getPrTitle();\n const closedPrConfig: FindPRConfig = {\n branchName: configMigrationBranch,\n prTitle,\n state: 'closed',\n targetBranch: config.baseBranch,\n };\n\n // handles closed PR\n const closedPr = await platform.findPr(closedPrConfig);\n\n // found closed migration PR\n if (closedPr) {\n logger.debug('Closed config migration PR found.');\n\n // if a closed pr exists and the checkbox for config migration is not checked\n // return no-migration-branch result so that the checkbox gets added again\n // we only want to create a config migration pr if the checkbox is checked\n if (configMigrationCheckboxState !== 'checked') {\n logger.debug(\n 'Config migration is enabled and needed. But a closed pr exists and checkbox is not checked. Skipping migration branch creation.',\n );\n return { result: 'no-migration-branch' };\n }\n\n logger.debug(\n 'Closed migration PR found and checkbox is checked. Try to delete this old branch and create a new one.',\n );\n await handlePr(config, closedPr);\n }\n }\n\n let result: CheckConfigMigrationBranchResult['result'];\n\n if (branchPr) {\n logger.debug('Config Migration PR already exists');\n\n if (await isMigrationBranchModified(config, configMigrationBranch)) {\n logger.debug(\n 'Config Migration branch has been modified. Skipping branch rebase.',\n );\n result = 'migration-branch-modified';\n } else {\n await rebaseMigrationBranch(config, migratedConfigData);\n if (platform.refreshPr) {\n const configMigrationPr = await platform.getBranchPr(\n configMigrationBranch,\n config.baseBranch,\n );\n if (configMigrationPr) {\n await platform.refreshPr(configMigrationPr.number);\n }\n }\n result = 'migration-branch-exists';\n }\n } else {\n logger.debug('Config Migration PR does not exist');\n logger.debug('Need to create migration PR');\n await createConfigMigrationBranch(config, migratedConfigData);\n result = 'migration-branch-exists';\n }\n if (!GlobalConfig.get('dryRun')) {\n await scm.checkoutBranch(configMigrationBranch);\n }\n return {\n migrationBranch: configMigrationBranch,\n result,\n };\n}\n\nexport async function migrationPrExists(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n return await platform.getBranchPr(branchName, targetBranch);\n}\n\nasync function handlePr(config: RenovateConfig, pr: Pr): Promise<void> {\n if (await scm.branchExists(pr.sourceBranch)) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete branch ${pr.sourceBranch}`);\n } else {\n await scm.deleteBranch(pr.sourceBranch);\n }\n }\n}\n\nasync function isMigrationBranchModified(\n config: RenovateConfig,\n configMigrationBranch: string,\n): Promise<boolean> {\n const baseBranch = config.defaultBranch!;\n return await scm.isBranchModified(configMigrationBranch, baseBranch);\n}\n"],"mappings":";;;;;;;;;;AAoBA,eAAsB,2BACpB,QACA,oBAC2C;CAC3C,OAAO,MAAM,8BAA8B;CAC3C,MAAM,+BACJ,OAAO,2BAA2B;CAEpC,IACE,CAAC,OAAO,oBACP,YAAY,4BAA4B,KACvC,iCAAiC,iBACjC,iCAAiC,cACnC;EACA,OAAO,MACL,mGACF;EACA,OAAO,EAAE,QAAQ,sBAAsB;CACzC;CAEA,MAAM,wBAAwB,uBAAuB,MAAM;CAE3D,MAAM,WAAW,MAAM,kBACrB,uBACA,OAAO,UACT;CAEA,IAAI,CAAC,UAAU;EAMb,MAAM,iBAA+B;GACnC,YAAY;GACZ,SAHc,IAJiB,oCAC/B,QACA,mBAAmB,QAEc,CAAC,CAAC,WAG7B;GACN,OAAO;GACP,cAAc,OAAO;EACvB;EAGA,MAAM,WAAW,MAAM,SAAS,OAAO,cAAc;EAGrD,IAAI,UAAU;GACZ,OAAO,MAAM,mCAAmC;GAKhD,IAAI,iCAAiC,WAAW;IAC9C,OAAO,MACL,iIACF;IACA,OAAO,EAAE,QAAQ,sBAAsB;GACzC;GAEA,OAAO,MACL,wGACF;GACA,MAAM,SAAS,QAAQ,QAAQ;EACjC;CACF;CAEA,IAAI;CAEJ,IAAI,UAAU;EACZ,OAAO,MAAM,oCAAoC;EAEjD,IAAI,MAAM,0BAA0B,QAAQ,qBAAqB,GAAG;GAClE,OAAO,MACL,oEACF;GACA,SAAS;EACX,OAAO;GACL,MAAM,sBAAsB,QAAQ,kBAAkB;GACtD,IAAI,SAAS,WAAW;IACtB,MAAM,oBAAoB,MAAM,SAAS,YACvC,uBACA,OAAO,UACT;IACA,IAAI,mBACF,MAAM,SAAS,UAAU,kBAAkB,MAAM;GAErD;GACA,SAAS;EACX;CACF,OAAO;EACL,OAAO,MAAM,oCAAoC;EACjD,OAAO,MAAM,6BAA6B;EAC1C,MAAM,4BAA4B,QAAQ,kBAAkB;EAC5D,SAAS;CACX;CACA,IAAI,CAAC,aAAa,IAAI,QAAQ,GAC5B,MAAM,IAAI,eAAe,qBAAqB;CAEhD,OAAO;EACL,iBAAiB;EACjB;CACF;AACF;AAEA,eAAsB,kBACpB,YACA,cACoB;CACpB,OAAO,MAAM,SAAS,YAAY,YAAY,YAAY;AAC5D;AAEA,eAAe,SAAS,QAAwB,IAAuB;CACrE,IAAI,MAAM,IAAI,aAAa,GAAG,YAAY,GACxC,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,gCAAgC,GAAG,cAAc;MAE7D,MAAM,IAAI,aAAa,GAAG,YAAY;AAG5C;AAEA,eAAe,0BACb,QACA,uBACkB;CAClB,MAAM,aAAa,OAAO;CAC1B,OAAO,MAAM,IAAI,iBAAiB,uBAAuB,UAAU;AACrE"}
@@ -64,10 +64,9 @@ async function detectRepoFileConfig(branchName) {
64
64
  configFileName,
65
65
  configFileParsed
66
66
  };
67
- } else {
68
- logger.debug("Existing config file no longer exists");
69
- delete cache.configFileName;
70
67
  }
68
+ logger.debug("Existing config file no longer exists");
69
+ delete cache.configFileName;
71
70
  }
72
71
  if (OnboardingState.onboardingCacheValid) configFileName = getOnboardingFileNameFromCache();
73
72
  else configFileName = coerceString(await detectConfigFile());
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","names":["presets.resolveConfigPresets","configValidation.validateConfig"],"sources":["../../../../lib/workers/repository/init/merge.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isString,\n} from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../config/app-strings.ts';\nimport { decryptConfig } from '../../../config/decrypt.ts';\nimport { mergeChildConfig } from '../../../config/index.ts';\nimport { migrateAndValidate } from '../../../config/migrate-validate.ts';\nimport { migrateConfig } from '../../../config/migration.ts';\nimport { parseFileConfig } from '../../../config/parse.ts';\nimport * as presets from '../../../config/presets/index.ts';\nimport { applySecretsAndVariablesToConfig } from '../../../config/secrets.ts';\nimport type { AllConfig, RenovateConfig } from '../../../config/types.ts';\nimport * as configValidation from '../../../config/validation.ts';\nimport {\n CONFIG_VALIDATION,\n REPOSITORY_CHANGED,\n} from '../../../constants/error-messages.ts';\nimport { pkg } from '../../../expose.ts';\nimport { logger } from '../../../logger/index.ts';\nimport * as npmApi from '../../../modules/datasource/npm/index.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getCache } from '../../../util/cache/repository/index.ts';\nimport { clone } from '../../../util/clone.ts';\nimport { getInheritedOrGlobal, parseJson } from '../../../util/common.ts';\nimport { setUserEnv } from '../../../util/env.ts';\nimport { readLocalFile, readSystemFile } from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport * as queue from '../../../util/http/queue.ts';\nimport * as throttle from '../../../util/http/throttle.ts';\nimport { maskToken } from '../../../util/mask.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { getOnboardingConfig } from '../onboarding/branch/config.ts';\nimport {\n getOnboardingConfigFromCache,\n getOnboardingFileNameFromCache,\n setOnboardingConfigDetails,\n} from '../onboarding/branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n} from '../onboarding/common.ts';\nimport type { RepoFileConfig, RepositoryWorkerConfig } from './types.ts';\n\nexport async function detectConfigFile(): Promise<string | null> {\n const fileList = await scm.getFileList();\n for (const fileName of getConfigFileNames()) {\n if (fileName === 'package.json') {\n try {\n const pJson = JSON.parse(\n (await readLocalFile('package.json', 'utf8'))!,\n );\n if (pJson.renovate) {\n logger.warn(\n 'Using package.json for Renovate config is deprecated - please use a dedicated configuration file instead',\n );\n return 'package.json';\n }\n } catch {\n // Do nothing\n }\n } else if (fileList.includes(fileName)) {\n return fileName;\n }\n }\n return null;\n}\n\nexport async function detectRepoFileConfig(\n branchName?: string,\n): Promise<RepoFileConfig> {\n const cache = getCache();\n let { configFileName } = cache;\n if (isNonEmptyString(configFileName)) {\n let configFileRaw: string | null;\n try {\n configFileRaw = await platform.getRawFile(\n configFileName,\n undefined,\n branchName,\n );\n } catch (err) {\n // istanbul ignore if\n if (err instanceof ExternalHostError) {\n throw err;\n }\n configFileRaw = null;\n }\n if (configFileRaw) {\n let configFileParsed = parseJson(configFileRaw, configFileName) as any;\n if (configFileName === 'package.json') {\n configFileParsed = configFileParsed.renovate;\n }\n return { configFileName, configFileParsed };\n } else {\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n }\n\n if (OnboardingState.onboardingCacheValid) {\n configFileName = getOnboardingFileNameFromCache();\n } else {\n configFileName = coerceString(await detectConfigFile());\n }\n\n if (!configFileName) {\n logger.debug('No renovate config file found');\n cache.configFileName = '';\n return {};\n }\n cache.configFileName = configFileName;\n logger.debug(`Found ${configFileName} config file`);\n // TODO #22198\n let configFileParsed: any;\n let configFileRaw: string | undefined | null;\n\n if (OnboardingState.onboardingCacheValid) {\n const cachedConfig = getOnboardingConfigFromCache();\n const parsedConfig = cachedConfig ? JSON.parse(cachedConfig) : undefined;\n if (parsedConfig) {\n setOnboardingConfigDetails(configFileName, JSON.stringify(parsedConfig));\n return { configFileName, configFileParsed: parsedConfig };\n }\n }\n\n if (configFileName === 'package.json') {\n // We already know it parses\n configFileParsed = JSON.parse(\n // TODO #22198\n (await readLocalFile('package.json', 'utf8'))!,\n ).renovate;\n if (isString(configFileParsed)) {\n logger.debug('Massaging string renovate config to extends array');\n configFileParsed = { extends: [configFileParsed] };\n }\n logger.debug({ config: configFileParsed }, 'package.json>renovate config');\n } else {\n configFileRaw = await readLocalFile(configFileName, 'utf8');\n // istanbul ignore if\n if (!isString(configFileRaw)) {\n logger.warn({ configFileName }, 'Null contents when reading config file');\n throw new Error(REPOSITORY_CHANGED);\n }\n // istanbul ignore if\n if (!configFileRaw.length) {\n configFileRaw = '{}';\n }\n\n const parseResult = parseFileConfig(configFileName, configFileRaw);\n\n if (!parseResult.success) {\n return {\n configFileName,\n configFileParseError: {\n validationError: parseResult.validationError,\n validationMessage: parseResult.validationMessage,\n },\n };\n }\n configFileParsed = parseResult.parsedContents;\n logger.debug(\n { fileName: configFileName, config: configFileParsed },\n 'Repository config',\n );\n }\n\n setOnboardingConfigDetails(configFileName, JSON.stringify(configFileParsed));\n return { configFileName, configFileParsed };\n}\n\nexport function checkForRepoConfigError(repoConfig: RepoFileConfig): void {\n if (!repoConfig.configFileParseError) {\n return;\n }\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = repoConfig.configFileName;\n error.validationError = repoConfig.configFileParseError.validationError;\n error.validationMessage = repoConfig.configFileParseError.validationMessage;\n throw error;\n}\n\n// Check for repository config\nexport async function mergeRenovateConfig(\n config: RepositoryWorkerConfig,\n branchName?: string,\n): Promise<RenovateConfig> {\n let returnConfig: RepositoryWorkerConfig = { ...config };\n let repoConfig: RepoFileConfig = {};\n if (getInheritedOrGlobal('requireConfig') !== 'ignored') {\n repoConfig = await detectRepoFileConfig(branchName);\n }\n if (!repoConfig.configFileParsed && config.mode === 'silent') {\n logger.debug(\n 'When mode=silent and repo has no config file, we use the onboarding config as repo config',\n );\n const configFileName = getDefaultConfigFileName();\n repoConfig = {\n configFileName,\n configFileParsed: await getOnboardingConfig(config),\n };\n }\n const configFileParsed = coerceObject(repoConfig?.configFileParsed);\n const resolvedRepoConfig = await resolveStaticRepoConfig(\n configFileParsed,\n process.env.RENOVATE_X_STATIC_REPO_CONFIG_FILE,\n );\n\n // Apply the repositories[] object-entry config between global config and\n // repository file config.\n // Must run after repository file config is loaded so its `ignorePresets` can\n // be included when resolving object-entry presets.\n const repoEntryConfig = returnConfig.repositoryEntryConfig;\n delete returnConfig.repositoryEntryConfig;\n\n if (isNonEmptyObject(repoEntryConfig)) {\n const repoEntry = repoEntryConfig as RenovateConfig;\n const toResolve: RenovateConfig = {\n ...repoEntry,\n extends: [\n ...coerceArray(returnConfig.extends),\n ...coerceArray(repoEntry.extends),\n ],\n ignorePresets: [\n ...coerceArray(returnConfig.ignorePresets),\n ...coerceArray(repoEntry.ignorePresets),\n ...coerceArray(resolvedRepoConfig.ignorePresets),\n ],\n };\n delete returnConfig.extends;\n\n const { config: resolvedRepoEntry } = await presets.resolveConfigPresets(\n toResolve,\n config,\n );\n\n applyNpmrc(resolvedRepoEntry, 'resolvedRepoEntry');\n\n const resolvedRepoEntryWithSecrets = applySecretsAndVariablesToConfig({\n config: resolvedRepoEntry,\n secrets: config.secrets,\n variables: config.variables,\n });\n\n applyHostRules(resolvedRepoEntryWithSecrets);\n returnConfig = mergeChildConfig(returnConfig, resolvedRepoEntryWithSecrets);\n }\n\n if (isNonEmptyArray(returnConfig.extends)) {\n resolvedRepoConfig.extends = [\n ...coerceArray(returnConfig.extends),\n ...coerceArray(resolvedRepoConfig.extends),\n ];\n delete returnConfig.extends;\n }\n checkForRepoConfigError(repoConfig);\n const migratedConfig = await migrateAndValidate(config, resolvedRepoConfig);\n if (migratedConfig.errors?.length) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = repoConfig.configFileName;\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n error.validationMessage = migratedConfig.errors\n .map((e) => e.message)\n .join(', ');\n throw error;\n }\n if (migratedConfig.warnings) {\n returnConfig.warnings = [\n ...coerceArray(returnConfig.warnings),\n ...migratedConfig.warnings,\n ];\n }\n delete migratedConfig.errors;\n delete migratedConfig.warnings;\n // TODO #22198\n const repository = config.repository!;\n // Decrypt before resolving in case we need npm authentication for any presets\n const decryptedConfig = await decryptConfig(migratedConfig, repository);\n applyNpmrc(decryptedConfig, 'decrypted');\n\n // NOTE that this should not be used with any other configuration (`resolvedConfig`, etc) below, as they will include addditionally merged configuration\n // Decrypted secrets are sanitised, so should be safe to log\n await logShallowConfig(decryptedConfig, config);\n\n // Decrypt after resolving in case the preset contains npm authentication instead\n const { config: configToDecrypt } = await presets.resolveConfigPresets(\n decryptedConfig,\n config,\n config.ignorePresets,\n );\n let resolvedConfig = await decryptConfig(configToDecrypt, repository);\n logger.trace({ config: resolvedConfig }, 'resolved config');\n const migrationResult = migrateConfig(resolvedConfig);\n if (migrationResult.isMigrated) {\n logger.debug('Resolved config needs migrating');\n logger.trace({ config: resolvedConfig }, 'resolved config after migrating');\n resolvedConfig = migrationResult.migratedConfig;\n }\n if (isString(resolvedConfig.npmrc)) {\n logger.debug(\n 'Ignoring any .npmrc files in repository due to configured npmrc',\n );\n }\n applyNpmrc(resolvedConfig, 'resolved');\n resolvedConfig = applySecretsAndVariablesToConfig({\n config: resolvedConfig,\n secrets: mergeChildConfig(\n coerceObject(config.secrets),\n coerceObject(resolvedConfig.secrets),\n ),\n variables: mergeChildConfig(\n coerceObject(config.variables),\n coerceObject(resolvedConfig.variables),\n ),\n });\n\n applyHostRules(resolvedConfig);\n returnConfig = mergeChildConfig(returnConfig, resolvedConfig);\n ({ config: returnConfig } = await presets.resolveConfigPresets(\n returnConfig,\n config,\n ));\n returnConfig.renovateJsonPresent = true;\n // istanbul ignore if\n if (returnConfig.ignorePaths?.length) {\n logger.debug(\n { ignorePaths: returnConfig.ignorePaths },\n `Found repo ignorePaths`,\n );\n }\n\n setUserEnv(returnConfig.env);\n delete returnConfig.env;\n\n return returnConfig;\n}\n\nexport function applyNpmrc(\n config: RenovateConfig,\n configType?: 'resolved' | 'resolvedRepoEntry' | 'decrypted',\n): void {\n setNpmTokenInNpmrc(config);\n if (!isString(config.npmrc)) {\n return;\n }\n logger.debug(\n `Setting npmrc from ${configType ? `${configType} ` : ''}config`,\n );\n npmApi.setNpmrc(config.npmrc);\n}\n\nexport function applyHostRules(config: RenovateConfig): void {\n if (!config.hostRules) {\n return;\n }\n\n logger.debug('Setting hostRules from config');\n for (const rule of config.hostRules) {\n try {\n hostRules.add(rule);\n } catch (err) {\n logger.warn({ err, config: rule }, 'Error setting hostRule from config');\n }\n }\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n delete config.hostRules;\n}\n\n/** needed when using portal secrets for npmToken */\nexport function setNpmTokenInNpmrc(config: RenovateConfig): void {\n if (!isString(config.npmToken)) {\n return;\n }\n\n const token = config.npmToken;\n logger.debug({ npmToken: maskToken(token) }, 'Migrating npmToken to npmrc');\n\n if (!isString(config.npmrc)) {\n logger.debug('Adding npmrc to config');\n config.npmrc = `//registry.npmjs.org/:_authToken=${token}\\n`;\n delete config.npmToken;\n return;\n }\n\n if (config.npmrc.includes(`\\${NPM_TOKEN}`)) {\n logger.debug(`Replacing \\${NPM_TOKEN} with npmToken`);\n config.npmrc = config.npmrc.replace(regEx(/\\${NPM_TOKEN}/g), token);\n } else {\n logger.debug('Appending _authToken= to end of existing npmrc');\n config.npmrc = config.npmrc.replace(\n regEx(/\\n?$/),\n `\\n_authToken=${token}\\n`,\n );\n }\n\n delete config.npmToken;\n}\n\nexport async function resolveStaticRepoConfig(\n config: AllConfig,\n filename: string | undefined,\n): Promise<AllConfig> {\n if (!isNonEmptyString(filename)) {\n return config;\n }\n\n let staticRepoConfig: AllConfig;\n\n try {\n staticRepoConfig = await tryReadStaticRepoFileConfig(filename);\n } catch (err) {\n logger.fatal({ err }, 'Failed to load static repository config file');\n process.exit(1);\n }\n\n if (!isNonEmptyObject(staticRepoConfig)) {\n return config;\n }\n\n return mergeStaticConfig(config, staticRepoConfig);\n}\n\nexport async function tryReadStaticRepoFileConfig(\n staticRepoConfigFile: string,\n): Promise<AllConfig> {\n logger.debug(`Reading static repo config file from ${staticRepoConfigFile}`);\n\n let staticRepoConfigRaw: string;\n try {\n staticRepoConfigRaw = await readSystemFile(staticRepoConfigFile, 'utf8');\n } catch (err) {\n throw new Error(\n `Failed to read static repo config file: \"${staticRepoConfigFile}\"`,\n { cause: err },\n );\n }\n\n const staticRepoConfig = parseJson(\n staticRepoConfigRaw,\n staticRepoConfigFile,\n ) as AllConfig;\n\n // validate and log issues here to preserve context, caller handles migration and full validation.\n const { errors, warnings } = await configValidation.validateConfig(\n 'repo',\n staticRepoConfig,\n );\n\n if (isNonEmptyArray(errors) || isNonEmptyArray(warnings)) {\n logger.info(\n { errors, warnings },\n 'Static repo config validation issues detected',\n );\n } else {\n logger.debug(\n { staticRepoConfig },\n 'Static repository config file successfully parsed and validated',\n );\n }\n\n return staticRepoConfig;\n}\n\nexport function mergeStaticConfig(\n config: AllConfig,\n staticRepoConfig: AllConfig,\n): AllConfig {\n // merge extends\n if (isNonEmptyArray(staticRepoConfig.extends)) {\n config.extends = [\n ...staticRepoConfig.extends,\n ...coerceArray(config.extends),\n ];\n delete staticRepoConfig.extends;\n }\n\n // renovate repo config overrides RENOVATE_STATIC_REPO_CONFIG[_FILE]\n return mergeChildConfig(staticRepoConfig, config);\n}\n\n/**\n * Resolve everything but internal Renovate presets and log it out.\n *\n* This allows users to understand the fully resolved configuration, including any `github>`, `local>`, etc presets, but excluding anything that's internal to Renovate (which can be verbose and/or less relevant), and provides useful output for debugging purposes.\n\n* This is also known as the \"shallow\" config.\n\n* Due to caching, this doesn't add any additional requests.\n */\nasync function logShallowConfig(\n _decryptedConfig: RenovateConfig,\n _config: RepositoryWorkerConfig,\n): Promise<void> {\n // make sure we clone the existing config, so we don't modify the existing settings when resolving this in a shallow fashion\n const decryptedConfig = clone(_decryptedConfig);\n const config = clone(_config);\n\n const { config: resolvedConfig, visitedPresets } =\n await presets.resolveConfigPresets(\n clone(decryptedConfig),\n clone(config),\n [],\n [],\n false,\n );\n logger.debug(\n {\n renovateVersion: pkg.version,\n config: resolvedConfig,\n visitedPresets,\n },\n 'Resolved shallow config, without merging internal presets',\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"merge.js","names":["presets.resolveConfigPresets","configValidation.validateConfig"],"sources":["../../../../lib/workers/repository/init/merge.ts"],"sourcesContent":["import {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isString,\n} from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../config/app-strings.ts';\nimport { decryptConfig } from '../../../config/decrypt.ts';\nimport { mergeChildConfig } from '../../../config/index.ts';\nimport { migrateAndValidate } from '../../../config/migrate-validate.ts';\nimport { migrateConfig } from '../../../config/migration.ts';\nimport { parseFileConfig } from '../../../config/parse.ts';\nimport * as presets from '../../../config/presets/index.ts';\nimport { applySecretsAndVariablesToConfig } from '../../../config/secrets.ts';\nimport type { AllConfig, RenovateConfig } from '../../../config/types.ts';\nimport * as configValidation from '../../../config/validation.ts';\nimport {\n CONFIG_VALIDATION,\n REPOSITORY_CHANGED,\n} from '../../../constants/error-messages.ts';\nimport { pkg } from '../../../expose.ts';\nimport { logger } from '../../../logger/index.ts';\nimport * as npmApi from '../../../modules/datasource/npm/index.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { getCache } from '../../../util/cache/repository/index.ts';\nimport { clone } from '../../../util/clone.ts';\nimport { getInheritedOrGlobal, parseJson } from '../../../util/common.ts';\nimport { setUserEnv } from '../../../util/env.ts';\nimport { readLocalFile, readSystemFile } from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport * as queue from '../../../util/http/queue.ts';\nimport * as throttle from '../../../util/http/throttle.ts';\nimport { maskToken } from '../../../util/mask.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { coerceString } from '../../../util/string.ts';\nimport { getOnboardingConfig } from '../onboarding/branch/config.ts';\nimport {\n getOnboardingConfigFromCache,\n getOnboardingFileNameFromCache,\n setOnboardingConfigDetails,\n} from '../onboarding/branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n} from '../onboarding/common.ts';\nimport type { RepoFileConfig, RepositoryWorkerConfig } from './types.ts';\n\nexport async function detectConfigFile(): Promise<string | null> {\n const fileList = await scm.getFileList();\n for (const fileName of getConfigFileNames()) {\n if (fileName === 'package.json') {\n try {\n const pJson = JSON.parse(\n (await readLocalFile('package.json', 'utf8'))!,\n );\n if (pJson.renovate) {\n logger.warn(\n 'Using package.json for Renovate config is deprecated - please use a dedicated configuration file instead',\n );\n return 'package.json';\n }\n } catch {\n // Do nothing\n }\n } else if (fileList.includes(fileName)) {\n return fileName;\n }\n }\n return null;\n}\n\nexport async function detectRepoFileConfig(\n branchName?: string,\n): Promise<RepoFileConfig> {\n const cache = getCache();\n let { configFileName } = cache;\n if (isNonEmptyString(configFileName)) {\n let configFileRaw: string | null;\n try {\n configFileRaw = await platform.getRawFile(\n configFileName,\n undefined,\n branchName,\n );\n } catch (err) {\n // istanbul ignore if\n if (err instanceof ExternalHostError) {\n throw err;\n }\n configFileRaw = null;\n }\n if (configFileRaw) {\n let configFileParsed = parseJson(configFileRaw, configFileName) as any;\n if (configFileName === 'package.json') {\n configFileParsed = configFileParsed.renovate;\n }\n return { configFileName, configFileParsed };\n }\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n\n if (OnboardingState.onboardingCacheValid) {\n configFileName = getOnboardingFileNameFromCache();\n } else {\n configFileName = coerceString(await detectConfigFile());\n }\n\n if (!configFileName) {\n logger.debug('No renovate config file found');\n cache.configFileName = '';\n return {};\n }\n cache.configFileName = configFileName;\n logger.debug(`Found ${configFileName} config file`);\n // TODO #22198\n let configFileParsed: any;\n let configFileRaw: string | undefined | null;\n\n if (OnboardingState.onboardingCacheValid) {\n const cachedConfig = getOnboardingConfigFromCache();\n const parsedConfig = cachedConfig ? JSON.parse(cachedConfig) : undefined;\n if (parsedConfig) {\n setOnboardingConfigDetails(configFileName, JSON.stringify(parsedConfig));\n return { configFileName, configFileParsed: parsedConfig };\n }\n }\n\n if (configFileName === 'package.json') {\n // We already know it parses\n configFileParsed = JSON.parse(\n // TODO #22198\n (await readLocalFile('package.json', 'utf8'))!,\n ).renovate;\n if (isString(configFileParsed)) {\n logger.debug('Massaging string renovate config to extends array');\n configFileParsed = { extends: [configFileParsed] };\n }\n logger.debug({ config: configFileParsed }, 'package.json>renovate config');\n } else {\n configFileRaw = await readLocalFile(configFileName, 'utf8');\n // istanbul ignore if\n if (!isString(configFileRaw)) {\n logger.warn({ configFileName }, 'Null contents when reading config file');\n throw new Error(REPOSITORY_CHANGED);\n }\n // istanbul ignore if\n if (!configFileRaw.length) {\n configFileRaw = '{}';\n }\n\n const parseResult = parseFileConfig(configFileName, configFileRaw);\n\n if (!parseResult.success) {\n return {\n configFileName,\n configFileParseError: {\n validationError: parseResult.validationError,\n validationMessage: parseResult.validationMessage,\n },\n };\n }\n configFileParsed = parseResult.parsedContents;\n logger.debug(\n { fileName: configFileName, config: configFileParsed },\n 'Repository config',\n );\n }\n\n setOnboardingConfigDetails(configFileName, JSON.stringify(configFileParsed));\n return { configFileName, configFileParsed };\n}\n\nexport function checkForRepoConfigError(repoConfig: RepoFileConfig): void {\n if (!repoConfig.configFileParseError) {\n return;\n }\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = repoConfig.configFileName;\n error.validationError = repoConfig.configFileParseError.validationError;\n error.validationMessage = repoConfig.configFileParseError.validationMessage;\n throw error;\n}\n\n// Check for repository config\nexport async function mergeRenovateConfig(\n config: RepositoryWorkerConfig,\n branchName?: string,\n): Promise<RenovateConfig> {\n let returnConfig: RepositoryWorkerConfig = { ...config };\n let repoConfig: RepoFileConfig = {};\n if (getInheritedOrGlobal('requireConfig') !== 'ignored') {\n repoConfig = await detectRepoFileConfig(branchName);\n }\n if (!repoConfig.configFileParsed && config.mode === 'silent') {\n logger.debug(\n 'When mode=silent and repo has no config file, we use the onboarding config as repo config',\n );\n const configFileName = getDefaultConfigFileName();\n repoConfig = {\n configFileName,\n configFileParsed: await getOnboardingConfig(config),\n };\n }\n const configFileParsed = coerceObject(repoConfig?.configFileParsed);\n const resolvedRepoConfig = await resolveStaticRepoConfig(\n configFileParsed,\n process.env.RENOVATE_X_STATIC_REPO_CONFIG_FILE,\n );\n\n // Apply the repositories[] object-entry config between global config and\n // repository file config.\n // Must run after repository file config is loaded so its `ignorePresets` can\n // be included when resolving object-entry presets.\n const repoEntryConfig = returnConfig.repositoryEntryConfig;\n delete returnConfig.repositoryEntryConfig;\n\n if (isNonEmptyObject(repoEntryConfig)) {\n const repoEntry = repoEntryConfig as RenovateConfig;\n const toResolve: RenovateConfig = {\n ...repoEntry,\n extends: [\n ...coerceArray(returnConfig.extends),\n ...coerceArray(repoEntry.extends),\n ],\n ignorePresets: [\n ...coerceArray(returnConfig.ignorePresets),\n ...coerceArray(repoEntry.ignorePresets),\n ...coerceArray(resolvedRepoConfig.ignorePresets),\n ],\n };\n delete returnConfig.extends;\n\n const { config: resolvedRepoEntry } = await presets.resolveConfigPresets(\n toResolve,\n config,\n );\n\n applyNpmrc(resolvedRepoEntry, 'resolvedRepoEntry');\n\n const resolvedRepoEntryWithSecrets = applySecretsAndVariablesToConfig({\n config: resolvedRepoEntry,\n secrets: config.secrets,\n variables: config.variables,\n });\n\n applyHostRules(resolvedRepoEntryWithSecrets);\n returnConfig = mergeChildConfig(returnConfig, resolvedRepoEntryWithSecrets);\n }\n\n if (isNonEmptyArray(returnConfig.extends)) {\n resolvedRepoConfig.extends = [\n ...coerceArray(returnConfig.extends),\n ...coerceArray(resolvedRepoConfig.extends),\n ];\n delete returnConfig.extends;\n }\n checkForRepoConfigError(repoConfig);\n const migratedConfig = await migrateAndValidate(config, resolvedRepoConfig);\n if (migratedConfig.errors?.length) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = repoConfig.configFileName;\n error.validationError =\n 'The renovate configuration file contains some invalid settings';\n error.validationMessage = migratedConfig.errors\n .map((e) => e.message)\n .join(', ');\n throw error;\n }\n if (migratedConfig.warnings) {\n returnConfig.warnings = [\n ...coerceArray(returnConfig.warnings),\n ...migratedConfig.warnings,\n ];\n }\n delete migratedConfig.errors;\n delete migratedConfig.warnings;\n // TODO #22198\n const repository = config.repository!;\n // Decrypt before resolving in case we need npm authentication for any presets\n const decryptedConfig = await decryptConfig(migratedConfig, repository);\n applyNpmrc(decryptedConfig, 'decrypted');\n\n // NOTE that this should not be used with any other configuration (`resolvedConfig`, etc) below, as they will include addditionally merged configuration\n // Decrypted secrets are sanitised, so should be safe to log\n await logShallowConfig(decryptedConfig, config);\n\n // Decrypt after resolving in case the preset contains npm authentication instead\n const { config: configToDecrypt } = await presets.resolveConfigPresets(\n decryptedConfig,\n config,\n config.ignorePresets,\n );\n let resolvedConfig = await decryptConfig(configToDecrypt, repository);\n logger.trace({ config: resolvedConfig }, 'resolved config');\n const migrationResult = migrateConfig(resolvedConfig);\n if (migrationResult.isMigrated) {\n logger.debug('Resolved config needs migrating');\n logger.trace({ config: resolvedConfig }, 'resolved config after migrating');\n resolvedConfig = migrationResult.migratedConfig;\n }\n if (isString(resolvedConfig.npmrc)) {\n logger.debug(\n 'Ignoring any .npmrc files in repository due to configured npmrc',\n );\n }\n applyNpmrc(resolvedConfig, 'resolved');\n resolvedConfig = applySecretsAndVariablesToConfig({\n config: resolvedConfig,\n secrets: mergeChildConfig(\n coerceObject(config.secrets),\n coerceObject(resolvedConfig.secrets),\n ),\n variables: mergeChildConfig(\n coerceObject(config.variables),\n coerceObject(resolvedConfig.variables),\n ),\n });\n\n applyHostRules(resolvedConfig);\n returnConfig = mergeChildConfig(returnConfig, resolvedConfig);\n ({ config: returnConfig } = await presets.resolveConfigPresets(\n returnConfig,\n config,\n ));\n returnConfig.renovateJsonPresent = true;\n // istanbul ignore if\n if (returnConfig.ignorePaths?.length) {\n logger.debug(\n { ignorePaths: returnConfig.ignorePaths },\n `Found repo ignorePaths`,\n );\n }\n\n setUserEnv(returnConfig.env);\n delete returnConfig.env;\n\n return returnConfig;\n}\n\nexport function applyNpmrc(\n config: RenovateConfig,\n configType?: 'resolved' | 'resolvedRepoEntry' | 'decrypted',\n): void {\n setNpmTokenInNpmrc(config);\n if (!isString(config.npmrc)) {\n return;\n }\n logger.debug(\n `Setting npmrc from ${configType ? `${configType} ` : ''}config`,\n );\n npmApi.setNpmrc(config.npmrc);\n}\n\nexport function applyHostRules(config: RenovateConfig): void {\n if (!config.hostRules) {\n return;\n }\n\n logger.debug('Setting hostRules from config');\n for (const rule of config.hostRules) {\n try {\n hostRules.add(rule);\n } catch (err) {\n logger.warn({ err, config: rule }, 'Error setting hostRule from config');\n }\n }\n // host rules can change concurrency\n queue.clear();\n throttle.clear();\n delete config.hostRules;\n}\n\n/** needed when using portal secrets for npmToken */\nexport function setNpmTokenInNpmrc(config: RenovateConfig): void {\n if (!isString(config.npmToken)) {\n return;\n }\n\n const token = config.npmToken;\n logger.debug({ npmToken: maskToken(token) }, 'Migrating npmToken to npmrc');\n\n if (!isString(config.npmrc)) {\n logger.debug('Adding npmrc to config');\n config.npmrc = `//registry.npmjs.org/:_authToken=${token}\\n`;\n delete config.npmToken;\n return;\n }\n\n if (config.npmrc.includes(`\\${NPM_TOKEN}`)) {\n logger.debug(`Replacing \\${NPM_TOKEN} with npmToken`);\n config.npmrc = config.npmrc.replace(regEx(/\\${NPM_TOKEN}/g), token);\n } else {\n logger.debug('Appending _authToken= to end of existing npmrc');\n config.npmrc = config.npmrc.replace(\n regEx(/\\n?$/),\n `\\n_authToken=${token}\\n`,\n );\n }\n\n delete config.npmToken;\n}\n\nexport async function resolveStaticRepoConfig(\n config: AllConfig,\n filename: string | undefined,\n): Promise<AllConfig> {\n if (!isNonEmptyString(filename)) {\n return config;\n }\n\n let staticRepoConfig: AllConfig;\n\n try {\n staticRepoConfig = await tryReadStaticRepoFileConfig(filename);\n } catch (err) {\n logger.fatal({ err }, 'Failed to load static repository config file');\n process.exit(1);\n }\n\n if (!isNonEmptyObject(staticRepoConfig)) {\n return config;\n }\n\n return mergeStaticConfig(config, staticRepoConfig);\n}\n\nexport async function tryReadStaticRepoFileConfig(\n staticRepoConfigFile: string,\n): Promise<AllConfig> {\n logger.debug(`Reading static repo config file from ${staticRepoConfigFile}`);\n\n let staticRepoConfigRaw: string;\n try {\n staticRepoConfigRaw = await readSystemFile(staticRepoConfigFile, 'utf8');\n } catch (err) {\n throw new Error(\n `Failed to read static repo config file: \"${staticRepoConfigFile}\"`,\n { cause: err },\n );\n }\n\n const staticRepoConfig = parseJson(\n staticRepoConfigRaw,\n staticRepoConfigFile,\n ) as AllConfig;\n\n // validate and log issues here to preserve context, caller handles migration and full validation.\n const { errors, warnings } = await configValidation.validateConfig(\n 'repo',\n staticRepoConfig,\n );\n\n if (isNonEmptyArray(errors) || isNonEmptyArray(warnings)) {\n logger.info(\n { errors, warnings },\n 'Static repo config validation issues detected',\n );\n } else {\n logger.debug(\n { staticRepoConfig },\n 'Static repository config file successfully parsed and validated',\n );\n }\n\n return staticRepoConfig;\n}\n\nexport function mergeStaticConfig(\n config: AllConfig,\n staticRepoConfig: AllConfig,\n): AllConfig {\n // merge extends\n if (isNonEmptyArray(staticRepoConfig.extends)) {\n config.extends = [\n ...staticRepoConfig.extends,\n ...coerceArray(config.extends),\n ];\n delete staticRepoConfig.extends;\n }\n\n // renovate repo config overrides RENOVATE_STATIC_REPO_CONFIG[_FILE]\n return mergeChildConfig(staticRepoConfig, config);\n}\n\n/**\n * Resolve everything but internal Renovate presets and log it out.\n *\n* This allows users to understand the fully resolved configuration, including any `github>`, `local>`, etc presets, but excluding anything that's internal to Renovate (which can be verbose and/or less relevant), and provides useful output for debugging purposes.\n\n* This is also known as the \"shallow\" config.\n\n* Due to caching, this doesn't add any additional requests.\n */\nasync function logShallowConfig(\n _decryptedConfig: RenovateConfig,\n _config: RepositoryWorkerConfig,\n): Promise<void> {\n // make sure we clone the existing config, so we don't modify the existing settings when resolving this in a shallow fashion\n const decryptedConfig = clone(_decryptedConfig);\n const config = clone(_config);\n\n const { config: resolvedConfig, visitedPresets } =\n await presets.resolveConfigPresets(\n clone(decryptedConfig),\n clone(config),\n [],\n [],\n false,\n );\n logger.debug(\n {\n renovateVersion: pkg.version,\n config: resolvedConfig,\n visitedPresets,\n },\n 'Resolved shallow config, without merging internal presets',\n );\n}\n"],"mappings":"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"}
@@ -65,15 +65,13 @@ async function isOnboarded(config) {
65
65
  logger.debug("Checking cached config file name");
66
66
  try {
67
67
  const configFileContent = await platform.getJsonFile(cache.configFileName);
68
- if (configFileContent) {
69
- if (cache.configFileName !== "package.json" || configFileContent.renovate) {
70
- logger.debug("Existing config file confirmed");
71
- logger.debug({
72
- fileName: cache.configFileName,
73
- config: configFileContent
74
- }, "Repository config");
75
- return true;
76
- }
68
+ if (configFileContent && (cache.configFileName !== "package.json" || configFileContent.renovate)) {
69
+ logger.debug("Existing config file confirmed");
70
+ logger.debug({
71
+ fileName: cache.configFileName,
72
+ config: configFileContent
73
+ }, "Repository config");
74
+ return true;
77
75
  }
78
76
  } catch {}
79
77
  logger.debug("Existing config file no longer exists");
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/check.ts"],"sourcesContent":["import { isNonEmptyObject } from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../../config/app-strings.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport {\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_NO_CONFIG,\n} from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport { getBranchCommit } from '../../../../util/git/index.ts';\nimport { getSemanticCommitPrTitle } from '../common.ts';\n\nasync function findFile(fileName: string): Promise<boolean> {\n logger.debug(`findFile(${fileName})`);\n const fileList = await scm.getFileList();\n return fileList.includes(fileName);\n}\n\nasync function configFileExists(): Promise<boolean> {\n for (const fileName of getConfigFileNames()) {\n if (fileName !== 'package.json' && (await findFile(fileName))) {\n logger.debug(`Config file exists, fileName: ${fileName}`);\n return true;\n }\n }\n return false;\n}\n\nasync function packageJsonConfigExists(): Promise<boolean> {\n try {\n // TODO #22198\n const pJson = JSON.parse((await readLocalFile('package.json', 'utf8'))!);\n if (pJson.renovate) {\n return true;\n }\n } catch {\n // Do nothing\n }\n return false;\n}\n\nasync function closedPrExists(config: RenovateConfig): Promise<Pr | null> {\n return (\n (await platform.findPr({\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n prTitle: getInheritedOrGlobal('onboardingPrTitle'),\n state: '!open',\n targetBranch: config.baseBranch,\n })) ??\n (await platform.findPr({\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n prTitle: getSemanticCommitPrTitle(config),\n state: '!open',\n targetBranch: config.baseBranch,\n }))\n );\n}\n\nexport async function isOnboarded(config: RenovateConfig): Promise<boolean> {\n logger.debug('isOnboarded()');\n const title = `Action required: Add a Renovate config`;\n\n // Repo is onboarded if in silent mode\n if (config.mode === 'silent') {\n logger.debug('Silent mode enabled so repo is considered onboarded');\n return true;\n }\n\n // Repo is onboarded if global config is bypassing onboarding and does not require a\n // configuration file.\n // The repo is considered \"not onboarded\" if:\n // - An onboarding cache is present, and\n // - The current default branch SHA matches the default SHA found in the cache\n // Also if there is a closed pr skip using cache as it is outdated\n if (\n getInheritedOrGlobal('requireConfig') === 'optional' &&\n getInheritedOrGlobal('onboarding') === false\n ) {\n // Return early and avoid checking for config files\n return true;\n }\n if (getInheritedOrGlobal('requireConfig') === 'ignored') {\n logger.debug('Config file will be ignored');\n return true;\n }\n\n const closedOnboardingPr = await closedPrExists(config);\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n // if onboarding cache is present and base branch has not been updated; branch is not onboarded\n // if closed pr exists then presence of onboarding cache doesn't matter as we need to skip onboarding\n if (\n getInheritedOrGlobal('onboarding') &&\n !closedOnboardingPr &&\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha ===\n getBranchCommit(config.defaultBranch!)\n ) {\n logger.debug('Onboarding cache is valid. Repo is not onboarded');\n return false;\n }\n\n // when bot is ran is fork mode ... do not fetch file using api call instead use the git.fileList so we get sync first and get the latest config\n // prevents https://github.com/renovatebot/renovate/discussions/37328\n if (cache.configFileName && !config.forkToken) {\n logger.debug('Checking cached config file name');\n try {\n const configFileContent = await platform.getJsonFile(\n cache.configFileName,\n );\n if (configFileContent) {\n if (\n cache.configFileName !== 'package.json' ||\n configFileContent.renovate\n ) {\n logger.debug('Existing config file confirmed');\n logger.debug(\n { fileName: cache.configFileName, config: configFileContent },\n 'Repository config',\n );\n return true;\n }\n }\n } catch {\n // probably file doesn't exist\n }\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n if (await configFileExists()) {\n await platform.ensureIssueClosing(title);\n return true;\n }\n logger.debug('config file not found');\n if (await packageJsonConfigExists()) {\n logger.debug('package.json contains config');\n await platform.ensureIssueClosing(title);\n return true;\n }\n\n // If onboarding has been disabled and config files are required then the\n // repository has not been onboarded yet\n if (\n getInheritedOrGlobal('requireConfig') === 'required' &&\n getInheritedOrGlobal('onboarding') === false\n ) {\n throw new Error(REPOSITORY_NO_CONFIG);\n }\n\n if (!closedOnboardingPr) {\n logger.debug('Found no closed onboarding PR');\n return false;\n }\n logger.debug('Found closed onboarding PR');\n if (getInheritedOrGlobal('requireConfig') === 'optional') {\n logger.debug('Config not mandatory so repo is considered onboarded');\n return true;\n }\n logger.debug('Repo is not onboarded and no merged PRs exist');\n if (!config.suppressNotifications!.includes('onboardingClose')) {\n const ageOfOnboardingPr = getElapsedDays(\n closedOnboardingPr.createdAt!,\n false,\n );\n const onboardingAutoCloseAge = getInheritedOrGlobal(\n 'onboardingAutoCloseAge',\n );\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: closedOnboardingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the closed onboarding PR was created at \\`${closedOnboardingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n // if we have onboardingAutoCloseAge, and it hasn't yet passed onboardingAutoCloseAge, add a comment\n // if it /has/ passed, we'll comment this appropriately in `ensureOnboardingPr`, so there doesn't need to be a comment here\n if (\n !onboardingAutoCloseAge ||\n ageOfOnboardingPr <= onboardingAutoCloseAge\n ) {\n // ensure PR comment\n await ensureComment({\n number: closedOnboardingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because there is no Renovate configuration file. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n }\n }\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n}\n\nexport async function getOnboardingPr(\n config: RenovateConfig,\n): Promise<Pr | null> {\n return await platform.getBranchPr(\n getInheritedOrGlobal('onboardingBranch')!,\n config.baseBranch,\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"check.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/check.ts"],"sourcesContent":["import { isNonEmptyObject } from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../../config/app-strings.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport {\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_NO_CONFIG,\n} from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport { getBranchCommit } from '../../../../util/git/index.ts';\nimport { getSemanticCommitPrTitle } from '../common.ts';\n\nasync function findFile(fileName: string): Promise<boolean> {\n logger.debug(`findFile(${fileName})`);\n const fileList = await scm.getFileList();\n return fileList.includes(fileName);\n}\n\nasync function configFileExists(): Promise<boolean> {\n for (const fileName of getConfigFileNames()) {\n if (fileName !== 'package.json' && (await findFile(fileName))) {\n logger.debug(`Config file exists, fileName: ${fileName}`);\n return true;\n }\n }\n return false;\n}\n\nasync function packageJsonConfigExists(): Promise<boolean> {\n try {\n // TODO #22198\n const pJson = JSON.parse((await readLocalFile('package.json', 'utf8'))!);\n if (pJson.renovate) {\n return true;\n }\n } catch {\n // Do nothing\n }\n return false;\n}\n\nasync function closedPrExists(config: RenovateConfig): Promise<Pr | null> {\n return (\n (await platform.findPr({\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n prTitle: getInheritedOrGlobal('onboardingPrTitle'),\n state: '!open',\n targetBranch: config.baseBranch,\n })) ??\n (await platform.findPr({\n branchName: getInheritedOrGlobal('onboardingBranch')!,\n prTitle: getSemanticCommitPrTitle(config),\n state: '!open',\n targetBranch: config.baseBranch,\n }))\n );\n}\n\nexport async function isOnboarded(config: RenovateConfig): Promise<boolean> {\n logger.debug('isOnboarded()');\n const title = `Action required: Add a Renovate config`;\n\n // Repo is onboarded if in silent mode\n if (config.mode === 'silent') {\n logger.debug('Silent mode enabled so repo is considered onboarded');\n return true;\n }\n\n // Repo is onboarded if global config is bypassing onboarding and does not require a\n // configuration file.\n // The repo is considered \"not onboarded\" if:\n // - An onboarding cache is present, and\n // - The current default branch SHA matches the default SHA found in the cache\n // Also if there is a closed pr skip using cache as it is outdated\n if (\n getInheritedOrGlobal('requireConfig') === 'optional' &&\n getInheritedOrGlobal('onboarding') === false\n ) {\n // Return early and avoid checking for config files\n return true;\n }\n if (getInheritedOrGlobal('requireConfig') === 'ignored') {\n logger.debug('Config file will be ignored');\n return true;\n }\n\n const closedOnboardingPr = await closedPrExists(config);\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n // if onboarding cache is present and base branch has not been updated; branch is not onboarded\n // if closed pr exists then presence of onboarding cache doesn't matter as we need to skip onboarding\n if (\n getInheritedOrGlobal('onboarding') &&\n !closedOnboardingPr &&\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha ===\n getBranchCommit(config.defaultBranch!)\n ) {\n logger.debug('Onboarding cache is valid. Repo is not onboarded');\n return false;\n }\n\n // when bot is ran is fork mode ... do not fetch file using api call instead use the git.fileList so we get sync first and get the latest config\n // prevents https://github.com/renovatebot/renovate/discussions/37328\n if (cache.configFileName && !config.forkToken) {\n logger.debug('Checking cached config file name');\n try {\n const configFileContent = await platform.getJsonFile(\n cache.configFileName,\n );\n if (\n configFileContent &&\n (cache.configFileName !== 'package.json' || configFileContent.renovate)\n ) {\n logger.debug('Existing config file confirmed');\n logger.debug(\n { fileName: cache.configFileName, config: configFileContent },\n 'Repository config',\n );\n return true;\n }\n } catch {\n // probably file doesn't exist\n }\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n if (await configFileExists()) {\n await platform.ensureIssueClosing(title);\n return true;\n }\n logger.debug('config file not found');\n if (await packageJsonConfigExists()) {\n logger.debug('package.json contains config');\n await platform.ensureIssueClosing(title);\n return true;\n }\n\n // If onboarding has been disabled and config files are required then the\n // repository has not been onboarded yet\n if (\n getInheritedOrGlobal('requireConfig') === 'required' &&\n getInheritedOrGlobal('onboarding') === false\n ) {\n throw new Error(REPOSITORY_NO_CONFIG);\n }\n\n if (!closedOnboardingPr) {\n logger.debug('Found no closed onboarding PR');\n return false;\n }\n logger.debug('Found closed onboarding PR');\n if (getInheritedOrGlobal('requireConfig') === 'optional') {\n logger.debug('Config not mandatory so repo is considered onboarded');\n return true;\n }\n logger.debug('Repo is not onboarded and no merged PRs exist');\n if (!config.suppressNotifications!.includes('onboardingClose')) {\n const ageOfOnboardingPr = getElapsedDays(\n closedOnboardingPr.createdAt!,\n false,\n );\n const onboardingAutoCloseAge = getInheritedOrGlobal(\n 'onboardingAutoCloseAge',\n );\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: closedOnboardingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the closed onboarding PR was created at \\`${closedOnboardingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n // if we have onboardingAutoCloseAge, and it hasn't yet passed onboardingAutoCloseAge, add a comment\n // if it /has/ passed, we'll comment this appropriately in `ensureOnboardingPr`, so there doesn't need to be a comment here\n if (\n !onboardingAutoCloseAge ||\n ageOfOnboardingPr <= onboardingAutoCloseAge\n ) {\n // ensure PR comment\n await ensureComment({\n number: closedOnboardingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because there is no Renovate configuration file. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n }\n }\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n}\n\nexport async function getOnboardingPr(\n config: RenovateConfig,\n): Promise<Pr | null> {\n return await platform.getBranchPr(\n getInheritedOrGlobal('onboardingBranch')!,\n config.baseBranch,\n );\n}\n"],"mappings":"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"}
@@ -73,9 +73,7 @@ async function checkOnboardingBranch(config) {
73
73
  logger.debug("Onboarding PR does not exist");
74
74
  let mergedConfig = mergeChildConfig(config, await getOnboardingConfig(config));
75
75
  mergedConfig = await mergeRenovateConfig(mergedConfig);
76
- if (Object.entries((await extractAllDependencies(mergedConfig)).packageFiles).length === 0) {
77
- if (getInheritedOrGlobal("onboardingNoDeps") !== "enabled") throw new Error(REPOSITORY_NO_PACKAGE_FILES);
78
- }
76
+ if (Object.entries((await extractAllDependencies(mergedConfig)).packageFiles).length === 0 && getInheritedOrGlobal("onboardingNoDeps") !== "enabled") throw new Error(REPOSITORY_NO_PACKAGE_FILES);
79
77
  logger.debug("Need to create onboarding PR");
80
78
  if (config.onboardingRebaseCheckbox) OnboardingState.prUpdateRequested = true;
81
79
  const commit = await createOnboardingBranch(mergedConfig);
@@ -86,11 +84,9 @@ async function checkOnboardingBranch(config) {
86
84
  onboarding: true
87
85
  }, "Branch created");
88
86
  }
89
- if (!GlobalConfig.get("dryRun")) {
90
- if (!isConflicted) {
91
- logger.debug("Merge onboarding branch in default branch");
92
- await scm.mergeToLocal(onboardingBranch);
93
- }
87
+ if (!GlobalConfig.get("dryRun") && !isConflicted) {
88
+ logger.debug("Merge onboarding branch in default branch");
89
+ await scm.mergeToLocal(onboardingBranch);
94
90
  }
95
91
  setOnboardingCache(getBranchCommit(config.defaultBranch), getBranchCommit(onboardingBranch), isConflicted, isModified);
96
92
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/index.ts"],"sourcesContent":["import { isNonEmptyObject, isNullOrUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_NO_PACKAGE_FILES } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { type Pr, platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getBranchCommit, setGitAuthor } from '../../../../util/git/index.ts';\nimport { checkIfConfigured } from '../../configured.ts';\nimport { extractAllDependencies } from '../../extract/index.ts';\nimport { mergeRenovateConfig } from '../../init/merge.ts';\nimport { OnboardingState } from '../common.ts';\nimport { getOnboardingPr, isOnboarded } from './check.ts';\nimport { getOnboardingConfig } from './config.ts';\nimport { createOnboardingBranch } from './create.ts';\nimport {\n deleteOnboardingCache,\n hasOnboardingBranchChanged,\n isOnboardingBranchConflicted,\n isOnboardingBranchModified,\n setOnboardingCache,\n} from './onboarding-branch-cache.ts';\nimport { rebaseOnboardingBranch } from './rebase.ts';\n\nexport async function checkOnboardingBranch(\n config: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('checkOnboarding()');\n logger.trace({ config });\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch');\n const defaultBranch = config.defaultBranch!;\n let isConflicted = false;\n let isModified = false;\n const repoIsOnboarded = await isOnboarded(config);\n if (repoIsOnboarded) {\n logger.debug('Repo is onboarded');\n\n // delete onboarding cache\n deleteOnboardingCache();\n return { ...config, repoIsOnboarded };\n }\n checkIfConfigured(config);\n\n logger.debug('Repo is not onboarded');\n // global gitAuthor will need to be used\n setGitAuthor(config.gitAuthor);\n const onboardingPr = await getOnboardingPr(config);\n // TODO #22198\n const branchList = [onboardingBranch!];\n if (onboardingPr) {\n logger.debug('Onboarding PR already exists');\n\n isModified = await isOnboardingBranchModified(\n onboardingBranch!,\n defaultBranch,\n );\n // if onboarding branch is not modified, check if onboarding config has been changed and rebase if true\n if (!isModified) {\n const commit = await rebaseOnboardingBranch(\n config,\n onboardingPr.bodyStruct?.rawConfigHash,\n );\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch updated',\n );\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(onboardingPr.number);\n }\n }\n if (config.onboardingRebaseCheckbox) {\n handleOnboardingManualRebase(onboardingPr);\n }\n\n if (\n isConfigHashPresent(onboardingPr) && // needed so that existing onboarding PRs are updated with config hash comment\n isOnboardingCacheValid(defaultBranch, onboardingBranch!) &&\n !(config.onboardingRebaseCheckbox && OnboardingState.prUpdateRequested)\n ) {\n logger.debug(\n 'Skip processing since the onboarding branch is up to date and default branch has not changed',\n );\n OnboardingState.onboardingCacheValid = true;\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n }\n OnboardingState.onboardingCacheValid = false;\n if (isModified) {\n if (hasOnboardingBranchChanged(onboardingBranch!)) {\n invalidateExtractCache(config.baseBranch!);\n }\n isConflicted = await isOnboardingBranchConflicted(\n config.baseBranch!,\n onboardingBranch!,\n );\n }\n } else {\n logger.debug('Onboarding PR does not exist');\n const onboardingConfig = await getOnboardingConfig(config);\n let mergedConfig = mergeChildConfig(config, onboardingConfig);\n mergedConfig = await mergeRenovateConfig(mergedConfig);\n\n if (\n Object.entries((await extractAllDependencies(mergedConfig)).packageFiles)\n .length === 0\n ) {\n if (getInheritedOrGlobal('onboardingNoDeps') !== 'enabled') {\n throw new Error(REPOSITORY_NO_PACKAGE_FILES);\n }\n }\n logger.debug('Need to create onboarding PR');\n if (config.onboardingRebaseCheckbox) {\n OnboardingState.prUpdateRequested = true;\n }\n const commit = await createOnboardingBranch(mergedConfig);\n // istanbul ignore if\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch created',\n );\n }\n }\n if (!GlobalConfig.get('dryRun')) {\n // TODO #22198\n if (!isConflicted) {\n logger.debug('Merge onboarding branch in default branch');\n await scm.mergeToLocal(onboardingBranch!);\n }\n }\n setOnboardingCache(\n getBranchCommit(config.defaultBranch!)!,\n getBranchCommit(onboardingBranch!)!,\n isConflicted,\n isModified,\n );\n\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n}\n\nfunction handleOnboardingManualRebase(onboardingPr: Pr): void {\n const pl = GlobalConfig.get('platform');\n const { rebaseRequested } = onboardingPr.bodyStruct ?? {};\n if (!['github', 'gitlab', 'gitea'].includes(pl)) {\n logger.trace(`Platform '${pl}' does not support extended markdown`);\n OnboardingState.prUpdateRequested = true;\n } else if (isNullOrUndefined(rebaseRequested)) {\n logger.debug('No rebase checkbox was found in the onboarding PR');\n OnboardingState.prUpdateRequested = true;\n } else if (rebaseRequested) {\n logger.debug('Manual onboarding PR update requested');\n OnboardingState.prUpdateRequested = true;\n }\n}\n\nfunction invalidateExtractCache(baseBranch: string): void {\n const cache = getCache();\n cache.scan ??= {};\n\n if (cache.scan?.[baseBranch]) {\n delete cache.scan[baseBranch];\n }\n}\n\nfunction isOnboardingCacheValid(\n defaultBranch: string,\n onboardingBranch: string,\n): boolean {\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n return !!(\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha === getBranchCommit(defaultBranch) &&\n onboardingBranchCache.onboardingBranchSha ===\n getBranchCommit(onboardingBranch) &&\n onboardingBranchCache.configFileName &&\n onboardingBranchCache.configFileParsed\n );\n}\n\nfunction isConfigHashPresent(pr: Pr): boolean {\n const platform = GlobalConfig.get('platform');\n // if platform does not support html comments return true\n if (!['github', 'gitlab', 'gitea'].includes(platform)) {\n return true;\n }\n\n return !!pr.bodyStruct?.rawConfigHash;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/index.ts"],"sourcesContent":["import { isNonEmptyObject, isNullOrUndefined } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_NO_PACKAGE_FILES } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { type Pr, platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getBranchCommit, setGitAuthor } from '../../../../util/git/index.ts';\nimport { checkIfConfigured } from '../../configured.ts';\nimport { extractAllDependencies } from '../../extract/index.ts';\nimport { mergeRenovateConfig } from '../../init/merge.ts';\nimport { OnboardingState } from '../common.ts';\nimport { getOnboardingPr, isOnboarded } from './check.ts';\nimport { getOnboardingConfig } from './config.ts';\nimport { createOnboardingBranch } from './create.ts';\nimport {\n deleteOnboardingCache,\n hasOnboardingBranchChanged,\n isOnboardingBranchConflicted,\n isOnboardingBranchModified,\n setOnboardingCache,\n} from './onboarding-branch-cache.ts';\nimport { rebaseOnboardingBranch } from './rebase.ts';\n\nexport async function checkOnboardingBranch(\n config: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('checkOnboarding()');\n logger.trace({ config });\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch');\n const defaultBranch = config.defaultBranch!;\n let isConflicted = false;\n let isModified = false;\n const repoIsOnboarded = await isOnboarded(config);\n if (repoIsOnboarded) {\n logger.debug('Repo is onboarded');\n\n // delete onboarding cache\n deleteOnboardingCache();\n return { ...config, repoIsOnboarded };\n }\n checkIfConfigured(config);\n\n logger.debug('Repo is not onboarded');\n // global gitAuthor will need to be used\n setGitAuthor(config.gitAuthor);\n const onboardingPr = await getOnboardingPr(config);\n // TODO #22198\n const branchList = [onboardingBranch!];\n if (onboardingPr) {\n logger.debug('Onboarding PR already exists');\n\n isModified = await isOnboardingBranchModified(\n onboardingBranch!,\n defaultBranch,\n );\n // if onboarding branch is not modified, check if onboarding config has been changed and rebase if true\n if (!isModified) {\n const commit = await rebaseOnboardingBranch(\n config,\n onboardingPr.bodyStruct?.rawConfigHash,\n );\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch updated',\n );\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(onboardingPr.number);\n }\n }\n if (config.onboardingRebaseCheckbox) {\n handleOnboardingManualRebase(onboardingPr);\n }\n\n if (\n isConfigHashPresent(onboardingPr) && // needed so that existing onboarding PRs are updated with config hash comment\n isOnboardingCacheValid(defaultBranch, onboardingBranch!) &&\n !(config.onboardingRebaseCheckbox && OnboardingState.prUpdateRequested)\n ) {\n logger.debug(\n 'Skip processing since the onboarding branch is up to date and default branch has not changed',\n );\n OnboardingState.onboardingCacheValid = true;\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n }\n OnboardingState.onboardingCacheValid = false;\n if (isModified) {\n if (hasOnboardingBranchChanged(onboardingBranch!)) {\n invalidateExtractCache(config.baseBranch!);\n }\n isConflicted = await isOnboardingBranchConflicted(\n config.baseBranch!,\n onboardingBranch!,\n );\n }\n } else {\n logger.debug('Onboarding PR does not exist');\n const onboardingConfig = await getOnboardingConfig(config);\n let mergedConfig = mergeChildConfig(config, onboardingConfig);\n mergedConfig = await mergeRenovateConfig(mergedConfig);\n\n if (\n Object.entries((await extractAllDependencies(mergedConfig)).packageFiles)\n .length === 0 &&\n getInheritedOrGlobal('onboardingNoDeps') !== 'enabled'\n ) {\n throw new Error(REPOSITORY_NO_PACKAGE_FILES);\n }\n logger.debug('Need to create onboarding PR');\n if (config.onboardingRebaseCheckbox) {\n OnboardingState.prUpdateRequested = true;\n }\n const commit = await createOnboardingBranch(mergedConfig);\n // istanbul ignore if\n if (commit) {\n logger.info(\n { branch: onboardingBranch, commit, onboarding: true },\n 'Branch created',\n );\n }\n }\n // TODO #22198\n if (!GlobalConfig.get('dryRun') && !isConflicted) {\n logger.debug('Merge onboarding branch in default branch');\n await scm.mergeToLocal(onboardingBranch!);\n }\n setOnboardingCache(\n getBranchCommit(config.defaultBranch!)!,\n getBranchCommit(onboardingBranch!)!,\n isConflicted,\n isModified,\n );\n\n return { ...config, repoIsOnboarded, onboardingBranch, branchList };\n}\n\nfunction handleOnboardingManualRebase(onboardingPr: Pr): void {\n const pl = GlobalConfig.get('platform');\n const { rebaseRequested } = onboardingPr.bodyStruct ?? {};\n if (!['github', 'gitlab', 'gitea'].includes(pl)) {\n logger.trace(`Platform '${pl}' does not support extended markdown`);\n OnboardingState.prUpdateRequested = true;\n } else if (isNullOrUndefined(rebaseRequested)) {\n logger.debug('No rebase checkbox was found in the onboarding PR');\n OnboardingState.prUpdateRequested = true;\n } else if (rebaseRequested) {\n logger.debug('Manual onboarding PR update requested');\n OnboardingState.prUpdateRequested = true;\n }\n}\n\nfunction invalidateExtractCache(baseBranch: string): void {\n const cache = getCache();\n cache.scan ??= {};\n\n if (cache.scan?.[baseBranch]) {\n delete cache.scan[baseBranch];\n }\n}\n\nfunction isOnboardingCacheValid(\n defaultBranch: string,\n onboardingBranch: string,\n): boolean {\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n return !!(\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha === getBranchCommit(defaultBranch) &&\n onboardingBranchCache.onboardingBranchSha ===\n getBranchCommit(onboardingBranch) &&\n onboardingBranchCache.configFileName &&\n onboardingBranchCache.configFileParsed\n );\n}\n\nfunction isConfigHashPresent(pr: Pr): boolean {\n const platform = GlobalConfig.get('platform');\n // if platform does not support html comments return true\n if (!['github', 'gitlab', 'gitea'].includes(platform)) {\n return true;\n }\n\n return !!pr.bodyStruct?.rawConfigHash;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,eAAsB,sBACpB,QACyB;CACzB,OAAO,MAAM,mBAAmB;CAChC,OAAO,MAAM,EAAE,OAAO,CAAC;CACvB,MAAM,mBAAmB,qBAAqB,kBAAkB;CAChE,MAAM,gBAAgB,OAAO;CAC7B,IAAI,eAAe;CACnB,IAAI,aAAa;CACjB,MAAM,kBAAkB,MAAM,YAAY,MAAM;CAChD,IAAI,iBAAiB;EACnB,OAAO,MAAM,mBAAmB;EAGhC,sBAAsB;EACtB,OAAO;GAAE,GAAG;GAAQ;EAAgB;CACtC;CACA,kBAAkB,MAAM;CAExB,OAAO,MAAM,uBAAuB;CAEpC,aAAa,OAAO,SAAS;CAC7B,MAAM,eAAe,MAAM,gBAAgB,MAAM;CAEjD,MAAM,aAAa,CAAC,gBAAiB;CACrC,IAAI,cAAc;EAChB,OAAO,MAAM,8BAA8B;EAE3C,aAAa,MAAM,2BACjB,kBACA,aACF;EAEA,IAAI,CAAC,YAAY;GACf,MAAM,SAAS,MAAM,uBACnB,QACA,aAAa,YAAY,aAC3B;GACA,IAAI,QACF,OAAO,KACL;IAAE,QAAQ;IAAkB;IAAQ,YAAY;GAAK,GACrD,gBACF;;GAGF,IAAI,SAAS,WACX,MAAM,SAAS,UAAU,aAAa,MAAM;EAEhD;EACA,IAAI,OAAO,0BACT,6BAA6B,YAAY;EAG3C,IACE,oBAAoB,YAAY,KAChC,uBAAuB,eAAe,gBAAiB,KACvD,EAAE,OAAO,4BAA4B,gBAAgB,oBACrD;GACA,OAAO,MACL,8FACF;GACA,gBAAgB,uBAAuB;GACvC,OAAO;IAAE,GAAG;IAAQ;IAAiB;IAAkB;GAAW;EACpE;EACA,gBAAgB,uBAAuB;EACvC,IAAI,YAAY;GACd,IAAI,2BAA2B,gBAAiB,GAC9C,uBAAuB,OAAO,UAAW;GAE3C,eAAe,MAAM,6BACnB,OAAO,YACP,gBACF;EACF;CACF,OAAO;EACL,OAAO,MAAM,8BAA8B;EAE3C,IAAI,eAAe,iBAAiB,QAAQ,MADb,oBAAoB,MAAM,CACG;EAC5D,eAAe,MAAM,oBAAoB,YAAY;EAErD,IACE,OAAO,SAAS,MAAM,uBAAuB,YAAY,EAAA,CAAG,YAAY,CAAC,CACtE,WAAW,KACd,qBAAqB,kBAAkB,MAAM,WAE7C,MAAM,IAAI,MAAM,2BAA2B;EAE7C,OAAO,MAAM,8BAA8B;EAC3C,IAAI,OAAO,0BACT,gBAAgB,oBAAoB;EAEtC,MAAM,SAAS,MAAM,uBAAuB,YAAY;;EAExD,IAAI,QACF,OAAO,KACL;GAAE,QAAQ;GAAkB;GAAQ,YAAY;EAAK,GACrD,gBACF;CAEJ;CAEA,IAAI,CAAC,aAAa,IAAI,QAAQ,KAAK,CAAC,cAAc;EAChD,OAAO,MAAM,2CAA2C;EACxD,MAAM,IAAI,aAAa,gBAAiB;CAC1C;CACA,mBACE,gBAAgB,OAAO,aAAc,GACrC,gBAAgB,gBAAiB,GACjC,cACA,UACF;CAEA,OAAO;EAAE,GAAG;EAAQ;EAAiB;EAAkB;CAAW;AACpE;AAEA,SAAS,6BAA6B,cAAwB;CAC5D,MAAM,KAAK,aAAa,IAAI,UAAU;CACtC,MAAM,EAAE,oBAAoB,aAAa,cAAc,CAAC;CACxD,IAAI,CAAC;EAAC;EAAU;EAAU;CAAO,CAAC,CAAC,SAAS,EAAE,GAAG;EAC/C,OAAO,MAAM,aAAa,GAAG,qCAAqC;EAClE,gBAAgB,oBAAoB;CACtC,OAAO,IAAI,kBAAkB,eAAe,GAAG;EAC7C,OAAO,MAAM,mDAAmD;EAChE,gBAAgB,oBAAoB;CACtC,OAAO,IAAI,iBAAiB;EAC1B,OAAO,MAAM,uCAAuC;EACpD,gBAAgB,oBAAoB;CACtC;AACF;AAEA,SAAS,uBAAuB,YAA0B;CACxD,MAAM,QAAQ,SAAS;CACvB,MAAM,SAAS,CAAC;CAEhB,IAAI,MAAM,OAAO,aACf,OAAO,MAAM,KAAK;AAEtB;AAEA,SAAS,uBACP,eACA,kBACS;CAET,MAAM,wBADQ,SACoB,CAAC,EAAE;CACrC,OAAO,CAAC,EACN,iBAAiB,qBAAqB,KACtC,sBAAsB,qBAAqB,gBAAgB,aAAa,KACxE,sBAAsB,wBACpB,gBAAgB,gBAAgB,KAClC,sBAAsB,kBACtB,sBAAsB;AAE1B;AAEA,SAAS,oBAAoB,IAAiB;CAC5C,MAAM,WAAW,aAAa,IAAI,UAAU;CAE5C,IAAI,CAAC;EAAC;EAAU;EAAU;CAAO,CAAC,CAAC,SAAS,QAAQ,GAClD,OAAO;CAGT,OAAO,CAAC,CAAC,GAAG,YAAY;AAC1B"}
@@ -38,7 +38,7 @@ async function isOnboardingBranchModified(onboardingBranch, defaultBranch) {
38
38
  const onboardingSha = getBranchCommit(onboardingBranch);
39
39
  let isModified = false;
40
40
  if (isNonEmptyObject(onboardingCache) && onboardingSha === onboardingCache.onboardingBranchSha && !isUndefined(onboardingCache.isModified)) return onboardingCache.isModified;
41
- else isModified = await scm.isBranchModified(onboardingBranch, defaultBranch);
41
+ isModified = await scm.isBranchModified(onboardingBranch, defaultBranch);
42
42
  return isModified;
43
43
  }
44
44
  function getOnboardingFileNameFromCache() {
@@ -60,7 +60,7 @@ async function isOnboardingBranchConflicted(defaultBranch, onboardingBranch) {
60
60
  const defaultBranchSha = getBranchCommit(defaultBranch);
61
61
  let isConflicted = false;
62
62
  if (isNonEmptyObject(onboardingCache) && defaultBranchSha === onboardingCache.defaultBranchSha && onboardingSha === onboardingCache.onboardingBranchSha && !isUndefined(onboardingCache.isConflicted)) return onboardingCache.isConflicted;
63
- else isConflicted = await scm.isBranchConflicted(defaultBranch, onboardingBranch);
63
+ isConflicted = await scm.isBranchConflicted(defaultBranch, onboardingBranch);
64
64
  return isConflicted;
65
65
  }
66
66
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-branch-cache.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts"],"sourcesContent":["import {\n isNonEmptyObject,\n isNonEmptyString,\n isUndefined,\n} from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getBranchCommit } from '../../../../util/git/index.ts';\n\nexport function setOnboardingCache(\n defaultBranchSha: string,\n onboardingBranchSha: string,\n isConflicted: boolean,\n isModified: boolean,\n): void {\n // do not update cache if commit is null/undefined\n if (\n !(\n isNonEmptyString(defaultBranchSha) &&\n isNonEmptyString(onboardingBranchSha)\n )\n ) {\n logger.debug('Onboarding cache not updated');\n return;\n }\n\n const cache = getCache();\n const onboardingCache = {\n defaultBranchSha,\n onboardingBranchSha,\n isConflicted,\n isModified,\n };\n if (cache.onboardingBranchCache) {\n logger.debug({ onboardingCache }, 'Update Onboarding Cache');\n } else {\n logger.debug({ onboardingCache }, 'Create Onboarding Cache');\n }\n cache.onboardingBranchCache = onboardingCache;\n}\n\nexport function deleteOnboardingCache(): void {\n const cache = getCache();\n\n if (cache?.onboardingBranchCache) {\n logger.debug('Delete Onboarding Cache');\n delete cache.onboardingBranchCache;\n }\n}\n\n// checks if onboarding branch has been modified since last run\n// return true if cache isn't present\nexport function hasOnboardingBranchChanged(onboardingBranch: string): boolean {\n const cache = getCache();\n const onboardingSha = getBranchCommit(onboardingBranch);\n\n if (cache.onboardingBranchCache) {\n return onboardingSha !== cache.onboardingBranchCache.onboardingBranchSha;\n }\n return true;\n}\n\n// checks if onboarding branch has been modified by user\n// once set to true it stays true as we do not rebase onboarding branches anymore (this feature will be added in future though)\nexport async function isOnboardingBranchModified(\n onboardingBranch: string,\n defaultBranch: string,\n): Promise<boolean> {\n const cache = getCache();\n const onboardingCache = cache.onboardingBranchCache;\n const onboardingSha = getBranchCommit(onboardingBranch);\n let isModified = false;\n\n if (\n isNonEmptyObject(onboardingCache) &&\n onboardingSha === onboardingCache.onboardingBranchSha &&\n !isUndefined(onboardingCache.isModified)\n ) {\n return onboardingCache.isModified;\n } else {\n isModified = await scm.isBranchModified(onboardingBranch, defaultBranch);\n }\n\n return isModified;\n}\n\nexport function getOnboardingFileNameFromCache(): string | undefined {\n const cache = getCache();\n return cache.onboardingBranchCache?.configFileName;\n}\n\nexport function getOnboardingConfigFromCache(): string | undefined {\n const cache = getCache();\n return cache.onboardingBranchCache?.configFileParsed;\n}\n\nexport function setOnboardingConfigDetails(\n configFileName: string,\n configFileParsed: string,\n): void {\n const cache = getCache();\n if (cache.onboardingBranchCache) {\n cache.onboardingBranchCache.configFileName = configFileName;\n cache.onboardingBranchCache.configFileParsed = configFileParsed;\n }\n}\n\nexport async function isOnboardingBranchConflicted(\n defaultBranch: string,\n onboardingBranch: string,\n): Promise<boolean> {\n const cache = getCache();\n const onboardingCache = cache.onboardingBranchCache;\n const onboardingSha = getBranchCommit(onboardingBranch);\n const defaultBranchSha = getBranchCommit(defaultBranch);\n let isConflicted = false;\n\n if (\n isNonEmptyObject(onboardingCache) &&\n defaultBranchSha === onboardingCache.defaultBranchSha &&\n onboardingSha === onboardingCache.onboardingBranchSha &&\n !isUndefined(onboardingCache.isConflicted)\n ) {\n return onboardingCache.isConflicted;\n } else {\n isConflicted = await scm.isBranchConflicted(\n defaultBranch,\n onboardingBranch,\n );\n }\n\n return isConflicted;\n}\n"],"mappings":";;;;;;AAUA,SAAgB,mBACd,kBACA,qBACA,cACA,YACM;CAEN,IACE,EACE,iBAAiB,gBAAgB,KACjC,iBAAiB,mBAAmB,IAEtC;EACA,OAAO,MAAM,8BAA8B;EAC3C;CACF;CAEA,MAAM,QAAQ,SAAS;CACvB,MAAM,kBAAkB;EACtB;EACA;EACA;EACA;CACF;CACA,IAAI,MAAM,uBACR,OAAO,MAAM,EAAE,gBAAgB,GAAG,yBAAyB;MAE3D,OAAO,MAAM,EAAE,gBAAgB,GAAG,yBAAyB;CAE7D,MAAM,wBAAwB;AAChC;AAEA,SAAgB,wBAA8B;CAC5C,MAAM,QAAQ,SAAS;CAEvB,IAAI,OAAO,uBAAuB;EAChC,OAAO,MAAM,yBAAyB;EACtC,OAAO,MAAM;CACf;AACF;AAIA,SAAgB,2BAA2B,kBAAmC;CAC5E,MAAM,QAAQ,SAAS;CACvB,MAAM,gBAAgB,gBAAgB,gBAAgB;CAEtD,IAAI,MAAM,uBACR,OAAO,kBAAkB,MAAM,sBAAsB;CAEvD,OAAO;AACT;AAIA,eAAsB,2BACpB,kBACA,eACkB;CAElB,MAAM,kBADQ,SACc,CAAC,CAAC;CAC9B,MAAM,gBAAgB,gBAAgB,gBAAgB;CACtD,IAAI,aAAa;CAEjB,IACE,iBAAiB,eAAe,KAChC,kBAAkB,gBAAgB,uBAClC,CAAC,YAAY,gBAAgB,UAAU,GAEvC,OAAO,gBAAgB;MAEvB,aAAa,MAAM,IAAI,iBAAiB,kBAAkB,aAAa;CAGzE,OAAO;AACT;AAEA,SAAgB,iCAAqD;CAEnE,OADc,SACH,CAAC,CAAC,uBAAuB;AACtC;AAEA,SAAgB,+BAAmD;CAEjE,OADc,SACH,CAAC,CAAC,uBAAuB;AACtC;AAEA,SAAgB,2BACd,gBACA,kBACM;CACN,MAAM,QAAQ,SAAS;CACvB,IAAI,MAAM,uBAAuB;EAC/B,MAAM,sBAAsB,iBAAiB;EAC7C,MAAM,sBAAsB,mBAAmB;CACjD;AACF;AAEA,eAAsB,6BACpB,eACA,kBACkB;CAElB,MAAM,kBADQ,SACc,CAAC,CAAC;CAC9B,MAAM,gBAAgB,gBAAgB,gBAAgB;CACtD,MAAM,mBAAmB,gBAAgB,aAAa;CACtD,IAAI,eAAe;CAEnB,IACE,iBAAiB,eAAe,KAChC,qBAAqB,gBAAgB,oBACrC,kBAAkB,gBAAgB,uBAClC,CAAC,YAAY,gBAAgB,YAAY,GAEzC,OAAO,gBAAgB;MAEvB,eAAe,MAAM,IAAI,mBACvB,eACA,gBACF;CAGF,OAAO;AACT"}
1
+ {"version":3,"file":"onboarding-branch-cache.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/branch/onboarding-branch-cache.ts"],"sourcesContent":["import {\n isNonEmptyObject,\n isNonEmptyString,\n isUndefined,\n} from '@sindresorhus/is';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getCache } from '../../../../util/cache/repository/index.ts';\nimport { getBranchCommit } from '../../../../util/git/index.ts';\n\nexport function setOnboardingCache(\n defaultBranchSha: string,\n onboardingBranchSha: string,\n isConflicted: boolean,\n isModified: boolean,\n): void {\n // do not update cache if commit is null/undefined\n if (\n !(\n isNonEmptyString(defaultBranchSha) &&\n isNonEmptyString(onboardingBranchSha)\n )\n ) {\n logger.debug('Onboarding cache not updated');\n return;\n }\n\n const cache = getCache();\n const onboardingCache = {\n defaultBranchSha,\n onboardingBranchSha,\n isConflicted,\n isModified,\n };\n if (cache.onboardingBranchCache) {\n logger.debug({ onboardingCache }, 'Update Onboarding Cache');\n } else {\n logger.debug({ onboardingCache }, 'Create Onboarding Cache');\n }\n cache.onboardingBranchCache = onboardingCache;\n}\n\nexport function deleteOnboardingCache(): void {\n const cache = getCache();\n\n if (cache?.onboardingBranchCache) {\n logger.debug('Delete Onboarding Cache');\n delete cache.onboardingBranchCache;\n }\n}\n\n// checks if onboarding branch has been modified since last run\n// return true if cache isn't present\nexport function hasOnboardingBranchChanged(onboardingBranch: string): boolean {\n const cache = getCache();\n const onboardingSha = getBranchCommit(onboardingBranch);\n\n if (cache.onboardingBranchCache) {\n return onboardingSha !== cache.onboardingBranchCache.onboardingBranchSha;\n }\n return true;\n}\n\n// checks if onboarding branch has been modified by user\n// once set to true it stays true as we do not rebase onboarding branches anymore (this feature will be added in future though)\nexport async function isOnboardingBranchModified(\n onboardingBranch: string,\n defaultBranch: string,\n): Promise<boolean> {\n const cache = getCache();\n const onboardingCache = cache.onboardingBranchCache;\n const onboardingSha = getBranchCommit(onboardingBranch);\n let isModified = false;\n\n if (\n isNonEmptyObject(onboardingCache) &&\n onboardingSha === onboardingCache.onboardingBranchSha &&\n !isUndefined(onboardingCache.isModified)\n ) {\n return onboardingCache.isModified;\n }\n isModified = await scm.isBranchModified(onboardingBranch, defaultBranch);\n\n return isModified;\n}\n\nexport function getOnboardingFileNameFromCache(): string | undefined {\n const cache = getCache();\n return cache.onboardingBranchCache?.configFileName;\n}\n\nexport function getOnboardingConfigFromCache(): string | undefined {\n const cache = getCache();\n return cache.onboardingBranchCache?.configFileParsed;\n}\n\nexport function setOnboardingConfigDetails(\n configFileName: string,\n configFileParsed: string,\n): void {\n const cache = getCache();\n if (cache.onboardingBranchCache) {\n cache.onboardingBranchCache.configFileName = configFileName;\n cache.onboardingBranchCache.configFileParsed = configFileParsed;\n }\n}\n\nexport async function isOnboardingBranchConflicted(\n defaultBranch: string,\n onboardingBranch: string,\n): Promise<boolean> {\n const cache = getCache();\n const onboardingCache = cache.onboardingBranchCache;\n const onboardingSha = getBranchCommit(onboardingBranch);\n const defaultBranchSha = getBranchCommit(defaultBranch);\n let isConflicted = false;\n\n if (\n isNonEmptyObject(onboardingCache) &&\n defaultBranchSha === onboardingCache.defaultBranchSha &&\n onboardingSha === onboardingCache.onboardingBranchSha &&\n !isUndefined(onboardingCache.isConflicted)\n ) {\n return onboardingCache.isConflicted;\n }\n isConflicted = await scm.isBranchConflicted(defaultBranch, onboardingBranch);\n\n return isConflicted;\n}\n"],"mappings":";;;;;;AAUA,SAAgB,mBACd,kBACA,qBACA,cACA,YACM;CAEN,IACE,EACE,iBAAiB,gBAAgB,KACjC,iBAAiB,mBAAmB,IAEtC;EACA,OAAO,MAAM,8BAA8B;EAC3C;CACF;CAEA,MAAM,QAAQ,SAAS;CACvB,MAAM,kBAAkB;EACtB;EACA;EACA;EACA;CACF;CACA,IAAI,MAAM,uBACR,OAAO,MAAM,EAAE,gBAAgB,GAAG,yBAAyB;MAE3D,OAAO,MAAM,EAAE,gBAAgB,GAAG,yBAAyB;CAE7D,MAAM,wBAAwB;AAChC;AAEA,SAAgB,wBAA8B;CAC5C,MAAM,QAAQ,SAAS;CAEvB,IAAI,OAAO,uBAAuB;EAChC,OAAO,MAAM,yBAAyB;EACtC,OAAO,MAAM;CACf;AACF;AAIA,SAAgB,2BAA2B,kBAAmC;CAC5E,MAAM,QAAQ,SAAS;CACvB,MAAM,gBAAgB,gBAAgB,gBAAgB;CAEtD,IAAI,MAAM,uBACR,OAAO,kBAAkB,MAAM,sBAAsB;CAEvD,OAAO;AACT;AAIA,eAAsB,2BACpB,kBACA,eACkB;CAElB,MAAM,kBADQ,SACc,CAAC,CAAC;CAC9B,MAAM,gBAAgB,gBAAgB,gBAAgB;CACtD,IAAI,aAAa;CAEjB,IACE,iBAAiB,eAAe,KAChC,kBAAkB,gBAAgB,uBAClC,CAAC,YAAY,gBAAgB,UAAU,GAEvC,OAAO,gBAAgB;CAEzB,aAAa,MAAM,IAAI,iBAAiB,kBAAkB,aAAa;CAEvE,OAAO;AACT;AAEA,SAAgB,iCAAqD;CAEnE,OADc,SACH,CAAC,CAAC,uBAAuB;AACtC;AAEA,SAAgB,+BAAmD;CAEjE,OADc,SACH,CAAC,CAAC,uBAAuB;AACtC;AAEA,SAAgB,2BACd,gBACA,kBACM;CACN,MAAM,QAAQ,SAAS;CACvB,IAAI,MAAM,uBAAuB;EAC/B,MAAM,sBAAsB,iBAAiB;EAC7C,MAAM,sBAAsB,mBAAmB;CACjD;AACF;AAEA,eAAsB,6BACpB,eACA,kBACkB;CAElB,MAAM,kBADQ,SACc,CAAC,CAAC;CAC9B,MAAM,gBAAgB,gBAAgB,gBAAgB;CACtD,MAAM,mBAAmB,gBAAgB,aAAa;CACtD,IAAI,eAAe;CAEnB,IACE,iBAAiB,eAAe,KAChC,qBAAqB,gBAAgB,oBACrC,kBAAkB,gBAAgB,uBAClC,CAAC,YAAY,gBAAgB,YAAY,GAEzC,OAAO,gBAAgB;CAEzB,eAAe,MAAM,IAAI,mBAAmB,eAAe,gBAAgB;CAE3E,OAAO;AACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"extract-update.js","names":[],"sources":["../../../../lib/workers/repository/process/extract-update.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { instrument } from '../../../instrumentation/index.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { hashMap } from '../../../modules/manager/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { isNotNullOrUndefined } from '../../../util/array.ts';\nimport * as memCache from '../../../util/cache/memory/index.ts';\nimport { getCache } from '../../../util/cache/repository/index.ts';\nimport type { BaseBranchCache } from '../../../util/cache/repository/types.ts';\nimport { checkGithubToken as ensureGithubToken } from '../../../util/check-token.ts';\nimport { fingerprint } from '../../../util/fingerprint.ts';\nimport type { BranchConfig } from '../../types.ts';\nimport { generateFingerprintConfig } from '../extract/extract-fingerprint-config.ts';\nimport { extractAllDependencies } from '../extract/index.ts';\nimport { branchifyUpgrades } from '../updates/branchify.ts';\nimport { fetchUpdates } from './fetch.ts';\nimport { calculateLibYears } from './libyear.ts';\nimport { sortBranches } from './sort.ts';\nimport { Vulnerabilities } from './vulnerabilities.ts';\nimport type { WriteUpdateResult } from './write.ts';\nimport { writeUpdates } from './write.ts';\n\n// Increment this if needing to cache bust ALL extract caches\nexport const EXTRACT_CACHE_REVISION = 1;\n\nexport interface ExtractResult {\n branches: BranchConfig[];\n branchList: string[];\n packageFiles: Record<string, PackageFile[]>;\n}\n\nexport interface StatsResult {\n fileCount: number;\n depCount: number;\n}\n\nexport interface Stats {\n managers: Record<string, StatsResult>;\n total: StatsResult;\n}\n\n// istanbul ignore next\nfunction extractStats(\n packageFiles: Record<string, PackageFile[]>,\n): Stats | null {\n if (!packageFiles) {\n return null;\n }\n const stats: Stats = {\n managers: {},\n total: {\n fileCount: 0,\n depCount: 0,\n },\n };\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n const fileCount = managerPackageFiles.length;\n let depCount = 0;\n for (const file of managerPackageFiles) {\n depCount += file.deps.length;\n }\n stats.managers[manager] = {\n fileCount,\n depCount,\n };\n stats.total.fileCount += fileCount;\n stats.total.depCount += depCount;\n }\n return stats;\n}\n\nexport function isCacheExtractValid(\n baseBranchSha: string,\n configHash: string,\n cachedExtract?: BaseBranchCache,\n): boolean {\n if (!cachedExtract) {\n return false;\n }\n\n if (!cachedExtract.revision) {\n logger.debug('Cached extract is missing revision, so cannot be used');\n return false;\n }\n\n if (cachedExtract.revision !== EXTRACT_CACHE_REVISION) {\n logger.debug(\n `Extract cache revision has changed (old=${cachedExtract.revision}, new=${EXTRACT_CACHE_REVISION})`,\n );\n return false;\n }\n\n if (!(cachedExtract.sha && cachedExtract.configHash)) {\n return false;\n }\n if (cachedExtract.sha !== baseBranchSha) {\n logger.debug(\n `Cached extract result cannot be used due to base branch SHA change (old=${cachedExtract.sha}, new=${baseBranchSha})`,\n );\n return false;\n }\n if (cachedExtract.configHash !== configHash) {\n logger.debug('Cached extract result cannot be used due to config change');\n return false;\n }\n if (!cachedExtract.extractionFingerprints) {\n logger.debug(\n 'Cached extract is missing extractionFingerprints, so cannot be used',\n );\n return false;\n }\n const changedManagers = new Set();\n for (const [manager, fingerprint] of Object.entries(\n cachedExtract.extractionFingerprints,\n )) {\n if (fingerprint !== hashMap.get(manager)) {\n changedManagers.add(manager);\n }\n }\n if (changedManagers.size > 0) {\n logger.debug(\n { changedManagers: [...changedManagers] },\n 'Manager fingerprint(s) have changed, extract cache cannot be reused',\n );\n return false;\n }\n logger.debug(\n `Cached extract for sha=${baseBranchSha} is valid and can be used`,\n );\n return true;\n}\n\nexport async function extract(\n config: RenovateConfig,\n overwriteCache = true,\n): Promise<Record<string, PackageFile[]>> {\n logger.debug('extract()');\n const { baseBranch } = config;\n const baseBranchSha = await scm.getBranchCommit(baseBranch!);\n let packageFiles: Record<string, PackageFile[]>;\n const cache = getCache();\n cache.scan ??= {};\n const cachedExtract = cache.scan[baseBranch!];\n const configHash = instrument('fingerprint', () =>\n fingerprint(generateFingerprintConfig(config)),\n );\n // istanbul ignore if\n if (\n overwriteCache &&\n isCacheExtractValid(baseBranchSha!, configHash, cachedExtract)\n ) {\n packageFiles = cachedExtract.packageFiles;\n try {\n for (const files of Object.values(packageFiles)) {\n for (const file of files) {\n for (const dep of file.deps) {\n delete dep.updates;\n }\n }\n }\n logger.debug('Deleted cached dep updates');\n } catch (err) {\n logger.info({ err }, 'Error deleting cached dep updates');\n }\n } else {\n await instrument(\n 'checkoutBranch',\n async () => await scm.checkoutBranch(baseBranch!),\n );\n const extractResult = await instrument(\n 'extractAllDependencies',\n async () => (await extractAllDependencies(config)) || {},\n );\n packageFiles = extractResult.packageFiles;\n const { extractionFingerprints } = extractResult;\n\n if (overwriteCache) {\n // TODO: fix types (#22198)\n cache.scan[baseBranch!] = {\n revision: EXTRACT_CACHE_REVISION,\n sha: baseBranchSha!,\n configHash,\n extractionFingerprints,\n packageFiles,\n };\n }\n\n // Clean up cached branch extracts\n const baseBranches = isNonEmptyArray(config.baseBranches)\n ? config.baseBranches\n : [baseBranch];\n Object.keys(cache.scan).forEach((branchName) => {\n if (!baseBranches.includes(branchName)) {\n delete cache.scan![branchName];\n }\n });\n }\n const stats = extractStats(packageFiles);\n logger.info(\n { baseBranch: config.baseBranch, stats },\n `Dependency extraction complete`,\n );\n logger.trace({ config: packageFiles }, 'packageFiles');\n ensureGithubToken(packageFiles);\n return packageFiles;\n}\n\nasync function fetchVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<void> {\n if (config.osvVulnerabilityAlerts) {\n logger.debug('fetchVulnerabilities() - osvVulnerabilityAlerts=true');\n try {\n const vulnerabilities = await Vulnerabilities.create();\n await vulnerabilities.appendVulnerabilityPackageRules(\n config,\n packageFiles,\n );\n } catch (err) {\n logger.warn({ err }, 'Unable to read vulnerability information');\n }\n }\n}\n\nexport async function lookup(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<ExtractResult> {\n await fetchVulnerabilities(config, packageFiles);\n await fetchUpdates(config, packageFiles);\n // call this twice, as the second time, the updates will be availalbe for malicious package checks\n // TODO: this will be refactored as part of #42423\n await fetchVulnerabilities(config, packageFiles);\n memCache.cleanDatasourceKeys();\n calculateLibYears(config, packageFiles);\n const { branches, branchList } = await branchifyUpgrades(\n config,\n packageFiles,\n );\n reportMaliciousSkippedDependencies(packageFiles);\n logger.debug(\n { baseBranch: config.baseBranch, config: packageFiles },\n 'packageFiles with updates',\n );\n sortBranches(branches);\n return { branches, branchList, packageFiles };\n}\n\nexport function reportMaliciousSkippedDependencies(\n allPackageFiles: Record<string, PackageFile<Record<string, any>>[]>,\n): void {\n if (allPackageFiles === undefined) {\n return;\n }\n\n for (const [manager, packageFiles] of Object.entries(allPackageFiles)) {\n for (const packageFile of packageFiles) {\n for (const dep of packageFile.deps) {\n if (dep.skipReason === 'malicious-version-in-use') {\n logger.warn(\n {\n packageFile: packageFile.packageFile,\n depName: dep.depName,\n packageName: dep.packageName,\n manager: manager,\n datasource: dep.datasource,\n },\n `Dependency ${dep.depName} is currently using a malicious version`,\n );\n\n // and make sure that it then gets updates proposed in the update phase\n delete dep.skipReason;\n delete dep.skipStage;\n } else if (dep.skipReason === 'malicious-update-proposed') {\n const newVersions = dep.updates\n ?.map((u) => u.newVersion ?? u.newValue)\n .filter(isNotNullOrUndefined);\n logger.warn(\n {\n packageFile: packageFile.packageFile,\n depName: dep.depName,\n packageName: dep.packageName,\n manager: manager,\n datasource: dep.datasource,\n newVersions,\n },\n `Dependency ${dep.depName} has update(s) proposed which would update you to a malicious version - skipping`,\n );\n }\n }\n }\n }\n}\n\nexport async function update(\n config: RenovateConfig,\n branches: BranchConfig[],\n): Promise<WriteUpdateResult | undefined> {\n let res: WriteUpdateResult | undefined;\n if (config.repoIsOnboarded) {\n res = await writeUpdates(config, branches);\n }\n\n return res;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"extract-update.js","names":[],"sources":["../../../../lib/workers/repository/process/extract-update.ts"],"sourcesContent":["import { isNonEmptyArray } from '@sindresorhus/is';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { instrument } from '../../../instrumentation/index.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { hashMap } from '../../../modules/manager/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { scm } from '../../../modules/platform/scm.ts';\nimport { isNotNullOrUndefined } from '../../../util/array.ts';\nimport * as memCache from '../../../util/cache/memory/index.ts';\nimport { getCache } from '../../../util/cache/repository/index.ts';\nimport type { BaseBranchCache } from '../../../util/cache/repository/types.ts';\nimport { checkGithubToken as ensureGithubToken } from '../../../util/check-token.ts';\nimport { fingerprint } from '../../../util/fingerprint.ts';\nimport type { BranchConfig } from '../../types.ts';\nimport { generateFingerprintConfig } from '../extract/extract-fingerprint-config.ts';\nimport { extractAllDependencies } from '../extract/index.ts';\nimport { branchifyUpgrades } from '../updates/branchify.ts';\nimport { fetchUpdates } from './fetch.ts';\nimport { calculateLibYears } from './libyear.ts';\nimport { sortBranches } from './sort.ts';\nimport { Vulnerabilities } from './vulnerabilities.ts';\nimport type { WriteUpdateResult } from './write.ts';\nimport { writeUpdates } from './write.ts';\n\n// Increment this if needing to cache bust ALL extract caches\nexport const EXTRACT_CACHE_REVISION = 1;\n\nexport interface ExtractResult {\n branches: BranchConfig[];\n branchList: string[];\n packageFiles: Record<string, PackageFile[]>;\n}\n\nexport interface StatsResult {\n fileCount: number;\n depCount: number;\n}\n\nexport interface Stats {\n managers: Record<string, StatsResult>;\n total: StatsResult;\n}\n\n// istanbul ignore next\nfunction extractStats(\n packageFiles: Record<string, PackageFile[]>,\n): Stats | null {\n if (!packageFiles) {\n return null;\n }\n const stats: Stats = {\n managers: {},\n total: {\n fileCount: 0,\n depCount: 0,\n },\n };\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n const fileCount = managerPackageFiles.length;\n let depCount = 0;\n for (const file of managerPackageFiles) {\n depCount += file.deps.length;\n }\n stats.managers[manager] = {\n fileCount,\n depCount,\n };\n stats.total.fileCount += fileCount;\n stats.total.depCount += depCount;\n }\n return stats;\n}\n\nexport function isCacheExtractValid(\n baseBranchSha: string,\n configHash: string,\n cachedExtract?: BaseBranchCache,\n): boolean {\n if (!cachedExtract) {\n return false;\n }\n\n if (!cachedExtract.revision) {\n logger.debug('Cached extract is missing revision, so cannot be used');\n return false;\n }\n\n if (cachedExtract.revision !== EXTRACT_CACHE_REVISION) {\n logger.debug(\n `Extract cache revision has changed (old=${cachedExtract.revision}, new=${EXTRACT_CACHE_REVISION})`,\n );\n return false;\n }\n\n if (!(cachedExtract.sha && cachedExtract.configHash)) {\n return false;\n }\n if (cachedExtract.sha !== baseBranchSha) {\n logger.debug(\n `Cached extract result cannot be used due to base branch SHA change (old=${cachedExtract.sha}, new=${baseBranchSha})`,\n );\n return false;\n }\n if (cachedExtract.configHash !== configHash) {\n logger.debug('Cached extract result cannot be used due to config change');\n return false;\n }\n if (!cachedExtract.extractionFingerprints) {\n logger.debug(\n 'Cached extract is missing extractionFingerprints, so cannot be used',\n );\n return false;\n }\n const changedManagers = new Set();\n for (const [manager, fingerprint] of Object.entries(\n cachedExtract.extractionFingerprints,\n )) {\n if (fingerprint !== hashMap.get(manager)) {\n changedManagers.add(manager);\n }\n }\n if (changedManagers.size > 0) {\n logger.debug(\n { changedManagers: [...changedManagers] },\n 'Manager fingerprint(s) have changed, extract cache cannot be reused',\n );\n return false;\n }\n logger.debug(\n `Cached extract for sha=${baseBranchSha} is valid and can be used`,\n );\n return true;\n}\n\nexport async function extract(\n config: RenovateConfig,\n overwriteCache = true,\n): Promise<Record<string, PackageFile[]>> {\n logger.debug('extract()');\n const { baseBranch } = config;\n const baseBranchSha = await scm.getBranchCommit(baseBranch!);\n let packageFiles: Record<string, PackageFile[]>;\n const cache = getCache();\n cache.scan ??= {};\n const cachedExtract = cache.scan[baseBranch!];\n const configHash = instrument('fingerprint', () =>\n fingerprint(generateFingerprintConfig(config)),\n );\n // istanbul ignore if\n if (\n overwriteCache &&\n isCacheExtractValid(baseBranchSha!, configHash, cachedExtract)\n ) {\n packageFiles = cachedExtract.packageFiles;\n try {\n for (const files of Object.values(packageFiles)) {\n for (const file of files) {\n for (const dep of file.deps) {\n delete dep.updates;\n }\n }\n }\n logger.debug('Deleted cached dep updates');\n } catch (err) {\n logger.info({ err }, 'Error deleting cached dep updates');\n }\n } else {\n await instrument(\n 'checkoutBranch',\n async () => await scm.checkoutBranch(baseBranch!),\n );\n const extractResult = await instrument(\n 'extractAllDependencies',\n async () => (await extractAllDependencies(config)) || {},\n );\n packageFiles = extractResult.packageFiles;\n const { extractionFingerprints } = extractResult;\n\n if (overwriteCache) {\n // TODO: fix types (#22198)\n cache.scan[baseBranch!] = {\n revision: EXTRACT_CACHE_REVISION,\n sha: baseBranchSha!,\n configHash,\n extractionFingerprints,\n packageFiles,\n };\n }\n\n // Clean up cached branch extracts\n const baseBranches = isNonEmptyArray(config.baseBranches)\n ? config.baseBranches\n : [baseBranch];\n Object.keys(cache.scan).forEach((branchName) => {\n if (!baseBranches.includes(branchName)) {\n delete cache.scan![branchName];\n }\n });\n }\n const stats = extractStats(packageFiles);\n logger.info(\n { baseBranch: config.baseBranch, stats },\n `Dependency extraction complete`,\n );\n logger.trace({ config: packageFiles }, 'packageFiles');\n ensureGithubToken(packageFiles);\n return packageFiles;\n}\n\nasync function fetchVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<void> {\n if (config.osvVulnerabilityAlerts) {\n logger.debug('fetchVulnerabilities() - osvVulnerabilityAlerts=true');\n try {\n const vulnerabilities = await Vulnerabilities.create();\n await vulnerabilities.appendVulnerabilityPackageRules(\n config,\n packageFiles,\n );\n } catch (err) {\n logger.warn({ err }, 'Unable to read vulnerability information');\n }\n }\n}\n\nexport async function lookup(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<ExtractResult> {\n await fetchVulnerabilities(config, packageFiles);\n await fetchUpdates(config, packageFiles);\n // call this twice, as the second time, the updates will be availalbe for malicious package checks\n // TODO: this will be refactored as part of #42423\n await fetchVulnerabilities(config, packageFiles);\n memCache.cleanDatasourceKeys();\n calculateLibYears(config, packageFiles);\n const { branches, branchList } = await branchifyUpgrades(\n config,\n packageFiles,\n );\n reportMaliciousSkippedDependencies(packageFiles);\n logger.debug(\n { baseBranch: config.baseBranch, config: packageFiles },\n 'packageFiles with updates',\n );\n sortBranches(branches);\n return { branches, branchList, packageFiles };\n}\n\nexport function reportMaliciousSkippedDependencies(\n allPackageFiles: Record<string, PackageFile[]>,\n): void {\n if (allPackageFiles === undefined) {\n return;\n }\n\n for (const [manager, packageFiles] of Object.entries(allPackageFiles)) {\n for (const packageFile of packageFiles) {\n for (const dep of packageFile.deps) {\n if (dep.skipReason === 'malicious-version-in-use') {\n logger.warn(\n {\n packageFile: packageFile.packageFile,\n depName: dep.depName,\n packageName: dep.packageName,\n manager: manager,\n datasource: dep.datasource,\n },\n `Dependency ${dep.depName} is currently using a malicious version`,\n );\n\n // and make sure that it then gets updates proposed in the update phase\n delete dep.skipReason;\n delete dep.skipStage;\n } else if (dep.skipReason === 'malicious-update-proposed') {\n const newVersions = dep.updates\n ?.map((u) => u.newVersion ?? u.newValue)\n .filter(isNotNullOrUndefined);\n logger.warn(\n {\n packageFile: packageFile.packageFile,\n depName: dep.depName,\n packageName: dep.packageName,\n manager: manager,\n datasource: dep.datasource,\n newVersions,\n },\n `Dependency ${dep.depName} has update(s) proposed which would update you to a malicious version - skipping`,\n );\n }\n }\n }\n }\n}\n\nexport async function update(\n config: RenovateConfig,\n branches: BranchConfig[],\n): Promise<WriteUpdateResult | undefined> {\n let res: WriteUpdateResult | undefined;\n if (config.repoIsOnboarded) {\n res = await writeUpdates(config, branches);\n }\n\n return res;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","names":["p.all"],"sources":["../../../../lib/workers/repository/process/fetch.ts"],"sourcesContent":["// TODO #22198\nimport { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { getManagerConfig, mergeChildConfig } from '../../../config/index.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { instrument } from '../../../instrumentation/index.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultVersioning } from '../../../modules/datasource/common.ts';\nimport { getDefaultConfig } from '../../../modules/datasource/index.ts';\nimport type {\n PackageDependency,\n PackageFile,\n} from '../../../modules/manager/types.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { clone } from '../../../util/clone.ts';\nimport { applyPackageRules } from '../../../util/package-rules/index.ts';\nimport * as p from '../../../util/promises.ts';\nimport { Result } from '../../../util/result.ts';\nimport { LookupStats } from '../../../util/stats.ts';\nimport { PackageFiles } from '../package-files.ts';\nimport { lookupUpdates } from './lookup/index.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './lookup/types.ts';\n\ntype LookupResult = Result<PackageDependency, Error>;\n\nasync function lookup(\n packageFileConfig: RenovateConfig & PackageFile,\n indep: PackageDependency,\n): Promise<LookupResult> {\n const dep = clone(indep);\n\n dep.updates = [];\n\n if (isString(dep.depName)) {\n dep.depName = dep.depName.trim();\n }\n\n dep.packageName ??= dep.depName;\n\n if (dep.skipReason) {\n return Result.ok(dep);\n }\n\n if (!isNonEmptyString(dep.packageName)) {\n dep.skipReason = 'invalid-name';\n return Result.ok(dep);\n }\n\n if (dep.isInternal && !packageFileConfig.updateInternalDeps) {\n dep.skipReason = 'internal-package';\n return Result.ok(dep);\n }\n\n const { depName } = dep;\n // TODO: fix types\n let depConfig = mergeChildConfig(packageFileConfig, dep);\n const datasourceDefaultConfig = await getDefaultConfig(depConfig.datasource!);\n depConfig = mergeChildConfig(depConfig, datasourceDefaultConfig);\n depConfig.versioning ??= getDefaultVersioning(depConfig.datasource);\n depConfig = await applyPackageRules(depConfig, 'pre-lookup');\n depConfig.packageName ??= depConfig.depName;\n\n if (depConfig.ignoreDeps!.includes(depName!)) {\n // TODO: fix types (#22198)\n logger.debug(`Dependency: ${depName!}, is ignored`);\n dep.skipReason = 'ignored';\n return Result.ok(dep);\n }\n\n if (depConfig.enabled === false) {\n logger.debug(`Dependency: ${depName!}, is disabled`);\n dep.skipReason = 'disabled';\n return Result.ok(dep);\n }\n\n if (!depConfig.datasource) {\n return Result.ok(dep);\n }\n\n return LookupStats.wrap(depConfig.datasource, async () => {\n const { packageFile, manager } = packageFileConfig;\n return await Result.wrap(lookupUpdates(depConfig as LookupUpdateConfig))\n .onValue((dep) => {\n logger.trace(\n { dep, packageFile, manager },\n 'Dependency lookup success',\n );\n })\n .onError((err) => {\n logger.trace(\n { err, depName, packageFile, manager },\n 'Dependency lookup error',\n );\n })\n .catch((err): Result<UpdateResult, Error> => {\n if (\n packageFileConfig.repoIsOnboarded === true ||\n !(err instanceof ExternalHostError)\n ) {\n return Result.err(err);\n }\n\n const cause = err.err;\n return Result.ok({\n updates: [],\n warnings: [\n {\n topic: 'Lookup Error',\n message: `${depName}: ${cause.message}`,\n },\n ],\n });\n })\n .transform((upd): PackageDependency => Object.assign(dep, upd));\n });\n}\n\nasync function fetchManagerPackagerFileUpdates(\n config: RenovateConfig,\n managerConfig: RenovateConfig,\n pFile: PackageFile,\n): Promise<void> {\n const { packageFile } = pFile;\n const packageFileConfig = mergeChildConfig(managerConfig, pFile);\n if (pFile.extractedConstraints) {\n packageFileConfig.constraints = {\n ...pFile.extractedConstraints,\n ...config.constraints,\n };\n }\n const mergedConstraintsVersioning = {\n ...pFile.constraintsVersioning,\n ...config.constraintsVersioning,\n };\n if (Object.keys(mergedConstraintsVersioning).length > 0) {\n packageFileConfig.constraintsVersioning = mergedConstraintsVersioning;\n }\n const { manager } = packageFileConfig;\n const queue = pFile.deps.map(\n (dep) => async (): Promise<PackageDependency> => {\n const updates = await lookup(packageFileConfig, dep);\n return updates.unwrapOrThrow();\n },\n );\n logger.trace(\n { manager, packageFile, queueLength: queue.length },\n 'fetchManagerPackagerFileUpdates starting with concurrency',\n );\n\n pFile.deps = await p.all(queue);\n logger.trace(\n { manager, packageFile },\n 'fetchManagerPackagerFileUpdates finished',\n );\n}\n\nasync function fetchManagerUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n manager: string,\n): Promise<void> {\n const managerConfig = getManagerConfig(config, manager);\n const queue = packageFiles[manager].map(\n (pFile) => (): Promise<void> =>\n fetchManagerPackagerFileUpdates(config, managerConfig, pFile),\n );\n logger.trace(\n { manager, queueLength: queue.length },\n 'fetchManagerUpdates starting',\n );\n await p.all(queue);\n logger.trace({ manager }, 'fetchManagerUpdates finished');\n}\n\nexport async function fetchUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<void> {\n const managers = Object.keys(packageFiles);\n const allManagerJobs = managers.map((manager) =>\n instrument(manager, () =>\n fetchManagerUpdates(config, packageFiles, manager),\n ),\n );\n await Promise.all(allManagerJobs);\n PackageFiles.add(config.baseBranch!, { ...packageFiles });\n logger.debug(\n { baseBranch: config.baseBranch },\n 'Package releases lookups complete',\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAwBA,eAAe,OACb,mBACA,OACuB;CACvB,MAAM,MAAM,MAAM,KAAK;CAEvB,IAAI,UAAU,CAAC;CAEf,IAAI,SAAS,IAAI,OAAO,GACtB,IAAI,UAAU,IAAI,QAAQ,KAAK;CAGjC,IAAI,gBAAgB,IAAI;CAExB,IAAI,IAAI,YACN,OAAO,OAAO,GAAG,GAAG;CAGtB,IAAI,CAAC,iBAAiB,IAAI,WAAW,GAAG;EACtC,IAAI,aAAa;EACjB,OAAO,OAAO,GAAG,GAAG;CACtB;CAEA,IAAI,IAAI,cAAc,CAAC,kBAAkB,oBAAoB;EAC3D,IAAI,aAAa;EACjB,OAAO,OAAO,GAAG,GAAG;CACtB;CAEA,MAAM,EAAE,YAAY;CAEpB,IAAI,YAAY,iBAAiB,mBAAmB,GAAG;CACvD,MAAM,0BAA0B,MAAM,iBAAiB,UAAU,UAAW;CAC5E,YAAY,iBAAiB,WAAW,uBAAuB;CAC/D,UAAU,eAAe,qBAAqB,UAAU,UAAU;CAClE,YAAY,MAAM,kBAAkB,WAAW,YAAY;CAC3D,UAAU,gBAAgB,UAAU;CAEpC,IAAI,UAAU,WAAY,SAAS,OAAQ,GAAG;EAE5C,OAAO,MAAM,eAAe,QAAS,aAAa;EAClD,IAAI,aAAa;EACjB,OAAO,OAAO,GAAG,GAAG;CACtB;CAEA,IAAI,UAAU,YAAY,OAAO;EAC/B,OAAO,MAAM,eAAe,QAAS,cAAc;EACnD,IAAI,aAAa;EACjB,OAAO,OAAO,GAAG,GAAG;CACtB;CAEA,IAAI,CAAC,UAAU,YACb,OAAO,OAAO,GAAG,GAAG;CAGtB,OAAO,YAAY,KAAK,UAAU,YAAY,YAAY;EACxD,MAAM,EAAE,aAAa,YAAY;EACjC,OAAO,MAAM,OAAO,KAAK,cAAc,SAA+B,CAAC,CAAC,CACrE,SAAS,QAAQ;GAChB,OAAO,MACL;IAAE;IAAK;IAAa;GAAQ,GAC5B,2BACF;EACF,CAAC,CAAC,CACD,SAAS,QAAQ;GAChB,OAAO,MACL;IAAE;IAAK;IAAS;IAAa;GAAQ,GACrC,yBACF;EACF,CAAC,CAAC,CACD,OAAO,QAAqC;GAC3C,IACE,kBAAkB,oBAAoB,QACtC,EAAE,eAAe,oBAEjB,OAAO,OAAO,IAAI,GAAG;GAGvB,MAAM,QAAQ,IAAI;GAClB,OAAO,OAAO,GAAG;IACf,SAAS,CAAC;IACV,UAAU,CACR;KACE,OAAO;KACP,SAAS,GAAG,QAAQ,IAAI,MAAM;IAChC,CACF;GACF,CAAC;EACH,CAAC,CAAC,CACD,WAAW,QAA2B,OAAO,OAAO,KAAK,GAAG,CAAC;CAClE,CAAC;AACH;AAEA,eAAe,gCACb,QACA,eACA,OACe;CACf,MAAM,EAAE,gBAAgB;CACxB,MAAM,oBAAoB,iBAAiB,eAAe,KAAK;CAC/D,IAAI,MAAM,sBACR,kBAAkB,cAAc;EAC9B,GAAG,MAAM;EACT,GAAG,OAAO;CACZ;CAEF,MAAM,8BAA8B;EAClC,GAAG,MAAM;EACT,GAAG,OAAO;CACZ;CACA,IAAI,OAAO,KAAK,2BAA2B,CAAC,CAAC,SAAS,GACpD,kBAAkB,wBAAwB;CAE5C,MAAM,EAAE,YAAY;CACpB,MAAM,QAAQ,MAAM,KAAK,KACtB,QAAQ,YAAwC;EAE/C,QAAO,MADe,OAAO,mBAAmB,GAAG,EAAA,CACpC,cAAc;CAC/B,CACF;CACA,OAAO,MACL;EAAE;EAAS;EAAa,aAAa,MAAM;CAAO,GAClD,2DACF;CAEA,MAAM,OAAO,MAAMA,IAAM,KAAK;CAC9B,OAAO,MACL;EAAE;EAAS;CAAY,GACvB,0CACF;AACF;AAEA,eAAe,oBACb,QACA,cACA,SACe;CACf,MAAM,gBAAgB,iBAAiB,QAAQ,OAAO;CACtD,MAAM,QAAQ,aAAa,QAAQ,CAAC,KACjC,gBACC,gCAAgC,QAAQ,eAAe,KAAK,CAChE;CACA,OAAO,MACL;EAAE;EAAS,aAAa,MAAM;CAAO,GACrC,8BACF;CACA,MAAMA,IAAM,KAAK;CACjB,OAAO,MAAM,EAAE,QAAQ,GAAG,8BAA8B;AAC1D;AAEA,eAAsB,aACpB,QACA,cACe;CAEf,MAAM,iBADW,OAAO,KAAK,YACC,CAAC,CAAC,KAAK,YACnC,WAAW,eACT,oBAAoB,QAAQ,cAAc,OAAO,CACnD,CACF;CACA,MAAM,QAAQ,IAAI,cAAc;CAChC,aAAa,IAAI,OAAO,YAAa,EAAE,GAAG,aAAa,CAAC;CACxD,OAAO,MACL,EAAE,YAAY,OAAO,WAAW,GAChC,mCACF;AACF"}
1
+ {"version":3,"file":"fetch.js","names":["p.all"],"sources":["../../../../lib/workers/repository/process/fetch.ts"],"sourcesContent":["// TODO #22198\nimport { isNonEmptyString, isString } from '@sindresorhus/is';\nimport { getManagerConfig, mergeChildConfig } from '../../../config/index.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { instrument } from '../../../instrumentation/index.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { getDefaultVersioning } from '../../../modules/datasource/common.ts';\nimport { getDefaultConfig } from '../../../modules/datasource/index.ts';\nimport type {\n PackageDependency,\n PackageFile,\n} from '../../../modules/manager/types.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport { clone } from '../../../util/clone.ts';\nimport { applyPackageRules } from '../../../util/package-rules/index.ts';\nimport * as p from '../../../util/promises.ts';\nimport { Result } from '../../../util/result.ts';\nimport { LookupStats } from '../../../util/stats.ts';\nimport { PackageFiles } from '../package-files.ts';\nimport { lookupUpdates } from './lookup/index.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './lookup/types.ts';\n\ntype LookupResult = Result<PackageDependency>;\n\nasync function lookup(\n packageFileConfig: RenovateConfig & PackageFile,\n indep: PackageDependency,\n): Promise<LookupResult> {\n const dep = clone(indep);\n\n dep.updates = [];\n\n if (isString(dep.depName)) {\n dep.depName = dep.depName.trim();\n }\n\n dep.packageName ??= dep.depName;\n\n if (dep.skipReason) {\n return Result.ok(dep);\n }\n\n if (!isNonEmptyString(dep.packageName)) {\n dep.skipReason = 'invalid-name';\n return Result.ok(dep);\n }\n\n if (dep.isInternal && !packageFileConfig.updateInternalDeps) {\n dep.skipReason = 'internal-package';\n return Result.ok(dep);\n }\n\n const { depName } = dep;\n // TODO: fix types\n let depConfig = mergeChildConfig(packageFileConfig, dep);\n const datasourceDefaultConfig = await getDefaultConfig(depConfig.datasource!);\n depConfig = mergeChildConfig(depConfig, datasourceDefaultConfig);\n depConfig.versioning ??= getDefaultVersioning(depConfig.datasource);\n depConfig = await applyPackageRules(depConfig, 'pre-lookup');\n depConfig.packageName ??= depConfig.depName;\n\n if (depConfig.ignoreDeps!.includes(depName!)) {\n // TODO: fix types (#22198)\n logger.debug(`Dependency: ${depName!}, is ignored`);\n dep.skipReason = 'ignored';\n return Result.ok(dep);\n }\n\n if (depConfig.enabled === false) {\n logger.debug(`Dependency: ${depName!}, is disabled`);\n dep.skipReason = 'disabled';\n return Result.ok(dep);\n }\n\n if (!depConfig.datasource) {\n return Result.ok(dep);\n }\n\n return LookupStats.wrap(depConfig.datasource, async () => {\n const { packageFile, manager } = packageFileConfig;\n return await Result.wrap(lookupUpdates(depConfig as LookupUpdateConfig))\n .onValue((dep) => {\n logger.trace(\n { dep, packageFile, manager },\n 'Dependency lookup success',\n );\n })\n .onError((err) => {\n logger.trace(\n { err, depName, packageFile, manager },\n 'Dependency lookup error',\n );\n })\n .catch((err): Result<UpdateResult> => {\n if (\n packageFileConfig.repoIsOnboarded === true ||\n !(err instanceof ExternalHostError)\n ) {\n return Result.err(err);\n }\n\n const cause = err.err;\n return Result.ok({\n updates: [],\n warnings: [\n {\n topic: 'Lookup Error',\n message: `${depName}: ${cause.message}`,\n },\n ],\n });\n })\n .transform((upd): PackageDependency => Object.assign(dep, upd));\n });\n}\n\nasync function fetchManagerPackagerFileUpdates(\n config: RenovateConfig,\n managerConfig: RenovateConfig,\n pFile: PackageFile,\n): Promise<void> {\n const { packageFile } = pFile;\n const packageFileConfig = mergeChildConfig(managerConfig, pFile);\n if (pFile.extractedConstraints) {\n packageFileConfig.constraints = {\n ...pFile.extractedConstraints,\n ...config.constraints,\n };\n }\n const mergedConstraintsVersioning = {\n ...pFile.constraintsVersioning,\n ...config.constraintsVersioning,\n };\n if (Object.keys(mergedConstraintsVersioning).length > 0) {\n packageFileConfig.constraintsVersioning = mergedConstraintsVersioning;\n }\n const { manager } = packageFileConfig;\n const queue = pFile.deps.map(\n (dep) => async (): Promise<PackageDependency> => {\n const updates = await lookup(packageFileConfig, dep);\n return updates.unwrapOrThrow();\n },\n );\n logger.trace(\n { manager, packageFile, queueLength: queue.length },\n 'fetchManagerPackagerFileUpdates starting with concurrency',\n );\n\n pFile.deps = await p.all(queue);\n logger.trace(\n { manager, packageFile },\n 'fetchManagerPackagerFileUpdates finished',\n );\n}\n\nasync function fetchManagerUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n manager: string,\n): Promise<void> {\n const managerConfig = getManagerConfig(config, manager);\n const queue = packageFiles[manager].map(\n (pFile) => (): Promise<void> =>\n fetchManagerPackagerFileUpdates(config, managerConfig, pFile),\n );\n logger.trace(\n { manager, queueLength: queue.length },\n 'fetchManagerUpdates starting',\n );\n await p.all(queue);\n logger.trace({ manager }, 'fetchManagerUpdates finished');\n}\n\nexport async function fetchUpdates(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<void> {\n const managers = Object.keys(packageFiles);\n const allManagerJobs = managers.map((manager) =>\n instrument(manager, () =>\n fetchManagerUpdates(config, packageFiles, manager),\n ),\n );\n await Promise.all(allManagerJobs);\n PackageFiles.add(config.baseBranch!, { ...packageFiles });\n logger.debug(\n { baseBranch: config.baseBranch },\n 'Package releases lookups complete',\n );\n}\n"],"mappings":"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"}
@@ -60,9 +60,7 @@ function getManagerLibYears(deps) {
60
60
  const depKey = `${dep.depName}@${dep.version}@${dep.datasource}`;
61
61
  const manager = dep.manager;
62
62
  managerLibYears[manager] ??= {};
63
- if (dep.libYear) {
64
- if (!managerLibYears[manager][depKey]) managerLibYears[manager][depKey] = dep.libYear;
65
- }
63
+ if (dep.libYear && !managerLibYears[manager][depKey]) managerLibYears[manager][depKey] = dep.libYear;
66
64
  }
67
65
  const res = {};
68
66
  for (const [manager, deps] of Object.entries(managerLibYears)) res[manager] = Object.values(deps).reduce((sum, curr) => {
@@ -1 +1 @@
1
- {"version":3,"file":"libyear.js","names":[],"sources":["../../../../lib/workers/repository/process/libyear.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { addLibYears } from '../../../instrumentation/reporting.ts';\nimport type { LibYearsWithStatus } from '../../../instrumentation/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\n\ninterface DepInfo {\n depName: string;\n manager: string;\n datasource: string;\n version: string;\n file: string;\n outdated?: boolean;\n libYear?: number;\n}\n\nexport function calculateLibYears(\n config: RenovateConfig,\n packageFiles?: Record<string, PackageFile[]>,\n): void {\n if (!packageFiles) {\n return;\n }\n const allDeps: DepInfo[] = [];\n for (const [manager, files] of Object.entries(packageFiles)) {\n for (const file of files) {\n for (const dep of file.deps) {\n if (dep.enabled === false) {\n continue;\n }\n\n const depInfo: DepInfo = {\n depName: dep.depName!,\n manager,\n file: file.packageFile,\n datasource: dep.datasource!,\n version: (dep.currentVersion ?? dep.currentValue)!,\n };\n\n if (!dep.updates?.length) {\n allDeps.push(depInfo);\n continue;\n }\n\n depInfo.outdated = true;\n if (!dep.currentVersionTimestamp) {\n logger.once.debug(\n `LibYears: no currentVersionTimestamp for ${dep.depName}`,\n );\n allDeps.push(depInfo);\n continue;\n }\n // timestamps are in ISO format\n const currentVersionDate = DateTime.fromISO(\n dep.currentVersionTimestamp,\n );\n\n for (const update of dep.updates) {\n if (!update.releaseTimestamp) {\n logger.once.debug(\n `LibYears: no releaseTimestamp for ${dep.depName} update to ${update.newVersion}`,\n );\n continue;\n }\n const releaseDate = DateTime.fromISO(update.releaseTimestamp);\n const libYears = releaseDate.diff(currentVersionDate, 'years').years;\n if (libYears >= 0) {\n update.libYears = libYears;\n }\n }\n // Set the highest libYears for the dep\n const depLibYears = Math.max(\n ...dep.updates.map((update) => update.libYears ?? 0),\n 0,\n );\n depInfo.libYear = depLibYears;\n allDeps.push(depInfo);\n }\n }\n }\n const libYearsWithStatus = getLibYears(allDeps);\n logger.debug(libYearsWithStatus, 'Repository libYears');\n\n addLibYears(config, libYearsWithStatus);\n}\n\nfunction getLibYears(allDeps: DepInfo[]): LibYearsWithStatus {\n const [totalDepsCount, outdatedDepsCount, totalLibYears] = getCounts(allDeps);\n const managerLibYears = getManagerLibYears(allDeps);\n\n return {\n libYears: {\n managers: managerLibYears,\n total: totalLibYears,\n },\n dependencyStatus: {\n outdated: outdatedDepsCount,\n total: totalDepsCount,\n },\n };\n}\n\nfunction getManagerLibYears(deps: DepInfo[]): Record<string, number> {\n /** {manager : {depKey: libYear }} */\n const managerLibYears: Record<string, Record<string, number>> = {};\n for (const dep of deps) {\n const depKey = `${dep.depName}@${dep.version}@${dep.datasource}`;\n const manager = dep.manager;\n managerLibYears[manager] ??= {};\n if (dep.libYear) {\n if (!managerLibYears[manager][depKey]) {\n managerLibYears[manager][depKey] = dep.libYear;\n }\n }\n }\n\n const res: Record<string, number> = {};\n for (const [manager, deps] of Object.entries(managerLibYears)) {\n const managerLibYear = Object.values(deps).reduce((sum, curr) => {\n return sum + curr;\n }, 0);\n res[manager] = managerLibYear;\n }\n\n return res;\n}\n\nfunction getCounts(deps: DepInfo[]): [number, number, number] {\n const distinctDeps = new Set<string>();\n let totalDepsCount = 0,\n outdatedDepsCount = 0,\n totalLibYears = 0;\n for (const dep of deps) {\n const depKey = `${dep.depName}@${dep.version}@${dep.datasource}`;\n if (!distinctDeps.has(depKey)) {\n if (dep.outdated) {\n outdatedDepsCount++;\n }\n if (dep.libYear) {\n totalLibYears += dep.libYear;\n }\n\n totalDepsCount++;\n distinctDeps.add(depKey);\n }\n }\n\n return [totalDepsCount, outdatedDepsCount, totalLibYears];\n}\n"],"mappings":";;;;AAiBA,SAAgB,kBACd,QACA,cACM;CACN,IAAI,CAAC,cACH;CAEF,MAAM,UAAqB,CAAC;CAC5B,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,YAAY,GACxD,KAAK,MAAM,QAAQ,OACjB,KAAK,MAAM,OAAO,KAAK,MAAM;EAC3B,IAAI,IAAI,YAAY,OAClB;EAGF,MAAM,UAAmB;GACvB,SAAS,IAAI;GACb;GACA,MAAM,KAAK;GACX,YAAY,IAAI;GAChB,SAAU,IAAI,kBAAkB,IAAI;EACtC;EAEA,IAAI,CAAC,IAAI,SAAS,QAAQ;GACxB,QAAQ,KAAK,OAAO;GACpB;EACF;EAEA,QAAQ,WAAW;EACnB,IAAI,CAAC,IAAI,yBAAyB;GAChC,OAAO,KAAK,MACV,4CAA4C,IAAI,SAClD;GACA,QAAQ,KAAK,OAAO;GACpB;EACF;EAEA,MAAM,qBAAqB,SAAS,QAClC,IAAI,uBACN;EAEA,KAAK,MAAM,UAAU,IAAI,SAAS;GAChC,IAAI,CAAC,OAAO,kBAAkB;IAC5B,OAAO,KAAK,MACV,qCAAqC,IAAI,QAAQ,aAAa,OAAO,YACvE;IACA;GACF;GAEA,MAAM,WADc,SAAS,QAAQ,OAAO,gBACjB,CAAC,CAAC,KAAK,oBAAoB,OAAO,CAAC,CAAC;GAC/D,IAAI,YAAY,GACd,OAAO,WAAW;EAEtB;EAMA,QAAQ,UAJY,KAAK,IACvB,GAAG,IAAI,QAAQ,KAAK,WAAW,OAAO,YAAY,CAAC,GACnD,CAE0B;EAC5B,QAAQ,KAAK,OAAO;CACtB;CAGJ,MAAM,qBAAqB,YAAY,OAAO;CAC9C,OAAO,MAAM,oBAAoB,qBAAqB;CAEtD,YAAY,QAAQ,kBAAkB;AACxC;AAEA,SAAS,YAAY,SAAwC;CAC3D,MAAM,CAAC,gBAAgB,mBAAmB,iBAAiB,UAAU,OAAO;CAG5E,OAAO;EACL,UAAU;GACR,UAJoB,mBAAmB,OAIf;GACxB,OAAO;EACT;EACA,kBAAkB;GAChB,UAAU;GACV,OAAO;EACT;CACF;AACF;AAEA,SAAS,mBAAmB,MAAyC;;CAEnE,MAAM,kBAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI;EACpD,MAAM,UAAU,IAAI;EACpB,gBAAgB,aAAa,CAAC;EAC9B,IAAI,IAAI;OACF,CAAC,gBAAgB,QAAQ,CAAC,SAC5B,gBAAgB,QAAQ,CAAC,UAAU,IAAI;EAAA;CAG7C;CAEA,MAAM,MAA8B,CAAC;CACrC,KAAK,MAAM,CAAC,SAAS,SAAS,OAAO,QAAQ,eAAe,GAI1D,IAAI,WAHmB,OAAO,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;EAC/D,OAAO,MAAM;CACf,GAAG,CACyB;CAG9B,OAAO;AACT;AAEA,SAAS,UAAU,MAA2C;CAC5D,MAAM,+BAAe,IAAI,IAAY;CACrC,IAAI,iBAAiB,GACnB,oBAAoB,GACpB,gBAAgB;CAClB,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI;EACpD,IAAI,CAAC,aAAa,IAAI,MAAM,GAAG;GAC7B,IAAI,IAAI,UACN;GAEF,IAAI,IAAI,SACN,iBAAiB,IAAI;GAGvB;GACA,aAAa,IAAI,MAAM;EACzB;CACF;CAEA,OAAO;EAAC;EAAgB;EAAmB;CAAa;AAC1D"}
1
+ {"version":3,"file":"libyear.js","names":[],"sources":["../../../../lib/workers/repository/process/libyear.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { addLibYears } from '../../../instrumentation/reporting.ts';\nimport type { LibYearsWithStatus } from '../../../instrumentation/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\n\ninterface DepInfo {\n depName: string;\n manager: string;\n datasource: string;\n version: string;\n file: string;\n outdated?: boolean;\n libYear?: number;\n}\n\nexport function calculateLibYears(\n config: RenovateConfig,\n packageFiles?: Record<string, PackageFile[]>,\n): void {\n if (!packageFiles) {\n return;\n }\n const allDeps: DepInfo[] = [];\n for (const [manager, files] of Object.entries(packageFiles)) {\n for (const file of files) {\n for (const dep of file.deps) {\n if (dep.enabled === false) {\n continue;\n }\n\n const depInfo: DepInfo = {\n depName: dep.depName!,\n manager,\n file: file.packageFile,\n datasource: dep.datasource!,\n version: (dep.currentVersion ?? dep.currentValue)!,\n };\n\n if (!dep.updates?.length) {\n allDeps.push(depInfo);\n continue;\n }\n\n depInfo.outdated = true;\n if (!dep.currentVersionTimestamp) {\n logger.once.debug(\n `LibYears: no currentVersionTimestamp for ${dep.depName}`,\n );\n allDeps.push(depInfo);\n continue;\n }\n // timestamps are in ISO format\n const currentVersionDate = DateTime.fromISO(\n dep.currentVersionTimestamp,\n );\n\n for (const update of dep.updates) {\n if (!update.releaseTimestamp) {\n logger.once.debug(\n `LibYears: no releaseTimestamp for ${dep.depName} update to ${update.newVersion}`,\n );\n continue;\n }\n const releaseDate = DateTime.fromISO(update.releaseTimestamp);\n const libYears = releaseDate.diff(currentVersionDate, 'years').years;\n if (libYears >= 0) {\n update.libYears = libYears;\n }\n }\n // Set the highest libYears for the dep\n const depLibYears = Math.max(\n ...dep.updates.map((update) => update.libYears ?? 0),\n 0,\n );\n depInfo.libYear = depLibYears;\n allDeps.push(depInfo);\n }\n }\n }\n const libYearsWithStatus = getLibYears(allDeps);\n logger.debug(libYearsWithStatus, 'Repository libYears');\n\n addLibYears(config, libYearsWithStatus);\n}\n\nfunction getLibYears(allDeps: DepInfo[]): LibYearsWithStatus {\n const [totalDepsCount, outdatedDepsCount, totalLibYears] = getCounts(allDeps);\n const managerLibYears = getManagerLibYears(allDeps);\n\n return {\n libYears: {\n managers: managerLibYears,\n total: totalLibYears,\n },\n dependencyStatus: {\n outdated: outdatedDepsCount,\n total: totalDepsCount,\n },\n };\n}\n\nfunction getManagerLibYears(deps: DepInfo[]): Record<string, number> {\n /** {manager : {depKey: libYear }} */\n const managerLibYears: Record<string, Record<string, number>> = {};\n for (const dep of deps) {\n const depKey = `${dep.depName}@${dep.version}@${dep.datasource}`;\n const manager = dep.manager;\n managerLibYears[manager] ??= {};\n if (dep.libYear && !managerLibYears[manager][depKey]) {\n managerLibYears[manager][depKey] = dep.libYear;\n }\n }\n\n const res: Record<string, number> = {};\n for (const [manager, deps] of Object.entries(managerLibYears)) {\n const managerLibYear = Object.values(deps).reduce((sum, curr) => {\n return sum + curr;\n }, 0);\n res[manager] = managerLibYear;\n }\n\n return res;\n}\n\nfunction getCounts(deps: DepInfo[]): [number, number, number] {\n const distinctDeps = new Set<string>();\n let totalDepsCount = 0,\n outdatedDepsCount = 0,\n totalLibYears = 0;\n for (const dep of deps) {\n const depKey = `${dep.depName}@${dep.version}@${dep.datasource}`;\n if (!distinctDeps.has(depKey)) {\n if (dep.outdated) {\n outdatedDepsCount++;\n }\n if (dep.libYear) {\n totalLibYears += dep.libYear;\n }\n\n totalDepsCount++;\n distinctDeps.add(depKey);\n }\n }\n\n return [totalDepsCount, outdatedDepsCount, totalLibYears];\n}\n"],"mappings":";;;;AAiBA,SAAgB,kBACd,QACA,cACM;CACN,IAAI,CAAC,cACH;CAEF,MAAM,UAAqB,CAAC;CAC5B,KAAK,MAAM,CAAC,SAAS,UAAU,OAAO,QAAQ,YAAY,GACxD,KAAK,MAAM,QAAQ,OACjB,KAAK,MAAM,OAAO,KAAK,MAAM;EAC3B,IAAI,IAAI,YAAY,OAClB;EAGF,MAAM,UAAmB;GACvB,SAAS,IAAI;GACb;GACA,MAAM,KAAK;GACX,YAAY,IAAI;GAChB,SAAU,IAAI,kBAAkB,IAAI;EACtC;EAEA,IAAI,CAAC,IAAI,SAAS,QAAQ;GACxB,QAAQ,KAAK,OAAO;GACpB;EACF;EAEA,QAAQ,WAAW;EACnB,IAAI,CAAC,IAAI,yBAAyB;GAChC,OAAO,KAAK,MACV,4CAA4C,IAAI,SAClD;GACA,QAAQ,KAAK,OAAO;GACpB;EACF;EAEA,MAAM,qBAAqB,SAAS,QAClC,IAAI,uBACN;EAEA,KAAK,MAAM,UAAU,IAAI,SAAS;GAChC,IAAI,CAAC,OAAO,kBAAkB;IAC5B,OAAO,KAAK,MACV,qCAAqC,IAAI,QAAQ,aAAa,OAAO,YACvE;IACA;GACF;GAEA,MAAM,WADc,SAAS,QAAQ,OAAO,gBACjB,CAAC,CAAC,KAAK,oBAAoB,OAAO,CAAC,CAAC;GAC/D,IAAI,YAAY,GACd,OAAO,WAAW;EAEtB;EAMA,QAAQ,UAJY,KAAK,IACvB,GAAG,IAAI,QAAQ,KAAK,WAAW,OAAO,YAAY,CAAC,GACnD,CAE0B;EAC5B,QAAQ,KAAK,OAAO;CACtB;CAGJ,MAAM,qBAAqB,YAAY,OAAO;CAC9C,OAAO,MAAM,oBAAoB,qBAAqB;CAEtD,YAAY,QAAQ,kBAAkB;AACxC;AAEA,SAAS,YAAY,SAAwC;CAC3D,MAAM,CAAC,gBAAgB,mBAAmB,iBAAiB,UAAU,OAAO;CAG5E,OAAO;EACL,UAAU;GACR,UAJoB,mBAAmB,OAIf;GACxB,OAAO;EACT;EACA,kBAAkB;GAChB,UAAU;GACV,OAAO;EACT;CACF;AACF;AAEA,SAAS,mBAAmB,MAAyC;;CAEnE,MAAM,kBAA0D,CAAC;CACjE,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI;EACpD,MAAM,UAAU,IAAI;EACpB,gBAAgB,aAAa,CAAC;EAC9B,IAAI,IAAI,WAAW,CAAC,gBAAgB,QAAQ,CAAC,SAC3C,gBAAgB,QAAQ,CAAC,UAAU,IAAI;CAE3C;CAEA,MAAM,MAA8B,CAAC;CACrC,KAAK,MAAM,CAAC,SAAS,SAAS,OAAO,QAAQ,eAAe,GAI1D,IAAI,WAHmB,OAAO,OAAO,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS;EAC/D,OAAO,MAAM;CACf,GAAG,CACyB;CAG9B,OAAO;AACT;AAEA,SAAS,UAAU,MAA2C;CAC5D,MAAM,+BAAe,IAAI,IAAY;CACrC,IAAI,iBAAiB,GACnB,oBAAoB,GACpB,gBAAgB;CAClB,KAAK,MAAM,OAAO,MAAM;EACtB,MAAM,SAAS,GAAG,IAAI,QAAQ,GAAG,IAAI,QAAQ,GAAG,IAAI;EACpD,IAAI,CAAC,aAAa,IAAI,MAAM,GAAG;GAC7B,IAAI,IAAI,UACN;GAEF,IAAI,IAAI,SACN,iBAAiB,IAAI;GAGvB;GACA,aAAa,IAAI,MAAM;EACzB;CACF;CAEA,OAAO;EAAC;EAAgB;EAAmB;CAAa;AAC1D"}
@@ -75,17 +75,15 @@ async function filterInternalChecks(config, versioningApi, bucket, sortedRelease
75
75
  check: "minimumReleaseAge"
76
76
  }, `${candidateVersionsWithoutReleaseTimestamp["timestamp-optional"].length} release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`);
77
77
  }
78
- if (!release) {
79
- // v8 ignore else -- TODO: add test #40625
80
- if (pendingReleases.length) {
81
- logger.trace({
82
- depName,
83
- bucket
84
- }, "All releases are pending - using latest");
85
- release = pendingReleases.pop();
86
- pendingReleases = [];
87
- if (internalChecksFilter === "strict") pendingChecks = true;
88
- }
78
+ // v8 ignore else -- TODO: add test #40625
79
+ if (!release && pendingReleases.length) {
80
+ logger.trace({
81
+ depName,
82
+ bucket
83
+ }, "All releases are pending - using latest");
84
+ release = pendingReleases.pop();
85
+ pendingReleases = [];
86
+ if (internalChecksFilter === "strict") pendingChecks = true;
89
87
  }
90
88
  }
91
89
  return {