renovate 43.263.0 → 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 (258) 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 +13 -13
  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/mix/extract.js +3 -6
  90. package/dist/modules/manager/mix/extract.js.map +1 -1
  91. package/dist/modules/manager/npm/extract/common/overrides.js +1 -1
  92. package/dist/modules/manager/npm/extract/common/overrides.js.map +1 -1
  93. package/dist/modules/manager/npm/extract/yarn.js +1 -1
  94. package/dist/modules/manager/npm/extract/yarn.js.map +1 -1
  95. package/dist/modules/manager/npm/npmrc.js +1 -3
  96. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  97. package/dist/modules/manager/npm/update/dependency/common.js +2 -3
  98. package/dist/modules/manager/npm/update/dependency/common.js.map +1 -1
  99. package/dist/modules/manager/npm/update/dependency/index.js +1 -1
  100. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  101. package/dist/modules/manager/npm/update/dependency/pnpm.js +1 -1
  102. package/dist/modules/manager/npm/update/dependency/pnpm.js.map +1 -1
  103. package/dist/modules/manager/npm/update/dependency/yarn.js +1 -1
  104. package/dist/modules/manager/npm/update/dependency/yarn.js.map +1 -1
  105. package/dist/modules/manager/osgi/extract.js +1 -1
  106. package/dist/modules/manager/osgi/extract.js.map +1 -1
  107. package/dist/modules/manager/pep621/processors/uv.js +1 -1
  108. package/dist/modules/manager/pep621/processors/uv.js.map +1 -1
  109. package/dist/modules/manager/pep621/schema.js.map +1 -1
  110. package/dist/modules/manager/pip_setup/extract.js +1 -1
  111. package/dist/modules/manager/pip_setup/extract.js.map +1 -1
  112. package/dist/modules/manager/pipenv/artifacts.js.map +1 -1
  113. package/dist/modules/manager/poetry/schema.js +2 -2
  114. package/dist/modules/manager/poetry/schema.js.map +1 -1
  115. package/dist/modules/manager/pub/artifacts.js +4 -6
  116. package/dist/modules/manager/pub/artifacts.js.map +1 -1
  117. package/dist/modules/manager/pub/utils.js +2 -2
  118. package/dist/modules/manager/pub/utils.js.map +1 -1
  119. package/dist/modules/manager/puppet/common.js +4 -6
  120. package/dist/modules/manager/puppet/common.js.map +1 -1
  121. package/dist/modules/manager/sbt/extract.js +1 -1
  122. package/dist/modules/manager/sbt/extract.js.map +1 -1
  123. package/dist/modules/manager/sbt/util.js +4 -2
  124. package/dist/modules/manager/sbt/util.js.map +1 -1
  125. package/dist/modules/manager/terraform/lockfile/util.js +1 -1
  126. package/dist/modules/manager/terraform/lockfile/util.js.map +1 -1
  127. package/dist/modules/platform/azure/index.js +15 -19
  128. package/dist/modules/platform/azure/index.js.map +1 -1
  129. package/dist/modules/platform/azure/issue.js +67 -17
  130. package/dist/modules/platform/azure/issue.js.map +1 -1
  131. package/dist/modules/platform/bitbucket/index.js +1 -3
  132. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  133. package/dist/modules/platform/forgejo/index.js +5 -3
  134. package/dist/modules/platform/forgejo/index.js.map +1 -1
  135. package/dist/modules/platform/forgejo/utils.js +1 -1
  136. package/dist/modules/platform/forgejo/utils.js.map +1 -1
  137. package/dist/modules/platform/gerrit/scm.js +5 -7
  138. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  139. package/dist/modules/platform/gitea/index.js +5 -3
  140. package/dist/modules/platform/gitea/index.js.map +1 -1
  141. package/dist/modules/platform/gitea/utils.js +1 -1
  142. package/dist/modules/platform/gitea/utils.js.map +1 -1
  143. package/dist/modules/platform/github/index.js +5 -7
  144. package/dist/modules/platform/github/index.js.map +1 -1
  145. package/dist/modules/platform/github/pr.js +1 -1
  146. package/dist/modules/platform/github/pr.js.map +1 -1
  147. package/dist/modules/platform/gitlab/index.js +2 -1
  148. package/dist/modules/platform/gitlab/index.js.map +1 -1
  149. package/dist/modules/platform/utils/pr-body.js +2 -1
  150. package/dist/modules/platform/utils/pr-body.js.map +1 -1
  151. package/dist/modules/versioning/apk/index.js +3 -3
  152. package/dist/modules/versioning/apk/index.js.map +1 -1
  153. package/dist/modules/versioning/composer/index.js +4 -7
  154. package/dist/modules/versioning/composer/index.js.map +1 -1
  155. package/dist/modules/versioning/conan/common.js +4 -6
  156. package/dist/modules/versioning/conan/common.js.map +1 -1
  157. package/dist/modules/versioning/conan/index.js +1 -3
  158. package/dist/modules/versioning/conan/index.js.map +1 -1
  159. package/dist/modules/versioning/conan/range.js +4 -5
  160. package/dist/modules/versioning/conan/range.js.map +1 -1
  161. package/dist/modules/versioning/conda/index.js +1 -1
  162. package/dist/modules/versioning/conda/index.js.map +1 -1
  163. package/dist/modules/versioning/gradle/index.js +7 -3
  164. package/dist/modules/versioning/gradle/index.js.map +1 -1
  165. package/dist/modules/versioning/hermit/index.js +2 -2
  166. package/dist/modules/versioning/hermit/index.js.map +1 -1
  167. package/dist/modules/versioning/ivy/index.js +1 -1
  168. package/dist/modules/versioning/ivy/index.js.map +1 -1
  169. package/dist/modules/versioning/maven/compare.js +4 -6
  170. package/dist/modules/versioning/maven/compare.js.map +1 -1
  171. package/dist/modules/versioning/npm/range.js +5 -7
  172. package/dist/modules/versioning/npm/range.js.map +1 -1
  173. package/dist/modules/versioning/nuget/version.js +6 -6
  174. package/dist/modules/versioning/nuget/version.js.map +1 -1
  175. package/dist/modules/versioning/pep440/index.js +1 -1
  176. package/dist/modules/versioning/pep440/index.js.map +1 -1
  177. package/dist/modules/versioning/pep440/range.js +2 -6
  178. package/dist/modules/versioning/pep440/range.js.map +1 -1
  179. package/dist/modules/versioning/poetry/index.js +1 -1
  180. package/dist/modules/versioning/poetry/index.js.map +1 -1
  181. package/dist/modules/versioning/pvp/index.js +2 -2
  182. package/dist/modules/versioning/pvp/index.js.map +1 -1
  183. package/dist/modules/versioning/rpm/index.js +4 -3
  184. package/dist/modules/versioning/rpm/index.js.map +1 -1
  185. package/dist/modules/versioning/ruby/range.js +2 -2
  186. package/dist/modules/versioning/ruby/range.js.map +1 -1
  187. package/dist/modules/versioning/ruby/strategies/bump.js +1 -1
  188. package/dist/modules/versioning/ruby/strategies/bump.js.map +1 -1
  189. package/dist/modules/versioning/ruby/strategies/replace.js +13 -12
  190. package/dist/modules/versioning/ruby/strategies/replace.js.map +1 -1
  191. package/dist/modules/versioning/ruby/version.js +1 -1
  192. package/dist/modules/versioning/ruby/version.js.map +1 -1
  193. package/dist/modules/versioning/rust-release-channel/index.js +1 -1
  194. package/dist/modules/versioning/rust-release-channel/index.js.map +1 -1
  195. package/dist/modules/versioning/rust-release-channel/util.js +4 -4
  196. package/dist/modules/versioning/rust-release-channel/util.js.map +1 -1
  197. package/dist/util/common.js +1 -3
  198. package/dist/util/common.js.map +1 -1
  199. package/dist/util/exec/common.js +4 -6
  200. package/dist/util/exec/common.js.map +1 -1
  201. package/dist/util/exec/containerbase.js +1 -3
  202. package/dist/util/exec/containerbase.js.map +1 -1
  203. package/dist/util/git/instrument.js +3 -3
  204. package/dist/util/git/instrument.js.map +1 -1
  205. package/dist/util/github/graphql/datasource-fetcher.js +5 -4
  206. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  207. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
  208. package/dist/util/http/github.js +3 -2
  209. package/dist/util/http/github.js.map +1 -1
  210. package/dist/util/http/http.d.ts +1 -1
  211. package/dist/util/http/http.js.map +1 -1
  212. package/dist/util/result.d.ts +8 -8
  213. package/dist/util/result.js +1 -1
  214. package/dist/util/result.js.map +1 -1
  215. package/dist/util/url.js +2 -2
  216. package/dist/util/url.js.map +1 -1
  217. package/dist/workers/global/config/parse/cli.js +18 -20
  218. package/dist/workers/global/config/parse/cli.js.map +1 -1
  219. package/dist/workers/global/config/parse/env.js +3 -5
  220. package/dist/workers/global/config/parse/env.js.map +1 -1
  221. package/dist/workers/repository/config-migration/branch/index.js +3 -5
  222. package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
  223. package/dist/workers/repository/init/merge.js +2 -3
  224. package/dist/workers/repository/init/merge.js.map +1 -1
  225. package/dist/workers/repository/onboarding/branch/check.js +7 -9
  226. package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
  227. package/dist/workers/repository/onboarding/branch/index.js +4 -8
  228. package/dist/workers/repository/onboarding/branch/index.js.map +1 -1
  229. package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js +2 -2
  230. package/dist/workers/repository/onboarding/branch/onboarding-branch-cache.js.map +1 -1
  231. package/dist/workers/repository/process/extract-update.js.map +1 -1
  232. package/dist/workers/repository/process/fetch.js.map +1 -1
  233. package/dist/workers/repository/process/libyear.js +1 -3
  234. package/dist/workers/repository/process/libyear.js.map +1 -1
  235. package/dist/workers/repository/process/lookup/filter-checks.js +9 -11
  236. package/dist/workers/repository/process/lookup/filter-checks.js.map +1 -1
  237. package/dist/workers/repository/process/lookup/index.js +5 -8
  238. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  239. package/dist/workers/repository/process/vulnerabilities.js +3 -3
  240. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  241. package/dist/workers/repository/reconfigure/index.js +3 -5
  242. package/dist/workers/repository/reconfigure/index.js.map +1 -1
  243. package/dist/workers/repository/update/branch/bump-versions.js +1 -1
  244. package/dist/workers/repository/update/branch/bump-versions.js.map +1 -1
  245. package/dist/workers/repository/update/branch/get-updated.js +3 -5
  246. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  247. package/dist/workers/repository/update/pr/body/updates-table.js +1 -3
  248. package/dist/workers/repository/update/pr/body/updates-table.js.map +1 -1
  249. package/dist/workers/repository/update/pr/changelog/common.js +1 -1
  250. package/dist/workers/repository/update/pr/changelog/common.js.map +1 -1
  251. package/dist/workers/repository/update/pr/index.js +6 -7
  252. package/dist/workers/repository/update/pr/index.js.map +1 -1
  253. package/dist/workers/repository/updates/flatten.js +1 -1
  254. package/dist/workers/repository/updates/flatten.js.map +1 -1
  255. package/dist/workers/repository/updates/generate.js +1 -1
  256. package/dist/workers/repository/updates/generate.js.map +1 -1
  257. package/package.json +2 -2
  258. package/renovate-schema.json +2 -2
@@ -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":"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"}
@@ -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":"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"}
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 {
@@ -1 +1 @@
1
- {"version":3,"file":"filter-checks.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/filter-checks.ts"],"sourcesContent":["import { isNonEmptyString, isNullOrUndefined } from '@sindresorhus/is';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { MinimumReleaseAgeBehaviour } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport { postprocessRelease } from '../../../../modules/datasource/postprocess-release.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport { getElapsedMs } from '../../../../util/date.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport { coerceNumber } from '../../../../util/number.ts';\nimport { applyPackageRules } from '../../../../util/package-rules/index.ts';\nimport { toMs } from '../../../../util/pretty-time.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport interface InternalChecksResult {\n release?: Release;\n pendingChecks: boolean;\n pendingReleases: Release[];\n}\n\nexport async function filterInternalChecks(\n config: Partial<LookupUpdateConfig & UpdateResult>,\n versioningApi: VersioningApi,\n bucket: string,\n sortedReleases: Release[],\n): Promise<InternalChecksResult> {\n const {\n currentVersion,\n datasource,\n depName,\n packageName,\n internalChecksFilter,\n } = config;\n let release: Release | undefined = undefined;\n let pendingChecks = false;\n let pendingReleases: Release[] = [];\n if (internalChecksFilter === 'none') {\n // Don't care if minimumReleaseAge or minimumConfidence are unmet\n release = sortedReleases.pop();\n } else {\n const candidateVersionsWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n string[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // iterate through releases from highest to lowest, looking for the first which will pass checks if present\n for (let candidateRelease of sortedReleases.reverse()) {\n // merge the release data into dependency config\n let releaseConfig = mergeChildConfig(config, candidateRelease);\n // calculate updateType and then apply it\n releaseConfig.updateType = getUpdateType(\n releaseConfig,\n versioningApi,\n // TODO #22198\n currentVersion!,\n candidateRelease.version,\n );\n releaseConfig = mergeChildConfig(\n releaseConfig,\n releaseConfig[releaseConfig.updateType]!,\n );\n // Apply packageRules in case any apply to updateType\n releaseConfig = await applyPackageRules(releaseConfig, 'update-type');\n\n const updatedCandidateRelease = await postprocessRelease(\n releaseConfig,\n candidateRelease,\n );\n if (!updatedCandidateRelease) {\n continue;\n }\n candidateRelease = updatedCandidateRelease;\n\n // Now check for a minimumReleaseAge config\n const { minimumConfidence, minimumReleaseAge, updateType } =\n releaseConfig;\n\n const minimumReleaseAgeMs = isNonEmptyString(minimumReleaseAge)\n ? coerceNumber(toMs(minimumReleaseAge), 0)\n : 0;\n\n if (minimumReleaseAgeMs) {\n const minimumReleaseAgeBehaviour =\n releaseConfig.minimumReleaseAgeBehaviour;\n\n // if there is a releaseTimestamp, regardless of `minimumReleaseAgeBehaviour`, we should process it\n // v8 ignore else -- TODO: add test #40625\n if (candidateRelease.releaseTimestamp) {\n // we should skip this if we have a timestamp that isn't passing checks:\n if (\n getElapsedMs(candidateRelease.releaseTimestamp) <\n minimumReleaseAgeMs\n ) {\n // Skip it if it doesn't pass checks\n logger.trace(\n { depName, check: 'minimumReleaseAge' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n } // or if there is no timestamp, and we're running in `minimumReleaseAgeBehaviour=timestamp-required`\n else if (\n isNullOrUndefined(candidateRelease.releaseTimestamp) &&\n minimumReleaseAgeBehaviour === 'timestamp-required'\n ) {\n // Skip it, as we require a timestamp\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n pendingReleases.unshift(candidateRelease);\n continue;\n } // if there is no timestamp, and we're running in `optional` mode, we can allow it\n else if (\n isNullOrUndefined(candidateRelease.releaseTimestamp) &&\n minimumReleaseAgeBehaviour === 'timestamp-optional'\n ) {\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n }\n }\n\n // TODO #22198\n if (isActiveConfidenceLevel(minimumConfidence!)) {\n const confidenceLevel =\n (await getMergeConfidenceLevel(\n datasource!,\n packageName!,\n currentVersion!,\n candidateRelease.version,\n updateType!,\n )) ?? 'neutral';\n // TODO #22198\n if (!satisfiesConfidenceLevel(confidenceLevel, minimumConfidence!)) {\n logger.trace(\n { depName, check: 'minimumConfidence' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n }\n // If we get to here, then the release is OK and we can stop iterating\n release = candidateRelease;\n break;\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-required'],\n check: 'minimumReleaseAge',\n },\n `Marking ${candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length} release(s) as pending, as they do not have a releaseTimestamp and we're running with minimumReleaseAgeBehaviour=timestamp-required`,\n );\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-optional'],\n check: 'minimumReleaseAge',\n },\n `${candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length} release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n if (!release) {\n // v8 ignore else -- TODO: add test #40625\n if (pendingReleases.length) {\n // If all releases were pending then just take the highest\n logger.trace(\n { depName, bucket },\n 'All releases are pending - using latest',\n );\n release = pendingReleases.pop();\n // None are pending anymore because we took the latest, so empty the array\n pendingReleases = [];\n if (internalChecksFilter === 'strict') {\n pendingChecks = true;\n }\n }\n }\n }\n\n return { release, pendingChecks, pendingReleases };\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,eAAsB,qBACpB,QACA,eACA,QACA,gBAC+B;CAC/B,MAAM,EACJ,gBACA,YACA,SACA,aACA,yBACE;CACJ,IAAI,UAA+B,KAAA;CACnC,IAAI,gBAAgB;CACpB,IAAI,kBAA6B,CAAC;CAClC,IAAI,yBAAyB,QAE3B,UAAU,eAAe,IAAI;MACxB;EACL,MAAM,2CAGF;GACF,sBAAsB,CAAC;GACvB,sBAAsB,CAAC;EACzB;EAGA,KAAK,IAAI,oBAAoB,eAAe,QAAQ,GAAG;GAErD,IAAI,gBAAgB,iBAAiB,QAAQ,gBAAgB;GAE7D,cAAc,aAAa,cACzB,eACA,eAEA,gBACA,iBAAiB,OACnB;GACA,gBAAgB,iBACd,eACA,cAAc,cAAc,WAC9B;GAEA,gBAAgB,MAAM,kBAAkB,eAAe,aAAa;GAEpE,MAAM,0BAA0B,MAAM,mBACpC,eACA,gBACF;GACA,IAAI,CAAC,yBACH;GAEF,mBAAmB;GAGnB,MAAM,EAAE,mBAAmB,mBAAmB,eAC5C;GAEF,MAAM,sBAAsB,iBAAiB,iBAAiB,IAC1D,aAAa,KAAK,iBAAiB,GAAG,CAAC,IACvC;GAEJ,IAAI,qBAAqB;IACvB,MAAM,6BACJ,cAAc;;IAIhB,IAAI,iBAAiB;SAGjB,aAAa,iBAAiB,gBAAgB,IAC9C,qBACA;MAEA,OAAO,MACL;OAAE;OAAS,OAAO;MAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;MACA,gBAAgB,QAAQ,gBAAgB;MACxC;KACF;WAEG,IACH,kBAAkB,iBAAiB,gBAAgB,KACnD,+BAA+B,sBAC/B;KAEA,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;KAC/B,gBAAgB,QAAQ,gBAAgB;KACxC;IACF,OACK,IACH,kBAAkB,iBAAiB,gBAAgB,KACnD,+BAA+B,sBAE/B,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;GAEnC;GAGA,IAAI,wBAAwB,iBAAkB;QAUxC,CAAC,yBARF,MAAM,wBACL,YACA,aACA,gBACA,iBAAiB,SACjB,UACF,KAAM,WAEuC,iBAAkB,GAAG;KAClE,OAAO,MACL;MAAE;MAAS,OAAO;KAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;KACA,gBAAgB,QAAQ,gBAAgB;KACxC;IACF;;GAGF,UAAU;GACV;EACF;EAEA,IAAI,yCAAyC,qBAAqB,CAAC,QACjE,OAAO,KAAK,MACV;GACE;GACA,UACE,yCAAyC;GAC3C,OAAO;EACT,GACA,WAAW,yCAAyC,qBAAqB,CAAC,OAAO,oIACnF;EAGF,IAAI,yCAAyC,qBAAqB,CAAC,QAAQ;GACzE,OAAO,KAAK,KACV,2KACF;GACA,OAAO,KAAK,MACV;IACE;IACA,UACE,yCAAyC;IAC3C,OAAO;GACT,GACA,GAAG,yCAAyC,qBAAqB,CAAC,OAAO,iIAC3E;EACF;EAEA,IAAI,CAAC;;OAEC,gBAAgB,QAAQ;IAE1B,OAAO,MACL;KAAE;KAAS;IAAO,GAClB,yCACF;IACA,UAAU,gBAAgB,IAAI;IAE9B,kBAAkB,CAAC;IACnB,IAAI,yBAAyB,UAC3B,gBAAgB;GAEpB;;CAEJ;CAEA,OAAO;EAAE;EAAS;EAAe;CAAgB;AACnD"}
1
+ {"version":3,"file":"filter-checks.js","names":[],"sources":["../../../../../lib/workers/repository/process/lookup/filter-checks.ts"],"sourcesContent":["import { isNonEmptyString, isNullOrUndefined } from '@sindresorhus/is';\nimport { mergeChildConfig } from '../../../../config/index.ts';\nimport type { MinimumReleaseAgeBehaviour } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { Release } from '../../../../modules/datasource/index.ts';\nimport { postprocessRelease } from '../../../../modules/datasource/postprocess-release.ts';\nimport type { VersioningApi } from '../../../../modules/versioning/index.ts';\nimport { getElapsedMs } from '../../../../util/date.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport { coerceNumber } from '../../../../util/number.ts';\nimport { applyPackageRules } from '../../../../util/package-rules/index.ts';\nimport { toMs } from '../../../../util/pretty-time.ts';\nimport type { LookupUpdateConfig, UpdateResult } from './types.ts';\nimport { getUpdateType } from './update-type.ts';\n\nexport interface InternalChecksResult {\n release?: Release;\n pendingChecks: boolean;\n pendingReleases: Release[];\n}\n\nexport async function filterInternalChecks(\n config: Partial<LookupUpdateConfig & UpdateResult>,\n versioningApi: VersioningApi,\n bucket: string,\n sortedReleases: Release[],\n): Promise<InternalChecksResult> {\n const {\n currentVersion,\n datasource,\n depName,\n packageName,\n internalChecksFilter,\n } = config;\n let release: Release | undefined = undefined;\n let pendingChecks = false;\n let pendingReleases: Release[] = [];\n if (internalChecksFilter === 'none') {\n // Don't care if minimumReleaseAge or minimumConfidence are unmet\n release = sortedReleases.pop();\n } else {\n const candidateVersionsWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n string[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // iterate through releases from highest to lowest, looking for the first which will pass checks if present\n for (let candidateRelease of sortedReleases.reverse()) {\n // merge the release data into dependency config\n let releaseConfig = mergeChildConfig(config, candidateRelease);\n // calculate updateType and then apply it\n releaseConfig.updateType = getUpdateType(\n releaseConfig,\n versioningApi,\n // TODO #22198\n currentVersion!,\n candidateRelease.version,\n );\n releaseConfig = mergeChildConfig(\n releaseConfig,\n releaseConfig[releaseConfig.updateType]!,\n );\n // Apply packageRules in case any apply to updateType\n releaseConfig = await applyPackageRules(releaseConfig, 'update-type');\n\n const updatedCandidateRelease = await postprocessRelease(\n releaseConfig,\n candidateRelease,\n );\n if (!updatedCandidateRelease) {\n continue;\n }\n candidateRelease = updatedCandidateRelease;\n\n // Now check for a minimumReleaseAge config\n const { minimumConfidence, minimumReleaseAge, updateType } =\n releaseConfig;\n\n const minimumReleaseAgeMs = isNonEmptyString(minimumReleaseAge)\n ? coerceNumber(toMs(minimumReleaseAge), 0)\n : 0;\n\n if (minimumReleaseAgeMs) {\n const minimumReleaseAgeBehaviour =\n releaseConfig.minimumReleaseAgeBehaviour;\n\n // if there is a releaseTimestamp, regardless of `minimumReleaseAgeBehaviour`, we should process it\n // v8 ignore else -- TODO: add test #40625\n if (candidateRelease.releaseTimestamp) {\n // we should skip this if we have a timestamp that isn't passing checks:\n if (\n getElapsedMs(candidateRelease.releaseTimestamp) <\n minimumReleaseAgeMs\n ) {\n // Skip it if it doesn't pass checks\n logger.trace(\n { depName, check: 'minimumReleaseAge' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n } // or if there is no timestamp, and we're running in `minimumReleaseAgeBehaviour=timestamp-required`\n else if (\n isNullOrUndefined(candidateRelease.releaseTimestamp) &&\n minimumReleaseAgeBehaviour === 'timestamp-required'\n ) {\n // Skip it, as we require a timestamp\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n pendingReleases.unshift(candidateRelease);\n continue;\n } // if there is no timestamp, and we're running in `optional` mode, we can allow it\n else if (\n isNullOrUndefined(candidateRelease.releaseTimestamp) &&\n minimumReleaseAgeBehaviour === 'timestamp-optional'\n ) {\n candidateVersionsWithoutReleaseTimestamp[\n minimumReleaseAgeBehaviour\n ].push(candidateRelease.version);\n }\n }\n\n // TODO #22198\n if (isActiveConfidenceLevel(minimumConfidence!)) {\n const confidenceLevel =\n (await getMergeConfidenceLevel(\n datasource!,\n packageName!,\n currentVersion!,\n candidateRelease.version,\n updateType!,\n )) ?? 'neutral';\n // TODO #22198\n if (!satisfiesConfidenceLevel(confidenceLevel, minimumConfidence!)) {\n logger.trace(\n { depName, check: 'minimumConfidence' },\n `Release ${candidateRelease.version} is pending status checks`,\n );\n pendingReleases.unshift(candidateRelease);\n continue;\n }\n }\n // If we get to here, then the release is OK and we can stop iterating\n release = candidateRelease;\n break;\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-required'],\n check: 'minimumReleaseAge',\n },\n `Marking ${candidateVersionsWithoutReleaseTimestamp['timestamp-required'].length} release(s) as pending, as they do not have a releaseTimestamp and we're running with minimumReleaseAgeBehaviour=timestamp-required`,\n );\n }\n\n if (candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n logger.once.debug(\n {\n depName,\n versions:\n candidateVersionsWithoutReleaseTimestamp['timestamp-optional'],\n check: 'minimumReleaseAge',\n },\n `${candidateVersionsWithoutReleaseTimestamp['timestamp-optional'].length} release(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (!release && pendingReleases.length) {\n // If all releases were pending then just take the highest\n logger.trace(\n { depName, bucket },\n 'All releases are pending - using latest',\n );\n release = pendingReleases.pop();\n // None are pending anymore because we took the latest, so empty the array\n pendingReleases = [];\n if (internalChecksFilter === 'strict') {\n pendingChecks = true;\n }\n }\n }\n\n return { release, pendingChecks, pendingReleases };\n}\n"],"mappings":";;;;;;;;;;;;AAyBA,eAAsB,qBACpB,QACA,eACA,QACA,gBAC+B;CAC/B,MAAM,EACJ,gBACA,YACA,SACA,aACA,yBACE;CACJ,IAAI,UAA+B,KAAA;CACnC,IAAI,gBAAgB;CACpB,IAAI,kBAA6B,CAAC;CAClC,IAAI,yBAAyB,QAE3B,UAAU,eAAe,IAAI;MACxB;EACL,MAAM,2CAGF;GACF,sBAAsB,CAAC;GACvB,sBAAsB,CAAC;EACzB;EAGA,KAAK,IAAI,oBAAoB,eAAe,QAAQ,GAAG;GAErD,IAAI,gBAAgB,iBAAiB,QAAQ,gBAAgB;GAE7D,cAAc,aAAa,cACzB,eACA,eAEA,gBACA,iBAAiB,OACnB;GACA,gBAAgB,iBACd,eACA,cAAc,cAAc,WAC9B;GAEA,gBAAgB,MAAM,kBAAkB,eAAe,aAAa;GAEpE,MAAM,0BAA0B,MAAM,mBACpC,eACA,gBACF;GACA,IAAI,CAAC,yBACH;GAEF,mBAAmB;GAGnB,MAAM,EAAE,mBAAmB,mBAAmB,eAC5C;GAEF,MAAM,sBAAsB,iBAAiB,iBAAiB,IAC1D,aAAa,KAAK,iBAAiB,GAAG,CAAC,IACvC;GAEJ,IAAI,qBAAqB;IACvB,MAAM,6BACJ,cAAc;;IAIhB,IAAI,iBAAiB;SAGjB,aAAa,iBAAiB,gBAAgB,IAC9C,qBACA;MAEA,OAAO,MACL;OAAE;OAAS,OAAO;MAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;MACA,gBAAgB,QAAQ,gBAAgB;MACxC;KACF;WAEG,IACH,kBAAkB,iBAAiB,gBAAgB,KACnD,+BAA+B,sBAC/B;KAEA,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;KAC/B,gBAAgB,QAAQ,gBAAgB;KACxC;IACF,OACK,IACH,kBAAkB,iBAAiB,gBAAgB,KACnD,+BAA+B,sBAE/B,yCACE,2BACD,CAAC,KAAK,iBAAiB,OAAO;GAEnC;GAGA,IAAI,wBAAwB,iBAAkB;QAUxC,CAAC,yBARF,MAAM,wBACL,YACA,aACA,gBACA,iBAAiB,SACjB,UACF,KAAM,WAEuC,iBAAkB,GAAG;KAClE,OAAO,MACL;MAAE;MAAS,OAAO;KAAoB,GACtC,WAAW,iBAAiB,QAAQ,0BACtC;KACA,gBAAgB,QAAQ,gBAAgB;KACxC;IACF;;GAGF,UAAU;GACV;EACF;EAEA,IAAI,yCAAyC,qBAAqB,CAAC,QACjE,OAAO,KAAK,MACV;GACE;GACA,UACE,yCAAyC;GAC3C,OAAO;EACT,GACA,WAAW,yCAAyC,qBAAqB,CAAC,OAAO,oIACnF;EAGF,IAAI,yCAAyC,qBAAqB,CAAC,QAAQ;GACzE,OAAO,KAAK,KACV,2KACF;GACA,OAAO,KAAK,MACV;IACE;IACA,UACE,yCAAyC;IAC3C,OAAO;GACT,GACA,GAAG,yCAAyC,qBAAqB,CAAC,OAAO,iIAC3E;EACF;;EAGA,IAAI,CAAC,WAAW,gBAAgB,QAAQ;GAEtC,OAAO,MACL;IAAE;IAAS;GAAO,GAClB,yCACF;GACA,UAAU,gBAAgB,IAAI;GAE9B,kBAAkB,CAAC;GACnB,IAAI,yBAAyB,UAC3B,gBAAgB;EAEpB;CACF;CAEA,OAAO;EAAE;EAAS;EAAe;CAAgB;AACnD"}
@@ -297,14 +297,11 @@ async function lookupUpdates(inconfig) {
297
297
  updateType: "digest",
298
298
  newValue: config.currentValue
299
299
  });
300
- } else if (config.pinDigests) {
301
- // v8 ignore else -- TODO: add test #40625
302
- if (!res.updates.some((update) => update.updateType === "pin")) res.updates.push({
303
- isPinDigest: true,
304
- updateType: "pinDigest",
305
- newValue: config.currentValue
306
- });
307
- }
300
+ } else if (config.pinDigests && !res.updates.some((update) => update.updateType === "pin")) res.updates.push({
301
+ isPinDigest: true,
302
+ updateType: "pinDigest",
303
+ newValue: config.currentValue
304
+ });
308
305
  if (versioningApi.valueToVersion) {
309
306
  res.currentVersion = versioningApi.valueToVersion(res.currentVersion);
310
307
  for (const update of res.updates) update.newVersion = versioningApi.valueToVersion(update.newVersion);