renovate 44.210.2 → 44.211.0

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 (307) hide show
  1. package/dist/config/options/index.js +1 -1
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/config/utils.js +2 -1
  4. package/dist/config/utils.js.map +1 -1
  5. package/dist/config/validation-helpers/regex-glob-matchers.js.map +1 -1
  6. package/dist/config/validation-helpers/utils.js +5 -1
  7. package/dist/config/validation-helpers/utils.js.map +1 -1
  8. package/dist/config/validation.js +8 -2
  9. package/dist/config/validation.js.map +1 -1
  10. package/dist/config-validator.js +1 -1
  11. package/dist/config-validator.js.map +1 -1
  12. package/dist/global-config-option-defaults.generated.js +1 -1
  13. package/dist/global-config-option-defaults.generated.js.map +1 -1
  14. package/dist/instrumentation/index.js +3 -2
  15. package/dist/instrumentation/index.js.map +1 -1
  16. package/dist/logger/bunyan.js +3 -2
  17. package/dist/logger/bunyan.js.map +1 -1
  18. package/dist/logger/pretty-stdout.js +2 -1
  19. package/dist/logger/pretty-stdout.js.map +1 -1
  20. package/dist/modules/datasource/apk/index.js +2 -2
  21. package/dist/modules/datasource/apk/index.js.map +1 -1
  22. package/dist/modules/datasource/artifactory/index.js +2 -3
  23. package/dist/modules/datasource/artifactory/index.js.map +1 -1
  24. package/dist/modules/datasource/bazel/index.js +2 -1
  25. package/dist/modules/datasource/bazel/index.js.map +1 -1
  26. package/dist/modules/datasource/cdnjs/index.js +2 -1
  27. package/dist/modules/datasource/cdnjs/index.js.map +1 -1
  28. package/dist/modules/datasource/conda/index.js +2 -1
  29. package/dist/modules/datasource/conda/index.js.map +1 -1
  30. package/dist/modules/datasource/crate/index.js +2 -1
  31. package/dist/modules/datasource/crate/index.js.map +1 -1
  32. package/dist/modules/datasource/dart-version/index.js +2 -1
  33. package/dist/modules/datasource/dart-version/index.js.map +1 -1
  34. package/dist/modules/datasource/datasource.js +2 -2
  35. package/dist/modules/datasource/datasource.js.map +1 -1
  36. package/dist/modules/datasource/deb/url.js +3 -1
  37. package/dist/modules/datasource/deb/url.js.map +1 -1
  38. package/dist/modules/datasource/devbox/index.js +2 -1
  39. package/dist/modules/datasource/devbox/index.js.map +1 -1
  40. package/dist/modules/datasource/docker/common.js +10 -8
  41. package/dist/modules/datasource/docker/common.js.map +1 -1
  42. package/dist/modules/datasource/docker/ecr.js +2 -1
  43. package/dist/modules/datasource/docker/ecr.js.map +1 -1
  44. package/dist/modules/datasource/docker/index.js +20 -17
  45. package/dist/modules/datasource/docker/index.js.map +1 -1
  46. package/dist/modules/datasource/gitea-tags/base.js +2 -3
  47. package/dist/modules/datasource/gitea-tags/base.js.map +1 -1
  48. package/dist/modules/datasource/github-tags/index.js +2 -1
  49. package/dist/modules/datasource/github-tags/index.js.map +1 -1
  50. package/dist/modules/datasource/gitlab-tags/index.js +2 -3
  51. package/dist/modules/datasource/gitlab-tags/index.js.map +1 -1
  52. package/dist/modules/datasource/go/base.js +1 -1
  53. package/dist/modules/datasource/go/base.js.map +1 -1
  54. package/dist/modules/datasource/go/common.js +8 -2
  55. package/dist/modules/datasource/go/common.js.map +1 -1
  56. package/dist/modules/datasource/go/env.js +2 -1
  57. package/dist/modules/datasource/go/env.js.map +1 -1
  58. package/dist/modules/datasource/go/releases-goproxy.js +7 -5
  59. package/dist/modules/datasource/go/releases-goproxy.js.map +1 -1
  60. package/dist/modules/datasource/helm/index.js +2 -1
  61. package/dist/modules/datasource/helm/index.js.map +1 -1
  62. package/dist/modules/datasource/hexpm-bob/index.js +2 -1
  63. package/dist/modules/datasource/hexpm-bob/index.js.map +1 -1
  64. package/dist/modules/datasource/index.js +4 -3
  65. package/dist/modules/datasource/index.js.map +1 -1
  66. package/dist/modules/datasource/java-version/adoptium.js +3 -2
  67. package/dist/modules/datasource/java-version/adoptium.js.map +1 -1
  68. package/dist/modules/datasource/java-version/graalvm.js +2 -1
  69. package/dist/modules/datasource/java-version/graalvm.js.map +1 -1
  70. package/dist/modules/datasource/maven/index.js.map +1 -1
  71. package/dist/modules/datasource/maven/util.js +7 -10
  72. package/dist/modules/datasource/maven/util.js.map +1 -1
  73. package/dist/modules/datasource/npm/npmrc.js +2 -2
  74. package/dist/modules/datasource/npm/npmrc.js.map +1 -1
  75. package/dist/modules/datasource/nuget/v3.js +3 -5
  76. package/dist/modules/datasource/nuget/v3.js.map +1 -1
  77. package/dist/modules/datasource/packagist/index.js +4 -5
  78. package/dist/modules/datasource/packagist/index.js.map +1 -1
  79. package/dist/modules/datasource/pod/index.js +4 -4
  80. package/dist/modules/datasource/pod/index.js.map +1 -1
  81. package/dist/modules/datasource/pypi/index.js +19 -11
  82. package/dist/modules/datasource/pypi/index.js.map +1 -1
  83. package/dist/modules/datasource/python-version/index.js +2 -3
  84. package/dist/modules/datasource/python-version/index.js.map +1 -1
  85. package/dist/modules/datasource/repology/index.js +4 -3
  86. package/dist/modules/datasource/repology/index.js.map +1 -1
  87. package/dist/modules/datasource/rpm/providers/common.js +3 -1
  88. package/dist/modules/datasource/rpm/providers/common.js.map +1 -1
  89. package/dist/modules/datasource/rubygems/index.js +2 -5
  90. package/dist/modules/datasource/rubygems/index.js.map +1 -1
  91. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js +13 -18
  92. package/dist/modules/datasource/rubygems/versions-endpoint-cache.js.map +1 -1
  93. package/dist/modules/datasource/terraform-module/base.js +2 -1
  94. package/dist/modules/datasource/terraform-module/base.js.map +1 -1
  95. package/dist/modules/datasource/terraform-provider/index.js +2 -3
  96. package/dist/modules/datasource/terraform-provider/index.js.map +1 -1
  97. package/dist/modules/manager/bazel-module/parser/context.js +0 -1
  98. package/dist/modules/manager/bazel-module/parser/context.js.map +1 -1
  99. package/dist/modules/manager/bundler/host-rules.js +4 -1
  100. package/dist/modules/manager/bundler/host-rules.js.map +1 -1
  101. package/dist/modules/manager/composer/range.js +1 -1
  102. package/dist/modules/manager/composer/range.js.map +1 -1
  103. package/dist/modules/manager/custom/utils.js +3 -1
  104. package/dist/modules/manager/custom/utils.js.map +1 -1
  105. package/dist/modules/manager/devbox/schema.js +2 -1
  106. package/dist/modules/manager/devbox/schema.js.map +1 -1
  107. package/dist/modules/manager/dockerfile/extract.js +10 -2
  108. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  109. package/dist/modules/manager/fingerprint.generated.js +1 -1
  110. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  111. package/dist/modules/manager/github-actions/parse.js +2 -1
  112. package/dist/modules/manager/github-actions/parse.js.map +1 -1
  113. package/dist/modules/manager/gomod/artifacts.js +5 -2
  114. package/dist/modules/manager/gomod/artifacts.js.map +1 -1
  115. package/dist/modules/manager/gradle/artifacts.js +5 -2
  116. package/dist/modules/manager/gradle/artifacts.js.map +1 -1
  117. package/dist/modules/manager/gradle/utils.js +2 -1
  118. package/dist/modules/manager/gradle/utils.js.map +1 -1
  119. package/dist/modules/manager/gradle-wrapper/utils.js +9 -5
  120. package/dist/modules/manager/gradle-wrapper/utils.js.map +1 -1
  121. package/dist/modules/manager/helm-values/util.js +1 -1
  122. package/dist/modules/manager/helm-values/util.js.map +1 -1
  123. package/dist/modules/manager/helmfile/artifacts.js +1 -1
  124. package/dist/modules/manager/helmfile/artifacts.js.map +1 -1
  125. package/dist/modules/manager/helmv3/artifacts.js +1 -1
  126. package/dist/modules/manager/helmv3/artifacts.js.map +1 -1
  127. package/dist/modules/manager/maven/extract.js +5 -2
  128. package/dist/modules/manager/maven/extract.js.map +1 -1
  129. package/dist/modules/manager/maven-wrapper/artifacts.js +3 -2
  130. package/dist/modules/manager/maven-wrapper/artifacts.js.map +1 -1
  131. package/dist/modules/manager/mise/artifacts.js +2 -1
  132. package/dist/modules/manager/mise/artifacts.js.map +1 -1
  133. package/dist/modules/manager/mise/extract.js.map +1 -1
  134. package/dist/modules/manager/npm/artifacts.js +3 -1
  135. package/dist/modules/manager/npm/artifacts.js.map +1 -1
  136. package/dist/modules/manager/npm/extract/common/dependency.js +4 -1
  137. package/dist/modules/manager/npm/extract/common/dependency.js.map +1 -1
  138. package/dist/modules/manager/npm/extract/common/package-file.js +2 -1
  139. package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
  140. package/dist/modules/manager/npm/extract/index.js.map +1 -1
  141. package/dist/modules/manager/npm/extract/post/locked-versions.js.map +1 -1
  142. package/dist/modules/manager/npm/npmrc.js +2 -1
  143. package/dist/modules/manager/npm/npmrc.js.map +1 -1
  144. package/dist/modules/manager/npm/post-update/index.js +2 -1
  145. package/dist/modules/manager/npm/post-update/index.js.map +1 -1
  146. package/dist/modules/manager/npm/post-update/npm.js +2 -3
  147. package/dist/modules/manager/npm/post-update/npm.js.map +1 -1
  148. package/dist/modules/manager/npm/post-update/yarn.js.map +1 -1
  149. package/dist/modules/manager/npm/schema.js +6 -2
  150. package/dist/modules/manager/npm/schema.js.map +1 -1
  151. package/dist/modules/manager/npm/update/dependency/index.js +3 -2
  152. package/dist/modules/manager/npm/update/dependency/index.js.map +1 -1
  153. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js +6 -2
  154. package/dist/modules/manager/npm/update/locked-dependency/common/parent-version.js.map +1 -1
  155. package/dist/modules/manager/npm/update/locked-dependency/package-lock/get-locked.js +2 -1
  156. package/dist/modules/manager/npm/update/locked-dependency/package-lock/get-locked.js.map +1 -1
  157. package/dist/modules/manager/nuget/package-tree.js +2 -1
  158. package/dist/modules/manager/nuget/package-tree.js.map +1 -1
  159. package/dist/modules/manager/paket/update-locked.js +4 -1
  160. package/dist/modules/manager/paket/update-locked.js.map +1 -1
  161. package/dist/modules/manager/pipenv/extract.js +4 -1
  162. package/dist/modules/manager/pipenv/extract.js.map +1 -1
  163. package/dist/modules/platform/azure/azure-helper.js +2 -1
  164. package/dist/modules/platform/azure/azure-helper.js.map +1 -1
  165. package/dist/modules/platform/azure/index.js +7 -3
  166. package/dist/modules/platform/azure/index.js.map +1 -1
  167. package/dist/modules/platform/bitbucket/index.js +13 -6
  168. package/dist/modules/platform/bitbucket/index.js.map +1 -1
  169. package/dist/modules/platform/bitbucket-server/index.js +13 -9
  170. package/dist/modules/platform/bitbucket-server/index.js.map +1 -1
  171. package/dist/modules/platform/codecommit/index.js +2 -2
  172. package/dist/modules/platform/codecommit/index.js.map +1 -1
  173. package/dist/modules/platform/gerrit/client.js +4 -1
  174. package/dist/modules/platform/gerrit/client.js.map +1 -1
  175. package/dist/modules/platform/gerrit/index.js +3 -2
  176. package/dist/modules/platform/gerrit/index.js.map +1 -1
  177. package/dist/modules/platform/gitea/gitea-helper.js +5 -4
  178. package/dist/modules/platform/gitea/gitea-helper.js.map +1 -1
  179. package/dist/modules/platform/gitea/index.js +11 -4
  180. package/dist/modules/platform/gitea/index.js.map +1 -1
  181. package/dist/modules/platform/github/index.js +36 -23
  182. package/dist/modules/platform/github/index.js.map +1 -1
  183. package/dist/modules/platform/gitlab/index.js +16 -9
  184. package/dist/modules/platform/gitlab/index.js.map +1 -1
  185. package/dist/modules/platform/scm-manager/index.js +4 -1
  186. package/dist/modules/platform/scm-manager/index.js.map +1 -1
  187. package/dist/modules/platform/scm-manager/utils.js +2 -1
  188. package/dist/modules/platform/scm-manager/utils.js.map +1 -1
  189. package/dist/modules/versioning/cargo/index.js.map +1 -1
  190. package/dist/modules/versioning/composer/index.js +2 -1
  191. package/dist/modules/versioning/composer/index.js.map +1 -1
  192. package/dist/modules/versioning/conan/common.js +4 -1
  193. package/dist/modules/versioning/conan/common.js.map +1 -1
  194. package/dist/modules/versioning/debian/index.js +2 -1
  195. package/dist/modules/versioning/debian/index.js.map +1 -1
  196. package/dist/modules/versioning/gradle/compare.js +2 -1
  197. package/dist/modules/versioning/gradle/compare.js.map +1 -1
  198. package/dist/modules/versioning/hex/index.js +2 -1
  199. package/dist/modules/versioning/hex/index.js.map +1 -1
  200. package/dist/modules/versioning/julia/index.js.map +1 -1
  201. package/dist/modules/versioning/maven/compare.js +17 -7
  202. package/dist/modules/versioning/maven/compare.js.map +1 -1
  203. package/dist/modules/versioning/npm/index.js +2 -1
  204. package/dist/modules/versioning/npm/index.js.map +1 -1
  205. package/dist/modules/versioning/npm/range.js.map +1 -1
  206. package/dist/modules/versioning/paket/index.js +2 -1
  207. package/dist/modules/versioning/paket/index.js.map +1 -1
  208. package/dist/modules/versioning/paket/range.js +7 -3
  209. package/dist/modules/versioning/paket/range.js.map +1 -1
  210. package/dist/modules/versioning/pep440/index.js +2 -1
  211. package/dist/modules/versioning/pep440/index.js.map +1 -1
  212. package/dist/modules/versioning/poetry/index.js +2 -1
  213. package/dist/modules/versioning/poetry/index.js.map +1 -1
  214. package/dist/modules/versioning/regex/index.js +1 -1
  215. package/dist/modules/versioning/regex/index.js.map +1 -1
  216. package/dist/modules/versioning/rez/index.js +2 -1
  217. package/dist/modules/versioning/rez/index.js.map +1 -1
  218. package/dist/modules/versioning/vcpkg/index.js +2 -1
  219. package/dist/modules/versioning/vcpkg/index.js.map +1 -1
  220. package/dist/util/cache/package/impl/base.js +2 -1
  221. package/dist/util/cache/package/impl/base.js.map +1 -1
  222. package/dist/util/cache/package/with-cache.js +2 -1
  223. package/dist/util/cache/package/with-cache.js.map +1 -1
  224. package/dist/util/check-token.js +7 -4
  225. package/dist/util/check-token.js.map +1 -1
  226. package/dist/util/exec/utils.js +4 -1
  227. package/dist/util/exec/utils.js.map +1 -1
  228. package/dist/util/git/auth.js +5 -1
  229. package/dist/util/git/auth.js.map +1 -1
  230. package/dist/util/git/error.js.map +1 -1
  231. package/dist/util/host-rules.js +5 -3
  232. package/dist/util/host-rules.js.map +1 -1
  233. package/dist/util/http/cache/abstract-http-cache-provider.js +3 -2
  234. package/dist/util/http/cache/abstract-http-cache-provider.js.map +1 -1
  235. package/dist/util/http/cache/package-http-cache-provider.js +2 -1
  236. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -1
  237. package/dist/util/http/github.js +15 -11
  238. package/dist/util/http/github.js.map +1 -1
  239. package/dist/util/http/gitlab.js +5 -4
  240. package/dist/util/http/gitlab.js.map +1 -1
  241. package/dist/util/http/http.js +2 -1
  242. package/dist/util/http/http.js.map +1 -1
  243. package/dist/util/http/jwt.js +2 -1
  244. package/dist/util/http/jwt.js.map +1 -1
  245. package/dist/util/http/retry-after.js +2 -1
  246. package/dist/util/http/retry-after.js.map +1 -1
  247. package/dist/util/http/status.js +95 -0
  248. package/dist/util/http/status.js.map +1 -0
  249. package/dist/util/merge-confidence/index.js +3 -2
  250. package/dist/util/merge-confidence/index.js.map +1 -1
  251. package/dist/util/package-rules/current-version.js +4 -1
  252. package/dist/util/package-rules/current-version.js.map +1 -1
  253. package/dist/util/package-rules/index.js +7 -3
  254. package/dist/util/package-rules/index.js.map +1 -1
  255. package/dist/util/schema-utils/index.js +5 -0
  256. package/dist/util/schema-utils/index.js.map +1 -1
  257. package/dist/workers/global/config/parse/host-rules-from-env.js +2 -1
  258. package/dist/workers/global/config/parse/host-rules-from-env.js.map +1 -1
  259. package/dist/workers/repository/common.js +4 -1
  260. package/dist/workers/repository/common.js.map +1 -1
  261. package/dist/workers/repository/config-migration/branch/index.js +2 -1
  262. package/dist/workers/repository/config-migration/branch/index.js.map +1 -1
  263. package/dist/workers/repository/dependency-dashboard.js +6 -2
  264. package/dist/workers/repository/dependency-dashboard.js.map +1 -1
  265. package/dist/workers/repository/finalize/repository-statistics.js +4 -1
  266. package/dist/workers/repository/finalize/repository-statistics.js.map +1 -1
  267. package/dist/workers/repository/init/merge.js +13 -3
  268. package/dist/workers/repository/init/merge.js.map +1 -1
  269. package/dist/workers/repository/onboarding/branch/check.js +2 -1
  270. package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
  271. package/dist/workers/repository/onboarding/pr/pr-list.js +4 -2
  272. package/dist/workers/repository/onboarding/pr/pr-list.js.map +1 -1
  273. package/dist/workers/repository/process/extract-update.js +4 -1
  274. package/dist/workers/repository/process/extract-update.js.map +1 -1
  275. package/dist/workers/repository/process/lookup/digest.js +2 -1
  276. package/dist/workers/repository/process/lookup/digest.js.map +1 -1
  277. package/dist/workers/repository/process/lookup/generate.js +1 -1
  278. package/dist/workers/repository/process/lookup/generate.js.map +1 -1
  279. package/dist/workers/repository/process/lookup/index.js +4 -1
  280. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  281. package/dist/workers/repository/process/lookup/utils.js +7 -1
  282. package/dist/workers/repository/process/lookup/utils.js.map +1 -1
  283. package/dist/workers/repository/process/vulnerabilities.js +10 -3
  284. package/dist/workers/repository/process/vulnerabilities.js.map +1 -1
  285. package/dist/workers/repository/reconfigure/index.js +2 -1
  286. package/dist/workers/repository/reconfigure/index.js.map +1 -1
  287. package/dist/workers/repository/update/branch/auto-replace.js +6 -2
  288. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  289. package/dist/workers/repository/update/branch/errors.js +2 -1
  290. package/dist/workers/repository/update/branch/errors.js.map +1 -1
  291. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js +2 -2
  292. package/dist/workers/repository/update/branch/execute-post-upgrade-commands.js.map +1 -1
  293. package/dist/workers/repository/update/branch/get-updated.js +1 -2
  294. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  295. package/dist/workers/repository/update/branch/index.js +2 -1
  296. package/dist/workers/repository/update/branch/index.js.map +1 -1
  297. package/dist/workers/repository/update/branch/status-checks.js +2 -1
  298. package/dist/workers/repository/update/branch/status-checks.js.map +1 -1
  299. package/dist/workers/repository/update/pr/body/index.js.map +1 -1
  300. package/dist/workers/repository/update/pr/changelog/release-notes.js +3 -2
  301. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  302. package/dist/workers/repository/update/pr/index.js +7 -3
  303. package/dist/workers/repository/update/pr/index.js.map +1 -1
  304. package/dist/workers/repository/updates/generate.js +6 -3
  305. package/dist/workers/repository/updates/generate.js.map +1 -1
  306. package/package.json +2 -2
  307. package/renovate-schema.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"get-updated.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/get-updated.ts"],"sourcesContent":["import { isNonEmptyArray, isObject } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { extractPackageFile, get } from '../../../../modules/manager/index.ts';\nimport type {\n ArtifactError,\n ArtifactNotice,\n PackageFile,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../../../../modules/manager/types.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport type { FileAddition, FileChange } from '../../../../util/git/types.ts';\nimport { coerceString } from '../../../../util/string.ts';\nimport type { BranchConfig, BranchUpgradeConfig } from '../../../types.ts';\nimport { normalizeDepNames } from '../../extract/manager-files.ts';\nimport { doAutoReplace } from './auto-replace.ts';\n\nexport interface PackageFilesResult {\n artifactErrors: ArtifactError[];\n reuseExistingBranch?: boolean;\n updatedPackageFiles: FileChange[];\n updatedArtifacts: FileChange[];\n artifactNotices: ArtifactNotice[];\n}\n\nasync function getFileContent(\n updatedFileContents: Record<string, string>,\n filePath: string,\n config: BranchConfig,\n): Promise<string | null> {\n let fileContent: string | null = updatedFileContents[filePath];\n if (!fileContent) {\n fileContent = await getFile(\n filePath,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n }\n return fileContent;\n}\n\nfunction sortPackageFiles(\n config: BranchConfig,\n manager: string,\n packageFiles: FilePath[],\n): void {\n const managerPackageFiles = config.packageFiles?.[manager];\n if (!managerPackageFiles) {\n return;\n }\n packageFiles.sort((lhs, rhs) => {\n const lhsIndex = managerPackageFiles.findIndex(\n (entry) => entry.packageFile === lhs.path,\n );\n const rhsIndex = managerPackageFiles.findIndex(\n (entry) => entry.packageFile === rhs.path,\n );\n return lhsIndex - rhsIndex;\n });\n}\n\nfunction hasAny(set: Set<string>, targets: Iterable<string>): boolean {\n for (const target of targets) {\n if (set.has(target)) {\n return true;\n }\n }\n return false;\n}\n\nfunction getUpdatedLockFileContent(\n updatedDeps: BranchUpgradeConfig[],\n updatedFileContents: Record<string, string>,\n): string | undefined {\n for (const upgrade of updatedDeps) {\n const lockFiles = [upgrade.lockFile, ...coerceArray(upgrade.lockFiles)];\n for (const lockFile of lockFiles) {\n if (lockFile && updatedFileContents[lockFile] !== undefined) {\n return updatedFileContents[lockFile];\n }\n }\n }\n\n return undefined;\n}\n\nfunction removeUnrefreshedLockfileOnlyChanges(\n packageFiles: FileChange[],\n updatedDeps: BranchUpgradeConfig[],\n results: UpdateArtifactsResult[] | null,\n): string[] {\n const removedLockFiles: string[] = [];\n const refreshedFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.file ? [result.file.path] : [],\n ),\n );\n const lockFiles = new Set(\n updatedDeps\n .filter((upgrade) => upgrade.isLockfileOnly)\n .flatMap((upgrade) => [\n upgrade.lockFile,\n ...coerceArray(upgrade.lockFiles),\n ]),\n );\n for (let index = packageFiles.length - 1; index >= 0; index -= 1) {\n const path = packageFiles[index].path;\n if (lockFiles.has(path) && !refreshedFiles.has(path)) {\n packageFiles.splice(index, 1);\n removedLockFiles.push(path);\n }\n }\n return removedLockFiles;\n}\n\nfunction reportUnrefreshedLockfileOnlyChanges(\n removedLockFiles: string[],\n results: UpdateArtifactsResult[] | null,\n artifactErrors: ArtifactError[],\n): void {\n const artifactErrorFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.artifactError ? [result.artifactError.fileName] : [],\n ),\n );\n for (const lockFile of removedLockFiles) {\n if (!artifactErrorFiles.has(lockFile)) {\n artifactErrors.push({\n fileName: lockFile,\n stderr: 'Lockfile-only update could not be refreshed',\n });\n }\n }\n}\n\nfunction removeSupersededLockFileChanges(\n packageFiles: FileChange[],\n updatedDeps: BranchUpgradeConfig[],\n results: UpdateArtifactsResult[] | null,\n): void {\n const artifactFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.file ? [result.file.path] : [],\n ),\n );\n const lockFiles = new Set(\n updatedDeps\n .filter((upgrade) => upgrade.isLockfileOnly)\n .flatMap((upgrade) => [\n upgrade.lockFile,\n ...coerceArray(upgrade.lockFiles),\n ]),\n );\n for (let index = packageFiles.length - 1; index >= 0; index -= 1) {\n const path = packageFiles[index].path;\n if (lockFiles.has(path) && artifactFiles.has(path)) {\n packageFiles.splice(index, 1);\n }\n }\n}\n\ntype FilePath = Pick<FileChange, 'path'>;\n\nfunction getManagersForPackageFiles<T extends FilePath>(\n packageFiles: T[],\n managerPackageFiles: Record<string, Set<string>>,\n): Set<string> {\n const packageFileNames = packageFiles.map((packageFile) => packageFile.path);\n return new Set(\n Object.keys(managerPackageFiles).filter((manager) =>\n hasAny(managerPackageFiles[manager], packageFileNames),\n ),\n );\n}\n\nfunction getPackageFilesForManager<T extends FilePath>(\n packageFiles: T[],\n managerPackageFiles: Set<string>,\n): T[] {\n return packageFiles.filter((packageFile) =>\n managerPackageFiles.has(packageFile.path),\n );\n}\n\nexport async function getUpdatedPackageFiles(\n config: BranchConfig,\n): Promise<PackageFilesResult> {\n logger.trace({ config });\n const reuseExistingBranch = config.reuseExistingBranch!;\n logger.debug(\n `manager.getUpdatedPackageFiles() reuseExistingBranch=${reuseExistingBranch}`,\n );\n let updatedFileContents: Record<string, string> = {};\n const nonUpdatedFileContents: Record<string, string> = {};\n const managerPackageFiles: Record<string, Set<string>> = {};\n const packageFileUpdatedDeps: Record<string, BranchUpgradeConfig[]> = {};\n const lockFileMaintenanceFiles: string[] = [];\n let firstUpdate = true;\n for (const upgrade of config.upgrades) {\n const manager = upgrade.manager;\n const packageFile = upgrade.packageFile!;\n const depName = upgrade.depName!;\n // TODO: fix types, can be undefined (#22198)\n const newVersion = upgrade.newVersion!;\n const currentVersion = upgrade.currentVersion!;\n const updateLockedDependency = get(manager, 'updateLockedDependency')!;\n managerPackageFiles[manager] ??= new Set<string>();\n managerPackageFiles[manager].add(packageFile);\n packageFileUpdatedDeps[packageFile] ??= [];\n packageFileUpdatedDeps[packageFile].push({ ...upgrade });\n const packageFileContent = await getFileContent(\n updatedFileContents,\n packageFile,\n config,\n );\n let lockFileContent: string | null = null;\n const lockFile = upgrade.lockFile ?? upgrade.lockFiles?.[0] ?? '';\n if (lockFile) {\n lockFileContent = await getFileContent(\n updatedFileContents,\n lockFile,\n config,\n );\n }\n // istanbul ignore if\n if (\n reuseExistingBranch &&\n (!packageFileContent || (lockFile && !lockFileContent))\n ) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after file not found',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (upgrade.updateType === 'lockFileMaintenance') {\n lockFileMaintenanceFiles.push(packageFile);\n } else if (upgrade.isRemediation) {\n const { status, files } = await updateLockedDependency({\n ...upgrade,\n depName,\n newVersion,\n currentVersion,\n packageFile,\n packageFileContent: packageFileContent!,\n lockFile,\n lockFileContent: lockFileContent!,\n allowParentUpdates: true,\n allowHigherOrRemoved: true,\n });\n if (reuseExistingBranch && status !== 'already-updated') {\n logger.debug(\n { lockFile, depName, status },\n 'Need to retry branch as it is not already up-to-date',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (files) {\n updatedFileContents = { ...updatedFileContents, ...files };\n Object.keys(files).forEach(\n (file) => delete nonUpdatedFileContents[file],\n );\n }\n if (status === 'update-failed' || status === 'unsupported') {\n upgrade.remediationNotPossible = true;\n }\n } else if (upgrade.isLockfileUpdate) {\n if (updateLockedDependency) {\n const { status, files } = await updateLockedDependency({\n ...upgrade,\n depName,\n newVersion,\n currentVersion,\n packageFile,\n packageFileContent: packageFileContent!,\n lockFile,\n lockFileContent: lockFileContent!,\n allowParentUpdates: false,\n });\n if (status === 'unsupported') {\n // incompatible lock file\n if (!updatedFileContents[packageFile]) {\n nonUpdatedFileContents[packageFile] = packageFileContent!;\n }\n } else if (status === 'already-updated') {\n logger.debug(\n `Upgrade of ${depName} to ${newVersion} is already done in existing branch`,\n );\n } else {\n // something changed\n if (reuseExistingBranch) {\n logger.debug(\n { lockFile, depName, status },\n 'Need to retry branch as upgrade requirements are not mets',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (files) {\n updatedFileContents = { ...updatedFileContents, ...files };\n Object.keys(files).forEach(\n (file) => delete nonUpdatedFileContents[file],\n );\n }\n }\n } else {\n logger.debug(\n { manager },\n 'isLockFileUpdate without updateLockedDependency',\n );\n if (!updatedFileContents[packageFile]) {\n nonUpdatedFileContents[packageFile] = packageFileContent!;\n }\n }\n } else {\n const updateDependency = get(manager, 'updateDependency');\n if (!updateDependency) {\n let res = await doAutoReplace(\n upgrade,\n packageFileContent!,\n reuseExistingBranch,\n firstUpdate,\n );\n firstUpdate = false;\n if (res) {\n res = await applyManagerBumpPackageVersion(res, upgrade);\n if (res === packageFileContent) {\n logger.debug({ packageFile, depName }, 'No content changed');\n } else {\n logger.debug({ packageFile, depName }, 'Contents updated');\n updatedFileContents[packageFile] = res!;\n delete nonUpdatedFileContents[packageFile];\n }\n continue;\n } else if (reuseExistingBranch) {\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.error({ packageFile, depName }, 'Could not autoReplace');\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n const result = await updateDependency({\n packageFile,\n fileContent: packageFileContent!,\n upgrade,\n });\n const { content, updatedOutOfBand } = isObject(result)\n ? result\n : { content: result, updatedOutOfBand: false };\n const newContent = await applyManagerBumpPackageVersion(content, upgrade);\n if (!newContent) {\n if (reuseExistingBranch) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after error updating content',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.debug(\n { existingContent: packageFileContent, config: upgrade },\n 'Error updating file',\n );\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n if (newContent !== packageFileContent) {\n if (reuseExistingBranch) {\n // This ensure it's always 1 commit from Renovate\n logger.debug(\n { packageFile, depName },\n 'Need to update package file so will rebase first',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.debug(\n `Updating ${depName} in ${coerceString(packageFile, lockFile)}`,\n );\n updatedFileContents[packageFile] = newContent;\n delete nonUpdatedFileContents[packageFile];\n } else if (updatedOutOfBand) {\n updatedFileContents[packageFile] = newContent;\n delete nonUpdatedFileContents[packageFile];\n }\n }\n }\n const updatedPackageFiles: FileAddition[] = Object.keys(\n updatedFileContents,\n ).map((name) => ({\n type: 'addition',\n path: name,\n contents: updatedFileContents[name],\n }));\n const updatedArtifacts: FileChange[] = [];\n const artifactErrors: ArtifactError[] = [];\n const artifactNotices: ArtifactNotice[] = [];\n if (isNonEmptyArray(updatedPackageFiles)) {\n logger.debug('updateArtifacts for updatedPackageFiles');\n const updatedPackageFileManagers = getManagersForPackageFiles(\n updatedPackageFiles,\n managerPackageFiles,\n );\n for (const manager of updatedPackageFileManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n updatedPackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const updatedDeps = packageFileUpdatedDeps[packageFile.path];\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps,\n // TODO #22198\n newPackageFileContent: packageFile.contents!.toString(),\n newLockFileContent: getUpdatedLockFileContent(\n updatedDeps,\n updatedFileContents,\n ),\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n if (manager === 'mise') {\n const removedLockFiles = removeUnrefreshedLockfileOnlyChanges(\n updatedPackageFiles,\n updatedDeps,\n results,\n );\n reportUnrefreshedLockfileOnlyChanges(\n removedLockFiles,\n results,\n artifactErrors,\n );\n removeSupersededLockFileChanges(\n updatedPackageFiles,\n updatedDeps,\n results,\n );\n }\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n if (isNonEmptyArray(results)) {\n await checkForPendingVersions(\n manager,\n packageFile.path,\n packageFile.contents!.toString(),\n updatedDeps,\n artifactErrors,\n config,\n );\n }\n }\n }\n }\n const nonUpdatedPackageFiles: FileAddition[] = Object.keys(\n nonUpdatedFileContents,\n ).map((name) => ({\n type: 'addition',\n path: name,\n contents: nonUpdatedFileContents[name],\n }));\n if (isNonEmptyArray(nonUpdatedPackageFiles)) {\n logger.debug('updateArtifacts for nonUpdatedPackageFiles');\n const nonUpdatedPackageFileManagers = getManagersForPackageFiles(\n nonUpdatedPackageFiles,\n managerPackageFiles,\n );\n for (const manager of nonUpdatedPackageFileManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n nonUpdatedPackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const updatedDeps = packageFileUpdatedDeps[packageFile.path];\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps,\n // TODO #22198\n newPackageFileContent: packageFile.contents!.toString(),\n newLockFileContent: getUpdatedLockFileContent(\n updatedDeps,\n updatedFileContents,\n ),\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n if (isNonEmptyArray(results)) {\n updatedPackageFiles.push(packageFile);\n await checkForPendingVersions(\n manager,\n packageFile.path,\n packageFile.contents!.toString(),\n updatedDeps,\n artifactErrors,\n config,\n );\n }\n }\n }\n }\n if (!reuseExistingBranch) {\n const lockFileMaintenancePackageFiles: FilePath[] =\n lockFileMaintenanceFiles.map((name) => ({\n path: name,\n }));\n // Only perform lock file maintenance if it's a fresh commit\n if (isNonEmptyArray(lockFileMaintenanceFiles)) {\n logger.debug('updateArtifacts for lockFileMaintenanceFiles');\n const lockFileMaintenanceManagers = getManagersForPackageFiles(\n lockFileMaintenancePackageFiles,\n managerPackageFiles,\n );\n for (const manager of lockFileMaintenanceManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n lockFileMaintenancePackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const contents =\n updatedFileContents[packageFile.path] ||\n (await getFile(packageFile.path, config.baseBranch));\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps: [],\n newPackageFileContent: contents!,\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n }\n }\n }\n }\n return {\n reuseExistingBranch, // Need to overwrite original config\n updatedPackageFiles,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n };\n}\n\n// workaround, see #27319\nfunction patchConfigForArtifactsUpdate(\n config: BranchConfig,\n manager: string,\n packageFileName: string,\n): UpdateArtifactsConfig {\n // drop any lockFiles that happen to be defined on the branch config\n const updatedConfig = { ...config };\n delete updatedConfig.lockFiles;\n if (isNonEmptyArray(updatedConfig.packageFiles?.[manager])) {\n const managerPackageFiles: PackageFile[] =\n updatedConfig.packageFiles?.[manager];\n const packageFile = managerPackageFiles.find(\n (p) => p.packageFile === packageFileName,\n );\n if (packageFile && isNonEmptyArray(packageFile.lockFiles)) {\n updatedConfig.lockFiles = packageFile.lockFiles;\n }\n }\n return updatedConfig;\n}\n\nasync function managerUpdateArtifacts(\n manager: string,\n updateArtifact: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n const updateArtifacts = get(manager, 'updateArtifacts');\n if (!updateArtifacts) {\n return null;\n }\n\n if (updateArtifact.config.skipArtifactsUpdate) {\n logger.debug(\n { manager, packageFileName: updateArtifact.packageFileName },\n 'Skipping artifact update',\n );\n return null;\n }\n\n return await updateArtifacts(updateArtifact);\n}\n\nfunction processUpdateArtifactResults(\n results: UpdateArtifactsResult[] | null,\n updatedArtifacts: FileChange[],\n artifactErrors: ArtifactError[],\n artifactNotices: ArtifactNotice[],\n): void {\n if (isNonEmptyArray(results)) {\n for (const res of results) {\n const { file, notice, artifactError } = res;\n if (file) {\n // several updateArtifacts() calls can return the same file, keep only the latest\n const existingIndex = updatedArtifacts.findIndex(\n (artifact) => artifact.path === file.path,\n );\n if (existingIndex === -1) {\n updatedArtifacts.push(file);\n } else {\n updatedArtifacts[existingIndex] = file;\n }\n }\n\n if (artifactError) {\n artifactErrors.push(artifactError);\n }\n\n if (notice) {\n artifactNotices.push(notice);\n }\n }\n }\n}\n\n/**\n * When using Minimum Release Age, and a package manager that doesn't support being told an explicit version to update to (#41624) it is possible that an artifact update leads to a different version of a dependency being used compared to what Renovate is expecting.\n *\n * We should report these cases more explicitly with an Artifact Error, to allow the reviewers to decide what to do with the changes.\n */\nasync function checkForPendingVersions(\n manager: string,\n packageFileName: string,\n packageFileContent: string,\n updatedDeps: BranchUpgradeConfig[],\n artifactErrors: ArtifactError[],\n config: BranchConfig,\n): Promise<void> {\n const depNameToUpgradeInfo = new Map<\n string,\n {\n pendingVersions: Set<string>;\n newVersion: string | undefined;\n }\n >();\n for (const dep of updatedDeps) {\n if (dep.depName && isNonEmptyArray(dep.pendingVersions)) {\n depNameToUpgradeInfo.set(dep.depName, {\n pendingVersions: new Set(dep.pendingVersions),\n newVersion: dep.newVersion,\n });\n }\n }\n if (!depNameToUpgradeInfo.size) {\n return;\n }\n\n const extracted = await extractPackageFile(\n manager,\n packageFileContent,\n packageFileName,\n config,\n );\n if (!extracted) {\n logger.warn(\n { packageFile: packageFileName, manager },\n 'Could not re-extract the packageFile after updating it',\n );\n return;\n }\n\n for (const dep of extracted.deps) {\n // the re-extracted deps have not been through the extract phase, so their names need normalizing before they can be matched against the upgrades\n normalizeDepNames(dep);\n const { depName } = dep;\n // shouldn't ever happen\n if (!depName) {\n logger.error(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName: dep.depName,\n },\n 'No depName found after updating package file',\n );\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n\n const upgradeInfo = depNameToUpgradeInfo.get(depName);\n if (!upgradeInfo) {\n continue;\n }\n const resolvedVersion =\n dep.lockedVersion ??\n dep.newVersion ??\n dep.currentVersion ??\n dep.currentValue;\n if (!resolvedVersion) {\n logger.warn(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName,\n },\n 'Could not determine resolved version after updating package file; skipping pending-version check',\n );\n continue;\n }\n\n if (resolvedVersion && upgradeInfo.pendingVersions.has(resolvedVersion)) {\n const expectedVersion = upgradeInfo.newVersion;\n /* v8 ignore next if -- should not happen */\n if (!expectedVersion) {\n logger.error(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName,\n newVersion: resolvedVersion,\n expectedVersion,\n },\n 'No expectedVersion found after updating package file',\n );\n continue;\n }\n\n if (config.minimumReleaseAgeBehaviour === 'timestamp-optional') {\n logger.once.warn(\n {\n packageFileName,\n depName,\n expectedVersion,\n resolvedVersion,\n },\n \"Artifact error would be reported due to a pending version in use which hasn't passed Minimum Release Age, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n continue;\n }\n\n logger.debug(\n {\n packageFileName,\n depName,\n expectedVersion,\n resolvedVersion,\n },\n 'Artifact update introduced a pending version',\n );\n let stderr = `Artifact update for ${depName} resolved to version ${resolvedVersion}, which is a pending version that has not yet passed the Minimum Release Age threshold.`;\n stderr += `\\nRenovate was attempting to update to ${expectedVersion}`;\n stderr += `\\nThis is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.\\nUntil Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with \\`rangeStrategy=pin\\` for apps, or \\`rangeStrategy=widen\\` for libraries)\\nSee also: ${GlobalConfig.get('productLinks').documentation}dependency-pinning/`;\n\n artifactErrors.push({\n fileName: packageFileName,\n stderr,\n });\n }\n }\n}\n\nasync function applyManagerBumpPackageVersion(\n packageFileContent: string | null,\n upgrade: BranchUpgradeConfig,\n): Promise<string | null> {\n const bumpPackageVersion = get(upgrade.manager, 'bumpPackageVersion');\n if (\n !bumpPackageVersion ||\n !packageFileContent ||\n !upgrade.bumpVersion ||\n !upgrade.packageFileVersion\n ) {\n return packageFileContent;\n }\n\n const result = await bumpPackageVersion(\n packageFileContent,\n upgrade.packageFileVersion,\n upgrade.bumpVersion,\n upgrade.packageFile!,\n );\n\n return result.bumpedContent;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"get-updated.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/get-updated.ts"],"sourcesContent":["import { isNonEmptyArray, isObject } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { extractPackageFile, get } from '../../../../modules/manager/index.ts';\nimport type {\n ArtifactError,\n ArtifactNotice,\n PackageFile,\n UpdateArtifact,\n UpdateArtifactsConfig,\n UpdateArtifactsResult,\n} from '../../../../modules/manager/types.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport type { FileAddition, FileChange } from '../../../../util/git/types.ts';\nimport { coerceString } from '../../../../util/string.ts';\nimport type { BranchConfig, BranchUpgradeConfig } from '../../../types.ts';\nimport { normalizeDepNames } from '../../extract/manager-files.ts';\nimport { doAutoReplace } from './auto-replace.ts';\n\nexport interface PackageFilesResult {\n artifactErrors: ArtifactError[];\n reuseExistingBranch?: boolean;\n updatedPackageFiles: FileChange[];\n updatedArtifacts: FileChange[];\n artifactNotices: ArtifactNotice[];\n}\n\nasync function getFileContent(\n updatedFileContents: Record<string, string>,\n filePath: string,\n config: BranchConfig,\n): Promise<string | null> {\n let fileContent: string | null = updatedFileContents[filePath];\n if (!fileContent) {\n fileContent = await getFile(\n filePath,\n config.reuseExistingBranch ? config.branchName : config.baseBranch,\n );\n }\n return fileContent;\n}\n\nfunction sortPackageFiles(\n config: BranchConfig,\n manager: string,\n packageFiles: FilePath[],\n): void {\n const managerPackageFiles = config.packageFiles?.[manager];\n if (!managerPackageFiles) {\n return;\n }\n packageFiles.sort((lhs, rhs) => {\n const lhsIndex = managerPackageFiles.findIndex(\n (entry) => entry.packageFile === lhs.path,\n );\n const rhsIndex = managerPackageFiles.findIndex(\n (entry) => entry.packageFile === rhs.path,\n );\n return lhsIndex - rhsIndex;\n });\n}\n\nfunction hasAny(set: Set<string>, targets: Iterable<string>): boolean {\n for (const target of targets) {\n if (set.has(target)) {\n return true;\n }\n }\n return false;\n}\n\nfunction getUpdatedLockFileContent(\n updatedDeps: BranchUpgradeConfig[],\n updatedFileContents: Record<string, string>,\n): string | undefined {\n for (const upgrade of updatedDeps) {\n const lockFiles = [upgrade.lockFile, ...coerceArray(upgrade.lockFiles)];\n for (const lockFile of lockFiles) {\n if (lockFile && updatedFileContents[lockFile] !== undefined) {\n return updatedFileContents[lockFile];\n }\n }\n }\n\n return undefined;\n}\n\nfunction removeUnrefreshedLockfileOnlyChanges(\n packageFiles: FileChange[],\n updatedDeps: BranchUpgradeConfig[],\n results: UpdateArtifactsResult[] | null,\n): string[] {\n const removedLockFiles: string[] = [];\n const refreshedFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.file ? [result.file.path] : [],\n ),\n );\n const lockFiles = new Set(\n updatedDeps\n .filter((upgrade) => upgrade.isLockfileOnly)\n .flatMap((upgrade) => [\n upgrade.lockFile,\n ...coerceArray(upgrade.lockFiles),\n ]),\n );\n for (let index = packageFiles.length - 1; index >= 0; index -= 1) {\n const path = packageFiles[index].path;\n if (lockFiles.has(path) && !refreshedFiles.has(path)) {\n packageFiles.splice(index, 1);\n removedLockFiles.push(path);\n }\n }\n return removedLockFiles;\n}\n\nfunction reportUnrefreshedLockfileOnlyChanges(\n removedLockFiles: string[],\n results: UpdateArtifactsResult[] | null,\n artifactErrors: ArtifactError[],\n): void {\n const artifactErrorFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.artifactError ? [result.artifactError.fileName] : [],\n ),\n );\n for (const lockFile of removedLockFiles) {\n if (!artifactErrorFiles.has(lockFile)) {\n artifactErrors.push({\n fileName: lockFile,\n stderr: 'Lockfile-only update could not be refreshed',\n });\n }\n }\n}\n\nfunction removeSupersededLockFileChanges(\n packageFiles: FileChange[],\n updatedDeps: BranchUpgradeConfig[],\n results: UpdateArtifactsResult[] | null,\n): void {\n const artifactFiles = new Set(\n coerceArray(results).flatMap((result) =>\n result.file ? [result.file.path] : [],\n ),\n );\n const lockFiles = new Set(\n updatedDeps\n .filter((upgrade) => upgrade.isLockfileOnly)\n .flatMap((upgrade) => [\n upgrade.lockFile,\n ...coerceArray(upgrade.lockFiles),\n ]),\n );\n for (let index = packageFiles.length - 1; index >= 0; index -= 1) {\n const path = packageFiles[index].path;\n if (lockFiles.has(path) && artifactFiles.has(path)) {\n packageFiles.splice(index, 1);\n }\n }\n}\n\ntype FilePath = Pick<FileChange, 'path'>;\n\nfunction getManagersForPackageFiles<T extends FilePath>(\n packageFiles: T[],\n managerPackageFiles: Record<string, Set<string>>,\n): Set<string> {\n const packageFileNames = packageFiles.map((packageFile) => packageFile.path);\n return new Set(\n Object.keys(managerPackageFiles).filter((manager) =>\n hasAny(managerPackageFiles[manager], packageFileNames),\n ),\n );\n}\n\nfunction getPackageFilesForManager<T extends FilePath>(\n packageFiles: T[],\n managerPackageFiles: Set<string>,\n): T[] {\n return packageFiles.filter((packageFile) =>\n managerPackageFiles.has(packageFile.path),\n );\n}\n\nexport async function getUpdatedPackageFiles(\n config: BranchConfig,\n): Promise<PackageFilesResult> {\n logger.trace({ config });\n const reuseExistingBranch = config.reuseExistingBranch!;\n logger.debug(\n `manager.getUpdatedPackageFiles() reuseExistingBranch=${reuseExistingBranch}`,\n );\n let updatedFileContents: Record<string, string> = {};\n const nonUpdatedFileContents: Record<string, string> = {};\n const managerPackageFiles: Record<string, Set<string>> = {};\n const packageFileUpdatedDeps: Record<string, BranchUpgradeConfig[]> = {};\n const lockFileMaintenanceFiles: string[] = [];\n let firstUpdate = true;\n for (const upgrade of config.upgrades) {\n const manager = upgrade.manager;\n const packageFile = upgrade.packageFile!;\n const depName = upgrade.depName!;\n // TODO: fix types, can be undefined (#22198)\n const newVersion = upgrade.newVersion!;\n const currentVersion = upgrade.currentVersion!;\n const updateLockedDependency = get(manager, 'updateLockedDependency')!;\n managerPackageFiles[manager] ??= new Set<string>();\n managerPackageFiles[manager].add(packageFile);\n packageFileUpdatedDeps[packageFile] ??= [];\n packageFileUpdatedDeps[packageFile].push({ ...upgrade });\n const packageFileContent = await getFileContent(\n updatedFileContents,\n packageFile,\n config,\n );\n let lockFileContent: string | null = null;\n const lockFile = upgrade.lockFile ?? upgrade.lockFiles?.[0] ?? '';\n if (lockFile) {\n lockFileContent = await getFileContent(\n updatedFileContents,\n lockFile,\n config,\n );\n }\n const isLockFileMissing = !!lockFile && !lockFileContent;\n // istanbul ignore if\n const isFileMissing = !packageFileContent || isLockFileMissing;\n if (reuseExistingBranch && isFileMissing) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after file not found',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (upgrade.updateType === 'lockFileMaintenance') {\n lockFileMaintenanceFiles.push(packageFile);\n } else if (upgrade.isRemediation) {\n const { status, files } = await updateLockedDependency({\n ...upgrade,\n depName,\n newVersion,\n currentVersion,\n packageFile,\n packageFileContent: packageFileContent!,\n lockFile,\n lockFileContent: lockFileContent!,\n allowParentUpdates: true,\n allowHigherOrRemoved: true,\n });\n if (reuseExistingBranch && status !== 'already-updated') {\n logger.debug(\n { lockFile, depName, status },\n 'Need to retry branch as it is not already up-to-date',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (files) {\n updatedFileContents = { ...updatedFileContents, ...files };\n Object.keys(files).forEach(\n (file) => delete nonUpdatedFileContents[file],\n );\n }\n if (status === 'update-failed' || status === 'unsupported') {\n upgrade.remediationNotPossible = true;\n }\n } else if (upgrade.isLockfileUpdate) {\n if (updateLockedDependency) {\n const { status, files } = await updateLockedDependency({\n ...upgrade,\n depName,\n newVersion,\n currentVersion,\n packageFile,\n packageFileContent: packageFileContent!,\n lockFile,\n lockFileContent: lockFileContent!,\n allowParentUpdates: false,\n });\n if (status === 'unsupported') {\n // incompatible lock file\n if (!updatedFileContents[packageFile]) {\n nonUpdatedFileContents[packageFile] = packageFileContent!;\n }\n } else if (status === 'already-updated') {\n logger.debug(\n `Upgrade of ${depName} to ${newVersion} is already done in existing branch`,\n );\n } else {\n // something changed\n if (reuseExistingBranch) {\n logger.debug(\n { lockFile, depName, status },\n 'Need to retry branch as upgrade requirements are not mets',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n if (files) {\n updatedFileContents = { ...updatedFileContents, ...files };\n Object.keys(files).forEach(\n (file) => delete nonUpdatedFileContents[file],\n );\n }\n }\n } else {\n logger.debug(\n { manager },\n 'isLockFileUpdate without updateLockedDependency',\n );\n if (!updatedFileContents[packageFile]) {\n nonUpdatedFileContents[packageFile] = packageFileContent!;\n }\n }\n } else {\n const updateDependency = get(manager, 'updateDependency');\n if (!updateDependency) {\n let res = await doAutoReplace(\n upgrade,\n packageFileContent!,\n reuseExistingBranch,\n firstUpdate,\n );\n firstUpdate = false;\n if (res) {\n res = await applyManagerBumpPackageVersion(res, upgrade);\n if (res === packageFileContent) {\n logger.debug({ packageFile, depName }, 'No content changed');\n } else {\n logger.debug({ packageFile, depName }, 'Contents updated');\n updatedFileContents[packageFile] = res!;\n delete nonUpdatedFileContents[packageFile];\n }\n continue;\n } else if (reuseExistingBranch) {\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.error({ packageFile, depName }, 'Could not autoReplace');\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n const result = await updateDependency({\n packageFile,\n fileContent: packageFileContent!,\n upgrade,\n });\n const { content, updatedOutOfBand } = isObject(result)\n ? result\n : { content: result, updatedOutOfBand: false };\n const newContent = await applyManagerBumpPackageVersion(content, upgrade);\n if (!newContent) {\n if (reuseExistingBranch) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after error updating content',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.debug(\n { existingContent: packageFileContent, config: upgrade },\n 'Error updating file',\n );\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n if (newContent !== packageFileContent) {\n if (reuseExistingBranch) {\n // This ensure it's always 1 commit from Renovate\n logger.debug(\n { packageFile, depName },\n 'Need to update package file so will rebase first',\n );\n return getUpdatedPackageFiles({\n ...config,\n reuseExistingBranch: false,\n });\n }\n logger.debug(\n `Updating ${depName} in ${coerceString(packageFile, lockFile)}`,\n );\n updatedFileContents[packageFile] = newContent;\n delete nonUpdatedFileContents[packageFile];\n } else if (updatedOutOfBand) {\n updatedFileContents[packageFile] = newContent;\n delete nonUpdatedFileContents[packageFile];\n }\n }\n }\n const updatedPackageFiles: FileAddition[] = Object.keys(\n updatedFileContents,\n ).map((name) => ({\n type: 'addition',\n path: name,\n contents: updatedFileContents[name],\n }));\n const updatedArtifacts: FileChange[] = [];\n const artifactErrors: ArtifactError[] = [];\n const artifactNotices: ArtifactNotice[] = [];\n if (isNonEmptyArray(updatedPackageFiles)) {\n logger.debug('updateArtifacts for updatedPackageFiles');\n const updatedPackageFileManagers = getManagersForPackageFiles(\n updatedPackageFiles,\n managerPackageFiles,\n );\n for (const manager of updatedPackageFileManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n updatedPackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const updatedDeps = packageFileUpdatedDeps[packageFile.path];\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps,\n // TODO #22198\n newPackageFileContent: packageFile.contents!.toString(),\n newLockFileContent: getUpdatedLockFileContent(\n updatedDeps,\n updatedFileContents,\n ),\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n if (manager === 'mise') {\n const removedLockFiles = removeUnrefreshedLockfileOnlyChanges(\n updatedPackageFiles,\n updatedDeps,\n results,\n );\n reportUnrefreshedLockfileOnlyChanges(\n removedLockFiles,\n results,\n artifactErrors,\n );\n removeSupersededLockFileChanges(\n updatedPackageFiles,\n updatedDeps,\n results,\n );\n }\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n if (isNonEmptyArray(results)) {\n await checkForPendingVersions(\n manager,\n packageFile.path,\n packageFile.contents!.toString(),\n updatedDeps,\n artifactErrors,\n config,\n );\n }\n }\n }\n }\n const nonUpdatedPackageFiles: FileAddition[] = Object.keys(\n nonUpdatedFileContents,\n ).map((name) => ({\n type: 'addition',\n path: name,\n contents: nonUpdatedFileContents[name],\n }));\n if (isNonEmptyArray(nonUpdatedPackageFiles)) {\n logger.debug('updateArtifacts for nonUpdatedPackageFiles');\n const nonUpdatedPackageFileManagers = getManagersForPackageFiles(\n nonUpdatedPackageFiles,\n managerPackageFiles,\n );\n for (const manager of nonUpdatedPackageFileManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n nonUpdatedPackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const updatedDeps = packageFileUpdatedDeps[packageFile.path];\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps,\n // TODO #22198\n newPackageFileContent: packageFile.contents!.toString(),\n newLockFileContent: getUpdatedLockFileContent(\n updatedDeps,\n updatedFileContents,\n ),\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n if (isNonEmptyArray(results)) {\n updatedPackageFiles.push(packageFile);\n await checkForPendingVersions(\n manager,\n packageFile.path,\n packageFile.contents!.toString(),\n updatedDeps,\n artifactErrors,\n config,\n );\n }\n }\n }\n }\n if (!reuseExistingBranch) {\n const lockFileMaintenancePackageFiles: FilePath[] =\n lockFileMaintenanceFiles.map((name) => ({\n path: name,\n }));\n // Only perform lock file maintenance if it's a fresh commit\n if (isNonEmptyArray(lockFileMaintenanceFiles)) {\n logger.debug('updateArtifacts for lockFileMaintenanceFiles');\n const lockFileMaintenanceManagers = getManagersForPackageFiles(\n lockFileMaintenancePackageFiles,\n managerPackageFiles,\n );\n for (const manager of lockFileMaintenanceManagers) {\n const packageFilesForManager = getPackageFilesForManager(\n lockFileMaintenancePackageFiles,\n managerPackageFiles[manager],\n );\n sortPackageFiles(config, manager, packageFilesForManager);\n for (const packageFile of packageFilesForManager) {\n const contents =\n updatedFileContents[packageFile.path] ||\n (await getFile(packageFile.path, config.baseBranch));\n const results = await managerUpdateArtifacts(manager, {\n packageFileName: packageFile.path,\n updatedDeps: [],\n newPackageFileContent: contents!,\n config: patchConfigForArtifactsUpdate(\n config,\n manager,\n packageFile.path,\n ),\n });\n processUpdateArtifactResults(\n results,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n );\n }\n }\n }\n }\n return {\n reuseExistingBranch, // Need to overwrite original config\n updatedPackageFiles,\n updatedArtifacts,\n artifactErrors,\n artifactNotices,\n };\n}\n\n// workaround, see #27319\nfunction patchConfigForArtifactsUpdate(\n config: BranchConfig,\n manager: string,\n packageFileName: string,\n): UpdateArtifactsConfig {\n // drop any lockFiles that happen to be defined on the branch config\n const updatedConfig = { ...config };\n delete updatedConfig.lockFiles;\n if (isNonEmptyArray(updatedConfig.packageFiles?.[manager])) {\n const managerPackageFiles: PackageFile[] =\n updatedConfig.packageFiles?.[manager];\n const packageFile = managerPackageFiles.find(\n (p) => p.packageFile === packageFileName,\n );\n if (packageFile && isNonEmptyArray(packageFile.lockFiles)) {\n updatedConfig.lockFiles = packageFile.lockFiles;\n }\n }\n return updatedConfig;\n}\n\nasync function managerUpdateArtifacts(\n manager: string,\n updateArtifact: UpdateArtifact,\n): Promise<UpdateArtifactsResult[] | null> {\n const updateArtifacts = get(manager, 'updateArtifacts');\n if (!updateArtifacts) {\n return null;\n }\n\n if (updateArtifact.config.skipArtifactsUpdate) {\n logger.debug(\n { manager, packageFileName: updateArtifact.packageFileName },\n 'Skipping artifact update',\n );\n return null;\n }\n\n return await updateArtifacts(updateArtifact);\n}\n\nfunction processUpdateArtifactResults(\n results: UpdateArtifactsResult[] | null,\n updatedArtifacts: FileChange[],\n artifactErrors: ArtifactError[],\n artifactNotices: ArtifactNotice[],\n): void {\n if (isNonEmptyArray(results)) {\n for (const res of results) {\n const { file, notice, artifactError } = res;\n if (file) {\n // several updateArtifacts() calls can return the same file, keep only the latest\n const existingIndex = updatedArtifacts.findIndex(\n (artifact) => artifact.path === file.path,\n );\n if (existingIndex === -1) {\n updatedArtifacts.push(file);\n } else {\n updatedArtifacts[existingIndex] = file;\n }\n }\n\n if (artifactError) {\n artifactErrors.push(artifactError);\n }\n\n if (notice) {\n artifactNotices.push(notice);\n }\n }\n }\n}\n\n/**\n * When using Minimum Release Age, and a package manager that doesn't support being told an explicit version to update to (#41624) it is possible that an artifact update leads to a different version of a dependency being used compared to what Renovate is expecting.\n *\n * We should report these cases more explicitly with an Artifact Error, to allow the reviewers to decide what to do with the changes.\n */\nasync function checkForPendingVersions(\n manager: string,\n packageFileName: string,\n packageFileContent: string,\n updatedDeps: BranchUpgradeConfig[],\n artifactErrors: ArtifactError[],\n config: BranchConfig,\n): Promise<void> {\n const depNameToUpgradeInfo = new Map<\n string,\n {\n pendingVersions: Set<string>;\n newVersion: string | undefined;\n }\n >();\n for (const dep of updatedDeps) {\n if (dep.depName && isNonEmptyArray(dep.pendingVersions)) {\n depNameToUpgradeInfo.set(dep.depName, {\n pendingVersions: new Set(dep.pendingVersions),\n newVersion: dep.newVersion,\n });\n }\n }\n if (!depNameToUpgradeInfo.size) {\n return;\n }\n\n const extracted = await extractPackageFile(\n manager,\n packageFileContent,\n packageFileName,\n config,\n );\n if (!extracted) {\n logger.warn(\n { packageFile: packageFileName, manager },\n 'Could not re-extract the packageFile after updating it',\n );\n return;\n }\n\n for (const dep of extracted.deps) {\n // the re-extracted deps have not been through the extract phase, so their names need normalizing before they can be matched against the upgrades\n normalizeDepNames(dep);\n const { depName } = dep;\n // shouldn't ever happen\n if (!depName) {\n logger.error(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName: dep.depName,\n },\n 'No depName found after updating package file',\n );\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n }\n\n const upgradeInfo = depNameToUpgradeInfo.get(depName);\n if (!upgradeInfo) {\n continue;\n }\n const resolvedVersion =\n dep.lockedVersion ??\n dep.newVersion ??\n dep.currentVersion ??\n dep.currentValue;\n if (!resolvedVersion) {\n logger.warn(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName,\n },\n 'Could not determine resolved version after updating package file; skipping pending-version check',\n );\n continue;\n }\n\n if (resolvedVersion && upgradeInfo.pendingVersions.has(resolvedVersion)) {\n const expectedVersion = upgradeInfo.newVersion;\n /* v8 ignore next if -- should not happen */\n if (!expectedVersion) {\n logger.error(\n {\n packageFile: packageFileName,\n manager,\n branchName: config.branchName,\n depName,\n newVersion: resolvedVersion,\n expectedVersion,\n },\n 'No expectedVersion found after updating package file',\n );\n continue;\n }\n\n if (config.minimumReleaseAgeBehaviour === 'timestamp-optional') {\n logger.once.warn(\n {\n packageFileName,\n depName,\n expectedVersion,\n resolvedVersion,\n },\n \"Artifact error would be reported due to a pending version in use which hasn't passed Minimum Release Age, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding. See debug logs for more information\",\n );\n continue;\n }\n\n logger.debug(\n {\n packageFileName,\n depName,\n expectedVersion,\n resolvedVersion,\n },\n 'Artifact update introduced a pending version',\n );\n let stderr = `Artifact update for ${depName} resolved to version ${resolvedVersion}, which is a pending version that has not yet passed the Minimum Release Age threshold.`;\n stderr += `\\nRenovate was attempting to update to ${expectedVersion}`;\n stderr += `\\nThis is (likely) not a bug in Renovate, but due to the way your project pins dependencies, _and_ how Renovate calls your package manager to update them.\\nUntil Renovate supports specifying an exact update to your package manager (https://github.com/renovatebot/renovate/issues/41624), it is recommended to directly pin your dependencies (with \\`rangeStrategy=pin\\` for apps, or \\`rangeStrategy=widen\\` for libraries)\\nSee also: ${GlobalConfig.get('productLinks').documentation}dependency-pinning/`;\n\n artifactErrors.push({\n fileName: packageFileName,\n stderr,\n });\n }\n }\n}\n\nasync function applyManagerBumpPackageVersion(\n packageFileContent: string | null,\n upgrade: BranchUpgradeConfig,\n): Promise<string | null> {\n const bumpPackageVersion = get(upgrade.manager, 'bumpPackageVersion');\n if (\n !bumpPackageVersion ||\n !packageFileContent ||\n !upgrade.bumpVersion ||\n !upgrade.packageFileVersion\n ) {\n return packageFileContent;\n }\n\n const result = await bumpPackageVersion(\n packageFileContent,\n upgrade.packageFileVersion,\n upgrade.bumpVersion,\n upgrade.packageFile!,\n );\n\n return result.bumpedContent;\n}\n"],"mappings":"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"}
@@ -369,7 +369,8 @@ async function processBranch(branchConfig, forceRebase = false) {
369
369
  commitSha
370
370
  };
371
371
  }
372
- if (!config.artifactErrors?.length && (!commitSha || config.ignoreTests)) {
372
+ const canAutomerge = !commitSha || config.ignoreTests;
373
+ if (!config.artifactErrors?.length && canAutomerge) {
373
374
  const mergeStatus = await tryBranchAutomerge(config, branchPr);
374
375
  logger.debug(`mergeStatus=${mergeStatus}`);
375
376
  if (mergeStatus === "automerged") {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/update/branch/index.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport {\n MANAGER_LOCKFILE_ERROR,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages.ts';\nimport { logger, removeMeta } from '../../../../logger/index.ts';\nimport { updateActionsLockfile } from '../../../../modules/manager/github-actions/artifacts.ts';\nimport { getAdditionalFiles } from '../../../../modules/manager/npm/post-update/index.ts';\nimport {\n ensureComment,\n ensureCommentRemoval,\n} from '../../../../modules/platform/comment.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport { getCount, isLimitReached } from '../../../global/limits.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport { embedChangelogs } from '../../changelog/index.ts';\nimport {\n compileCommitBody,\n compileCommitTrailers,\n} from '../../model/commit-body.ts';\nimport { checkAutoMerge } from '../pr/automerge.ts';\nimport { ensurePr, getPlatformPrOptions } from '../pr/index.ts';\nimport { setArtifactErrorStatus } from './artifacts.ts';\nimport { tryBranchAutomerge } from './automerge.ts';\nimport { bumpVersions } from './bump-versions.ts';\nimport {\n findClosedPrForModifiedBranch,\n prAlreadyExisted,\n rebaseCheck,\n userChangedTargetBranch,\n} from './check-existing.ts';\nimport { commitFilesToBranch } from './commit.ts';\nimport { handleBranchError } from './errors.ts';\nimport executePostUpgradeCommands from './execute-post-upgrade-commands.ts';\nimport { getUpdatedPackageFiles } from './get-updated.ts';\nimport { handleClosedPr, handleModifiedPr } from './handle-existing.ts';\nimport { prBlockedByToResult } from './pr-blocked-by.ts';\nimport {\n decideBranchReuse,\n hasKeepUpdatedLabel,\n shouldReuseExistingBranch,\n} from './reuse.ts';\nimport { isScheduledNow } from './schedule.ts';\nimport {\n computeInternalChecksStatus,\n setConfidence,\n setStability,\n} from './status-checks.ts';\nimport type { ProcessBranchResult } from './types.ts';\n\nasync function setBranchStatusChecks(config: BranchConfig): Promise<void> {\n await setStability(config);\n await setConfidence(config);\n}\n\nasync function deleteBranchSilently(branchName: string): Promise<void> {\n try {\n await scm.deleteBranch(branchName);\n } catch (err) {\n /* v8 ignore next -- needs test */\n logger.debug({ branchName, err }, 'Branch auto-remove failed');\n }\n}\n\nexport async function processBranch(\n branchConfig: BranchConfig,\n forceRebase = false,\n): Promise<ProcessBranchResult> {\n let commitSha: string | null = null;\n let config: BranchConfig = { ...branchConfig };\n logger.trace({ config }, 'processBranch()');\n let branchExists = await scm.branchExists(config.branchName);\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Only allow a branch to be recreated with updates that are `pending` if we've explicitly constented with an `unpend` on the Dependency Dashboard, or when using `checkedBranches`\n const unpendRequested =\n dependencyDashboardCheck === 'unpend' ||\n dependencyDashboardCheck === 'global-config';\n let updatesVerified = false;\n if (!branchExists && config.branchPrefix !== config.branchPrefixOld) {\n const branchName = config.branchName.replace(\n config.branchPrefix!,\n config.branchPrefixOld!,\n );\n branchExists = await scm.branchExists(branchName);\n // v8 ignore else -- TODO: add test #40625\n if (branchExists) {\n config.branchName = branchName;\n logger.debug('Found existing branch with branchPrefixOld');\n }\n }\n\n if (\n !branchExists &&\n branchConfig.minimumGroupSize &&\n branchConfig.minimumGroupSize > branchConfig.upgrades.length &&\n !dependencyDashboardCheck\n ) {\n logger.debug(\n `Skipping branch creation as minimumGroupSize: ${branchConfig.minimumGroupSize} is not met`,\n );\n return {\n branchExists: false,\n result: 'minimum-group-size-not-met',\n };\n }\n\n let branchPr = await platform.getBranchPr(\n config.branchName,\n config.baseBranch,\n );\n logger.debug(`branchExists=${branchExists}`);\n logger.debug(`dependencyDashboardCheck=${dependencyDashboardCheck!}`);\n if (branchPr) {\n config.rebaseRequested = await rebaseCheck(config, branchPr);\n logger.debug(`PR rebase requested=${config.rebaseRequested}`);\n }\n const pendingRebaseTopic = emojify(':warning: Rebase not applied');\n const artifactErrorTopic = emojify(':warning: Artifact update problem');\n const artifactNoticeTopic = emojify(\n ':information_source: Artifact update notice',\n );\n try {\n // Check if branch already existed\n const existingPr =\n !branchPr || config.automerge\n ? await prAlreadyExisted(config)\n : undefined;\n if (existingPr?.state === 'merged') {\n logger.debug(`Matching PR #${existingPr.number} was merged previously`);\n if (config.automerge) {\n logger.debug('Disabling automerge because PR was merged previously');\n config.automerge = false;\n config.automergedPreviously = true;\n }\n } else if (!branchPr && existingPr && !dependencyDashboardCheck) {\n logger.debug(\n { prTitle: config.prTitle },\n `Closed PR #${existingPr.number} already exists. Skipping branch.`,\n );\n await handleClosedPr(config, existingPr);\n return {\n branchExists: false,\n prNo: existingPr.number,\n result: 'already-existed',\n };\n }\n if (!branchExists && branchConfig.pendingChecks && !unpendRequested) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because internalChecksFilter was not met`,\n );\n return {\n branchExists: false,\n result: 'pending',\n };\n }\n if (!branchExists) {\n if (config.mode === 'silent' && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because mode=silent`,\n );\n return {\n branchExists,\n result: 'needs-approval',\n };\n }\n if (config.dependencyDashboardApproval && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because dependencyDashboardApproval=true`,\n );\n return {\n branchExists,\n result: 'needs-approval',\n };\n }\n }\n\n logger.debug(\n `Open PR Count: ${getCount('ConcurrentPRs')}, Existing Branch Count: ${getCount('Branches')}, Hourly PR Count: ${getCount('HourlyPRs')}, Hourly Commit Count: ${getCount('HourlyCommits')}`,\n );\n\n // for a vulnerability alert this checks the VulnerabilityBranches count\n if (\n !branchExists &&\n isLimitReached('Branches', branchConfig) &&\n !dependencyDashboardCheck\n ) {\n logger.debug('Reached branch limit - skipping branch creation');\n return {\n branchExists,\n result: 'branch-limit-reached',\n };\n }\n if (\n !config.rebaseRequested &&\n isLimitReached('Commits') &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached commits per run limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-per-run-limit-reached',\n };\n }\n if (\n !config.rebaseRequested &&\n isLimitReached('HourlyCommits', branchConfig) &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached hourly commits limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-hourly-limit-reached',\n };\n }\n if (branchExists) {\n // check if branch is labelled to stop\n config.stopUpdating = branchPr?.labels?.includes(\n config.stopUpdatingLabel!,\n );\n\n const prRebaseChecked = !!branchPr?.bodyStruct?.rebaseRequested;\n\n if (\n !dependencyDashboardCheck &&\n !prRebaseChecked &&\n config.stopUpdating\n ) {\n logger.info(\n 'Branch updating is skipped because stopUpdatingLabel is present in config',\n );\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n\n // A rebase or retry request is not consent to add an upgrade which has not met its internal checks, so only an unpend of this branch may override this\n if (!unpendRequested && config.pendingChecks) {\n if (config.rebaseRequested) {\n logger.info(\n 'Branch updating is skipped because internalChecksFilter was not met, despite the requested rebase',\n );\n if (branchPr) {\n const content =\n 'This branch has not been rebased, as its update has not yet met the internal checks configured for it, such as `minimumReleaseAge`. Rebasing it now would add a dependency version which is still within its configured observation period.\\n\\nRenovate will rebase this branch once its update has met those checks.';\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure pending rebase comment in PR #${branchPr.number}`,\n );\n } else {\n await ensureComment({\n number: branchPr.number,\n topic: pendingRebaseTopic,\n content,\n });\n }\n }\n } else {\n logger.info(\n 'Branch updating is skipped because internalChecksFilter was not met',\n );\n }\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n\n logger.debug('Checking if PR has been edited');\n const branchIsModified = await scm.isBranchModified(\n config.branchName,\n config.baseBranch,\n );\n if (branchPr) {\n logger.debug(`Found existing branch PR #${branchPr.number}`);\n if (branchPr.state !== 'open') {\n logger.debug(\n 'PR has been closed or merged since this run started - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n if (branchIsModified || userChangedTargetBranch(branchPr)) {\n logger.debug(`PR has been edited, PrNo:${branchPr.number}`);\n await handleModifiedPr(config, branchPr);\n if (!(!!dependencyDashboardCheck || config.rebaseRequested)) {\n return {\n branchExists,\n prNo: branchPr.number,\n result: 'pr-edited',\n };\n }\n }\n } else if (\n branchIsModified &&\n !dependencyDashboardCheck &&\n !(await findClosedPrForModifiedBranch(config))\n ) {\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n }\n\n // Check schedule\n config.isScheduledNow = isScheduledNow(config, 'schedule');\n if (!config.isScheduledNow && !dependencyDashboardCheck) {\n if (!branchExists) {\n logger.debug('Skipping branch creation as not within schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n if (config.updateNotScheduled === false && !config.rebaseRequested) {\n logger.debug('Skipping branch update as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'update-not-scheduled',\n };\n }\n if (\n !branchPr &&\n !(config.automerge && config.automergeType === 'branch') // if branch is configured for automerge there's no need for a PR\n ) {\n logger.debug('Skipping PR creation out of schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n logger.debug(\n 'Branch + PR exists but is not scheduled -- will update if necessary',\n );\n }\n //stability checks\n const internalChecksStatus = await computeInternalChecksStatus(config);\n if (internalChecksStatus) {\n config.stabilityStatus = internalChecksStatus.stabilityStatus;\n config.confidenceStatus = internalChecksStatus.confidenceStatus;\n\n // Don't create a branch if we know it will be status 'pending'\n if (\n !dependencyDashboardCheck &&\n !branchExists &&\n config.stabilityStatus === 'yellow' &&\n ['not-pending', 'status-success'].includes(config.prCreation!)\n ) {\n logger.debug(\n 'Skipping branch creation due to internal status checks not met',\n );\n return {\n branchExists,\n result: 'pending',\n };\n }\n }\n\n const reuseDecision = decideBranchReuse({\n config,\n branchPr,\n branchExists,\n dependencyDashboardCheck,\n forceRebase,\n });\n const { userRebaseRequested } = reuseDecision;\n if (reuseDecision.action === 'skip-update') {\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n if (reuseDecision.action === 'no-reuse') {\n config.reuseExistingBranch = false;\n } else if (reuseDecision.action === 'check-reuse') {\n config = await shouldReuseExistingBranch(config, branchPr);\n }\n // TODO: types (#22198)\n logger.debug(`Using reuseExistingBranch: ${config.reuseExistingBranch!}`);\n if (!(\n config.reuseExistingBranch && config.cacheFingerprintMatch === 'matched'\n )) {\n await scm.checkoutBranch(config.baseBranch);\n const res = await getUpdatedPackageFiles(config);\n if (res.artifactErrors && config.artifactErrors) {\n res.artifactErrors = config.artifactErrors.concat(res.artifactErrors);\n }\n config = { ...config, ...res };\n if (config.updatedPackageFiles?.length) {\n logger.debug(\n `Updated ${config.updatedPackageFiles.length} package files`,\n );\n if (config.reuseExistingBranch && !forceRebase) {\n logger.debug(\n 'Existing branch needs updating. Restarting processBranch() with a clean branch',\n );\n return processBranch(branchConfig, true);\n }\n } else {\n logger.debug('No package files need updating');\n }\n const additionalFiles = await getAdditionalFiles(\n config,\n branchConfig.packageFiles!,\n );\n config.artifactErrors = coerceArray(config.artifactErrors).concat(\n additionalFiles.artifactErrors,\n );\n config.artifactNotices = coerceArray(config.artifactNotices).concat(\n coerceArray(additionalFiles.artifactNotices),\n );\n config.updatedArtifacts = coerceArray(config.updatedArtifacts).concat(\n additionalFiles.updatedArtifacts,\n );\n // `gh actions-lock` rewrites the whole lockfile from the workflows on disk, so like the lock files above it runs once here, after every updated package file has been written, rather than per package file.\n const actionsLockfile = await updateActionsLockfile(\n config,\n branchConfig.packageFiles,\n );\n config.artifactErrors = config.artifactErrors.concat(\n actionsLockfile.artifactErrors,\n );\n config.updatedArtifacts = config.updatedArtifacts.concat(\n actionsLockfile.updatedArtifacts,\n );\n if (config.updatedArtifacts?.length) {\n logger.debug(\n {\n updatedArtifacts: config.updatedArtifacts.map((f) =>\n f.type === 'deletion' ? `${f.path} (delete)` : f.path,\n ),\n },\n `Updated ${config.updatedArtifacts.length} lock files`,\n );\n if (config.reuseExistingBranch && !forceRebase) {\n logger.debug(\n 'Existing branch needs updating. Restarting processBranch() with a clean branch',\n );\n return processBranch(branchConfig, true);\n }\n } else {\n logger.debug('No updated lock files in branch');\n }\n\n await embedChangelogs({\n upgrades: config.upgrades,\n stage: 'branch',\n });\n\n const postUpgradeCommandResults =\n await executePostUpgradeCommands(config);\n\n if (postUpgradeCommandResults !== null) {\n const { updatedArtifacts, artifactErrors } = postUpgradeCommandResults;\n config.updatedArtifacts = updatedArtifacts;\n config.artifactErrors = artifactErrors;\n }\n\n // modifies the file changes in place to allow having a version bump in a packageFile or artifact\n await bumpVersions(config);\n\n removeMeta(['dep']);\n\n if (config.artifactErrors?.length) {\n if (config.releaseTimestamp) {\n logger.debug(`Branch timestamp: ${config.releaseTimestamp}`);\n const releaseTimestamp = DateTime.fromISO(config.releaseTimestamp);\n if (releaseTimestamp.plus({ hours: 2 }) < DateTime.local()) {\n logger.debug(\n 'PR is older than 2 hours, raise PR with lock file errors',\n );\n } else if (branchExists) {\n logger.debug(\n 'PR is less than 2 hours old but branchExists so updating anyway',\n );\n } else {\n logger.debug(\n 'PR is less than 2 hours old - raise error instead of PR',\n );\n throw new Error(MANAGER_LOCKFILE_ERROR);\n }\n } else {\n logger.debug('PR has no releaseTimestamp');\n }\n } else if (config.updatedArtifacts?.length && branchPr) {\n // If there are artifacts, no errors, and an existing PR then ensure any artifacts error comment is removed\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure comment removal in PR #${branchPr.number}`,\n );\n } else {\n // Remove artifacts error comment only if this run has successfully updated artifacts\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactErrorTopic,\n });\n\n // v8 ignore else -- TODO: add test #40625\n if (!config.artifactNotices?.length) {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactNoticeTopic,\n });\n }\n }\n }\n const forcedManually = userRebaseRequested || !branchExists;\n\n config.isConflicted ??=\n branchExists &&\n (await scm.isBranchConflicted(config.baseBranch, config.branchName));\n config.forceCommit = forcedManually || config.isConflicted;\n\n // compile commit message with body, which maybe needs changelogs\n config.commitMessage = compileCommitBody(config, config.commitMessage!, {\n ...config,\n // changelog is on first upgrade\n logJSON: config.upgrades[0].logJSON,\n releases: config.upgrades[0].releases,\n });\n // compiled after the body, as before, so the trailer context sees the full commit message\n config.commitTrailers = compileCommitTrailers(config, config);\n\n commitSha = await commitFilesToBranch(config);\n // Checkout to base branch to ensure that the next branch processing always starts with git being on the baseBranch\n // baseBranch is not checked out at the start of processBranch() due to pull/16246\n await scm.checkoutBranch(config.baseBranch);\n updatesVerified = true;\n\n // only update artifact status if branch was updated\n // also do before platform automerge reattempt\n if (commitSha) {\n await setArtifactErrorStatus(config);\n }\n\n // a requested rebase has now been applied, so any comment explaining why we'd skipped it no longer applies\n if (commitSha && branchPr && config.rebaseRequested) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure pending rebase comment removal in PR #${branchPr.number}`,\n );\n } else {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: pendingRebaseTopic,\n });\n }\n }\n }\n\n if (branchPr) {\n const platformPrOptions = getPlatformPrOptions(config);\n if (\n commitSha &&\n platformPrOptions.usePlatformAutomerge &&\n platform.reattemptPlatformAutomerge\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would reattempt platform automerge for PR #${branchPr.number}`,\n );\n } else {\n await platform.reattemptPlatformAutomerge({\n number: branchPr.number,\n platformPrOptions,\n });\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (platform.refreshPr) {\n await platform.refreshPr(branchPr.number);\n }\n }\n if (!commitSha && !branchExists) {\n return {\n branchExists,\n result: 'no-work',\n };\n }\n if (commitSha) {\n const action = branchExists ? 'updated' : 'created';\n logger.info({ commitSha }, `Branch ${action}`);\n }\n await setBranchStatusChecks(config);\n // new commit means status check are pretty sure pending but maybe not reported yet\n // if PR has not been created + new commit + prCreation !== immediate skip\n // but do not break when there are artifact errors\n if (\n !branchPr &&\n !config.artifactErrors?.length &&\n !userRebaseRequested &&\n commitSha &&\n config.prCreation !== 'immediate'\n ) {\n logger.debug(`Branch status pending, current sha: ${commitSha}`);\n return {\n branchExists: true,\n updatesVerified,\n result: 'pending',\n commitSha,\n };\n }\n\n // Try to automerge branch and finish if successful, but only if branch already existed before this run\n // skip if we have a non-immediate pr and there is an existing PR,\n // we want to update the PR and skip the Auto merge since status checks aren't done yet\n if (!config.artifactErrors?.length && (!commitSha || config.ignoreTests)) {\n const mergeStatus = await tryBranchAutomerge(config, branchPr);\n logger.debug(`mergeStatus=${mergeStatus}`);\n if (mergeStatus === 'automerged') {\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete branch${config.branchName}`);\n } else {\n await deleteBranchSilently(config.branchName);\n }\n logger.debug('Branch is automerged - returning');\n return { branchExists: false, result: 'automerged' };\n }\n if (mergeStatus === 'off schedule') {\n if (userRebaseRequested) {\n config.forcePr = true;\n } else {\n logger.debug(\n 'Branch cannot automerge now because automergeSchedule is off schedule - skipping',\n );\n return {\n branchExists,\n result: 'not-scheduled',\n commitSha,\n };\n }\n }\n if (\n mergeStatus === 'stale' &&\n ['conflicted', 'never'].includes(config.rebaseWhen!) &&\n /* v8 ignore next -- needs test */\n !hasKeepUpdatedLabel(config, branchPr)\n ) {\n logger.warn(\n 'Branch cannot automerge because it is behind base branch and rebaseWhen setting disallows rebasing - raising a PR instead',\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n if (\n mergeStatus === 'automerge aborted - merge queue' ||\n mergeStatus === 'automerge aborted - PR exists' ||\n mergeStatus === 'branch status error' ||\n mergeStatus === 'failed'\n ) {\n logger.debug(\n `Branch automerge not possible, mergeStatus:${mergeStatus}`,\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n }\n } catch (err) {\n return handleBranchError(err, {\n branchExists,\n prNo: branchPr?.number,\n commitSha,\n updatesVerified,\n });\n }\n try {\n logger.debug('Ensuring PR');\n logger.debug(\n `There are ${config.errors!.length} errors and ${\n config.warnings!.length\n } warnings`,\n );\n const ensurePrResult = await ensurePr(config);\n if (ensurePrResult.type === 'without-pr') {\n const { prBlockedBy } = ensurePrResult;\n return {\n branchExists,\n prBlockedBy,\n result: prBlockedByToResult(prBlockedBy, config.isVulnerabilityAlert),\n commitSha,\n };\n }\n // v8 ignore else -- TODO: add test #40625\n if (ensurePrResult.type === 'with-pr') {\n const { pr } = ensurePrResult;\n branchPr = pr;\n // Retry setting branch statuses after PR/MR creation so that\n // platforms using MR pipelines (e.g. GitLab) have a pipeline to\n // associate the status with. The earlier call may have been\n // skipped if no pipeline existed yet.\n await setBranchStatusChecks(config);\n\n // only update artifact status if branch was updated\n if (commitSha) {\n await setArtifactErrorStatus(config);\n }\n if (config.artifactErrors?.length) {\n logger.warn(\n { artifactErrors: config.artifactErrors },\n 'artifactErrors',\n );\n let content = `Renovate failed to update `;\n content +=\n config.artifactErrors.length > 1 ? 'artifacts' : 'an artifact';\n content += ' related to this branch. ';\n content += template.compile(\n config.userStrings!.artifactErrorWarning,\n config,\n );\n content += emojify(\n `\\n\\n:recycle: Renovate will retry this branch, including artifacts, only when one of the following happens:\\n\\n`,\n );\n content +=\n ' - any of the package files in this branch needs updating, or \\n';\n content += ' - the branch becomes conflicted, or\\n';\n content +=\n ' - you click the rebase/retry checkbox if found above, or\\n';\n content +=\n ' - you rename this PR\\'s title to start with \"rebase!\" to trigger it manually';\n content += '\\n\\nThe artifact failure details are included below:\\n\\n';\n // TODO: types (#22198)\n config.artifactErrors.forEach((error) => {\n content += `##### File name: ${error.fileName!}\\n\\n`;\n content += `\\`\\`\\`\\n${error.stderr!}\\n\\`\\`\\`\\n\\n`;\n });\n content = platform.massageMarkdown(content, config.rebaseLabel);\n // v8 ignore else -- TODO: add test #40625\n if (!(\n config.suppressNotifications!.includes('artifactErrors') ||\n config.suppressNotifications!.includes('lockFileErrors')\n )) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure lock file error comment in PR #${pr.number}`,\n );\n } else {\n await ensureComment({\n number: pr.number,\n topic: artifactErrorTopic,\n content,\n });\n }\n }\n } else {\n if (config.artifactNotices?.length) {\n const contentLines: string[] = [];\n for (const notice of config.artifactNotices) {\n contentLines.push(`##### File name: ${notice.file}`);\n contentLines.push(notice.message);\n }\n const content = contentLines.join('\\n\\n');\n await ensureComment({\n number: pr.number,\n topic: artifactNoticeTopic,\n content,\n });\n }\n\n if (config.automerge) {\n logger.debug('PR is configured for automerge');\n // skip automerge if there is a new commit since status checks aren't done yet\n // v8 ignore else -- TODO: add test #40625\n if (config.ignoreTests === true || !commitSha) {\n logger.debug('checking auto-merge');\n const prAutomergeResult = await checkAutoMerge(pr, config);\n if (prAutomergeResult?.automerged) {\n return {\n branchExists,\n result: 'automerged',\n commitSha,\n };\n }\n }\n } else {\n logger.debug('PR is not configured for automerge');\n }\n }\n }\n } catch (err) {\n /* v8 ignore if -- needs test */\n if (\n err instanceof ExternalHostError ||\n [PLATFORM_RATE_LIMIT_EXCEEDED, REPOSITORY_CHANGED].includes(err.message)\n ) {\n logger.debug('Passing PR error up');\n throw err;\n }\n // Otherwise don't throw here - we don't want to stop the other renovations\n logger.error({ err }, `Error ensuring PR`);\n }\n if (!branchExists) {\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'pr-created',\n commitSha,\n };\n }\n return {\n branchExists,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'done',\n commitSha,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/update/branch/index.ts"],"sourcesContent":["import { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport {\n MANAGER_LOCKFILE_ERROR,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages.ts';\nimport { logger, removeMeta } from '../../../../logger/index.ts';\nimport { updateActionsLockfile } from '../../../../modules/manager/github-actions/artifacts.ts';\nimport { getAdditionalFiles } from '../../../../modules/manager/npm/post-update/index.ts';\nimport {\n ensureComment,\n ensureCommentRemoval,\n} from '../../../../modules/platform/comment.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error.ts';\nimport { coerceArray } from '../../../../util/array.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport { getCount, isLimitReached } from '../../../global/limits.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport { embedChangelogs } from '../../changelog/index.ts';\nimport {\n compileCommitBody,\n compileCommitTrailers,\n} from '../../model/commit-body.ts';\nimport { checkAutoMerge } from '../pr/automerge.ts';\nimport { ensurePr, getPlatformPrOptions } from '../pr/index.ts';\nimport { setArtifactErrorStatus } from './artifacts.ts';\nimport { tryBranchAutomerge } from './automerge.ts';\nimport { bumpVersions } from './bump-versions.ts';\nimport {\n findClosedPrForModifiedBranch,\n prAlreadyExisted,\n rebaseCheck,\n userChangedTargetBranch,\n} from './check-existing.ts';\nimport { commitFilesToBranch } from './commit.ts';\nimport { handleBranchError } from './errors.ts';\nimport executePostUpgradeCommands from './execute-post-upgrade-commands.ts';\nimport { getUpdatedPackageFiles } from './get-updated.ts';\nimport { handleClosedPr, handleModifiedPr } from './handle-existing.ts';\nimport { prBlockedByToResult } from './pr-blocked-by.ts';\nimport {\n decideBranchReuse,\n hasKeepUpdatedLabel,\n shouldReuseExistingBranch,\n} from './reuse.ts';\nimport { isScheduledNow } from './schedule.ts';\nimport {\n computeInternalChecksStatus,\n setConfidence,\n setStability,\n} from './status-checks.ts';\nimport type { ProcessBranchResult } from './types.ts';\n\nasync function setBranchStatusChecks(config: BranchConfig): Promise<void> {\n await setStability(config);\n await setConfidence(config);\n}\n\nasync function deleteBranchSilently(branchName: string): Promise<void> {\n try {\n await scm.deleteBranch(branchName);\n } catch (err) {\n /* v8 ignore next -- needs test */\n logger.debug({ branchName, err }, 'Branch auto-remove failed');\n }\n}\n\nexport async function processBranch(\n branchConfig: BranchConfig,\n forceRebase = false,\n): Promise<ProcessBranchResult> {\n let commitSha: string | null = null;\n let config: BranchConfig = { ...branchConfig };\n logger.trace({ config }, 'processBranch()');\n let branchExists = await scm.branchExists(config.branchName);\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Only allow a branch to be recreated with updates that are `pending` if we've explicitly constented with an `unpend` on the Dependency Dashboard, or when using `checkedBranches`\n const unpendRequested =\n dependencyDashboardCheck === 'unpend' ||\n dependencyDashboardCheck === 'global-config';\n let updatesVerified = false;\n if (!branchExists && config.branchPrefix !== config.branchPrefixOld) {\n const branchName = config.branchName.replace(\n config.branchPrefix!,\n config.branchPrefixOld!,\n );\n branchExists = await scm.branchExists(branchName);\n // v8 ignore else -- TODO: add test #40625\n if (branchExists) {\n config.branchName = branchName;\n logger.debug('Found existing branch with branchPrefixOld');\n }\n }\n\n if (\n !branchExists &&\n branchConfig.minimumGroupSize &&\n branchConfig.minimumGroupSize > branchConfig.upgrades.length &&\n !dependencyDashboardCheck\n ) {\n logger.debug(\n `Skipping branch creation as minimumGroupSize: ${branchConfig.minimumGroupSize} is not met`,\n );\n return {\n branchExists: false,\n result: 'minimum-group-size-not-met',\n };\n }\n\n let branchPr = await platform.getBranchPr(\n config.branchName,\n config.baseBranch,\n );\n logger.debug(`branchExists=${branchExists}`);\n logger.debug(`dependencyDashboardCheck=${dependencyDashboardCheck!}`);\n if (branchPr) {\n config.rebaseRequested = await rebaseCheck(config, branchPr);\n logger.debug(`PR rebase requested=${config.rebaseRequested}`);\n }\n const pendingRebaseTopic = emojify(':warning: Rebase not applied');\n const artifactErrorTopic = emojify(':warning: Artifact update problem');\n const artifactNoticeTopic = emojify(\n ':information_source: Artifact update notice',\n );\n try {\n // Check if branch already existed\n const existingPr =\n !branchPr || config.automerge\n ? await prAlreadyExisted(config)\n : undefined;\n if (existingPr?.state === 'merged') {\n logger.debug(`Matching PR #${existingPr.number} was merged previously`);\n if (config.automerge) {\n logger.debug('Disabling automerge because PR was merged previously');\n config.automerge = false;\n config.automergedPreviously = true;\n }\n } else if (!branchPr && existingPr && !dependencyDashboardCheck) {\n logger.debug(\n { prTitle: config.prTitle },\n `Closed PR #${existingPr.number} already exists. Skipping branch.`,\n );\n await handleClosedPr(config, existingPr);\n return {\n branchExists: false,\n prNo: existingPr.number,\n result: 'already-existed',\n };\n }\n if (!branchExists && branchConfig.pendingChecks && !unpendRequested) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because internalChecksFilter was not met`,\n );\n return {\n branchExists: false,\n result: 'pending',\n };\n }\n if (!branchExists) {\n if (config.mode === 'silent' && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because mode=silent`,\n );\n return {\n branchExists,\n result: 'needs-approval',\n };\n }\n if (config.dependencyDashboardApproval && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because dependencyDashboardApproval=true`,\n );\n return {\n branchExists,\n result: 'needs-approval',\n };\n }\n }\n\n logger.debug(\n `Open PR Count: ${getCount('ConcurrentPRs')}, Existing Branch Count: ${getCount('Branches')}, Hourly PR Count: ${getCount('HourlyPRs')}, Hourly Commit Count: ${getCount('HourlyCommits')}`,\n );\n\n // for a vulnerability alert this checks the VulnerabilityBranches count\n if (\n !branchExists &&\n isLimitReached('Branches', branchConfig) &&\n !dependencyDashboardCheck\n ) {\n logger.debug('Reached branch limit - skipping branch creation');\n return {\n branchExists,\n result: 'branch-limit-reached',\n };\n }\n if (\n !config.rebaseRequested &&\n isLimitReached('Commits') &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached commits per run limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-per-run-limit-reached',\n };\n }\n if (\n !config.rebaseRequested &&\n isLimitReached('HourlyCommits', branchConfig) &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached hourly commits limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-hourly-limit-reached',\n };\n }\n if (branchExists) {\n // check if branch is labelled to stop\n config.stopUpdating = branchPr?.labels?.includes(\n config.stopUpdatingLabel!,\n );\n\n const prRebaseChecked = !!branchPr?.bodyStruct?.rebaseRequested;\n\n if (\n !dependencyDashboardCheck &&\n !prRebaseChecked &&\n config.stopUpdating\n ) {\n logger.info(\n 'Branch updating is skipped because stopUpdatingLabel is present in config',\n );\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n\n // A rebase or retry request is not consent to add an upgrade which has not met its internal checks, so only an unpend of this branch may override this\n if (!unpendRequested && config.pendingChecks) {\n if (config.rebaseRequested) {\n logger.info(\n 'Branch updating is skipped because internalChecksFilter was not met, despite the requested rebase',\n );\n if (branchPr) {\n const content =\n 'This branch has not been rebased, as its update has not yet met the internal checks configured for it, such as `minimumReleaseAge`. Rebasing it now would add a dependency version which is still within its configured observation period.\\n\\nRenovate will rebase this branch once its update has met those checks.';\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure pending rebase comment in PR #${branchPr.number}`,\n );\n } else {\n await ensureComment({\n number: branchPr.number,\n topic: pendingRebaseTopic,\n content,\n });\n }\n }\n } else {\n logger.info(\n 'Branch updating is skipped because internalChecksFilter was not met',\n );\n }\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n\n logger.debug('Checking if PR has been edited');\n const branchIsModified = await scm.isBranchModified(\n config.branchName,\n config.baseBranch,\n );\n if (branchPr) {\n logger.debug(`Found existing branch PR #${branchPr.number}`);\n if (branchPr.state !== 'open') {\n logger.debug(\n 'PR has been closed or merged since this run started - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n if (branchIsModified || userChangedTargetBranch(branchPr)) {\n logger.debug(`PR has been edited, PrNo:${branchPr.number}`);\n await handleModifiedPr(config, branchPr);\n if (!(!!dependencyDashboardCheck || config.rebaseRequested)) {\n return {\n branchExists,\n prNo: branchPr.number,\n result: 'pr-edited',\n };\n }\n }\n } else if (\n branchIsModified &&\n !dependencyDashboardCheck &&\n !(await findClosedPrForModifiedBranch(config))\n ) {\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n }\n\n // Check schedule\n config.isScheduledNow = isScheduledNow(config, 'schedule');\n if (!config.isScheduledNow && !dependencyDashboardCheck) {\n if (!branchExists) {\n logger.debug('Skipping branch creation as not within schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n if (config.updateNotScheduled === false && !config.rebaseRequested) {\n logger.debug('Skipping branch update as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'update-not-scheduled',\n };\n }\n if (\n !branchPr &&\n !(config.automerge && config.automergeType === 'branch') // if branch is configured for automerge there's no need for a PR\n ) {\n logger.debug('Skipping PR creation out of schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n logger.debug(\n 'Branch + PR exists but is not scheduled -- will update if necessary',\n );\n }\n //stability checks\n const internalChecksStatus = await computeInternalChecksStatus(config);\n if (internalChecksStatus) {\n config.stabilityStatus = internalChecksStatus.stabilityStatus;\n config.confidenceStatus = internalChecksStatus.confidenceStatus;\n\n // Don't create a branch if we know it will be status 'pending'\n if (\n !dependencyDashboardCheck &&\n !branchExists &&\n config.stabilityStatus === 'yellow' &&\n ['not-pending', 'status-success'].includes(config.prCreation!)\n ) {\n logger.debug(\n 'Skipping branch creation due to internal status checks not met',\n );\n return {\n branchExists,\n result: 'pending',\n };\n }\n }\n\n const reuseDecision = decideBranchReuse({\n config,\n branchPr,\n branchExists,\n dependencyDashboardCheck,\n forceRebase,\n });\n const { userRebaseRequested } = reuseDecision;\n if (reuseDecision.action === 'skip-update') {\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n if (reuseDecision.action === 'no-reuse') {\n config.reuseExistingBranch = false;\n } else if (reuseDecision.action === 'check-reuse') {\n config = await shouldReuseExistingBranch(config, branchPr);\n }\n // TODO: types (#22198)\n logger.debug(`Using reuseExistingBranch: ${config.reuseExistingBranch!}`);\n if (!(\n config.reuseExistingBranch && config.cacheFingerprintMatch === 'matched'\n )) {\n await scm.checkoutBranch(config.baseBranch);\n const res = await getUpdatedPackageFiles(config);\n if (res.artifactErrors && config.artifactErrors) {\n res.artifactErrors = config.artifactErrors.concat(res.artifactErrors);\n }\n config = { ...config, ...res };\n if (config.updatedPackageFiles?.length) {\n logger.debug(\n `Updated ${config.updatedPackageFiles.length} package files`,\n );\n if (config.reuseExistingBranch && !forceRebase) {\n logger.debug(\n 'Existing branch needs updating. Restarting processBranch() with a clean branch',\n );\n return processBranch(branchConfig, true);\n }\n } else {\n logger.debug('No package files need updating');\n }\n const additionalFiles = await getAdditionalFiles(\n config,\n branchConfig.packageFiles!,\n );\n config.artifactErrors = coerceArray(config.artifactErrors).concat(\n additionalFiles.artifactErrors,\n );\n config.artifactNotices = coerceArray(config.artifactNotices).concat(\n coerceArray(additionalFiles.artifactNotices),\n );\n config.updatedArtifacts = coerceArray(config.updatedArtifacts).concat(\n additionalFiles.updatedArtifacts,\n );\n // `gh actions-lock` rewrites the whole lockfile from the workflows on disk, so like the lock files above it runs once here, after every updated package file has been written, rather than per package file.\n const actionsLockfile = await updateActionsLockfile(\n config,\n branchConfig.packageFiles,\n );\n config.artifactErrors = config.artifactErrors.concat(\n actionsLockfile.artifactErrors,\n );\n config.updatedArtifacts = config.updatedArtifacts.concat(\n actionsLockfile.updatedArtifacts,\n );\n if (config.updatedArtifacts?.length) {\n logger.debug(\n {\n updatedArtifacts: config.updatedArtifacts.map((f) =>\n f.type === 'deletion' ? `${f.path} (delete)` : f.path,\n ),\n },\n `Updated ${config.updatedArtifacts.length} lock files`,\n );\n if (config.reuseExistingBranch && !forceRebase) {\n logger.debug(\n 'Existing branch needs updating. Restarting processBranch() with a clean branch',\n );\n return processBranch(branchConfig, true);\n }\n } else {\n logger.debug('No updated lock files in branch');\n }\n\n await embedChangelogs({\n upgrades: config.upgrades,\n stage: 'branch',\n });\n\n const postUpgradeCommandResults =\n await executePostUpgradeCommands(config);\n\n if (postUpgradeCommandResults !== null) {\n const { updatedArtifacts, artifactErrors } = postUpgradeCommandResults;\n config.updatedArtifacts = updatedArtifacts;\n config.artifactErrors = artifactErrors;\n }\n\n // modifies the file changes in place to allow having a version bump in a packageFile or artifact\n await bumpVersions(config);\n\n removeMeta(['dep']);\n\n if (config.artifactErrors?.length) {\n if (config.releaseTimestamp) {\n logger.debug(`Branch timestamp: ${config.releaseTimestamp}`);\n const releaseTimestamp = DateTime.fromISO(config.releaseTimestamp);\n if (releaseTimestamp.plus({ hours: 2 }) < DateTime.local()) {\n logger.debug(\n 'PR is older than 2 hours, raise PR with lock file errors',\n );\n } else if (branchExists) {\n logger.debug(\n 'PR is less than 2 hours old but branchExists so updating anyway',\n );\n } else {\n logger.debug(\n 'PR is less than 2 hours old - raise error instead of PR',\n );\n throw new Error(MANAGER_LOCKFILE_ERROR);\n }\n } else {\n logger.debug('PR has no releaseTimestamp');\n }\n } else if (config.updatedArtifacts?.length && branchPr) {\n // If there are artifacts, no errors, and an existing PR then ensure any artifacts error comment is removed\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure comment removal in PR #${branchPr.number}`,\n );\n } else {\n // Remove artifacts error comment only if this run has successfully updated artifacts\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactErrorTopic,\n });\n\n // v8 ignore else -- TODO: add test #40625\n if (!config.artifactNotices?.length) {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactNoticeTopic,\n });\n }\n }\n }\n const forcedManually = userRebaseRequested || !branchExists;\n\n config.isConflicted ??=\n branchExists &&\n (await scm.isBranchConflicted(config.baseBranch, config.branchName));\n config.forceCommit = forcedManually || config.isConflicted;\n\n // compile commit message with body, which maybe needs changelogs\n config.commitMessage = compileCommitBody(config, config.commitMessage!, {\n ...config,\n // changelog is on first upgrade\n logJSON: config.upgrades[0].logJSON,\n releases: config.upgrades[0].releases,\n });\n // compiled after the body, as before, so the trailer context sees the full commit message\n config.commitTrailers = compileCommitTrailers(config, config);\n\n commitSha = await commitFilesToBranch(config);\n // Checkout to base branch to ensure that the next branch processing always starts with git being on the baseBranch\n // baseBranch is not checked out at the start of processBranch() due to pull/16246\n await scm.checkoutBranch(config.baseBranch);\n updatesVerified = true;\n\n // only update artifact status if branch was updated\n // also do before platform automerge reattempt\n if (commitSha) {\n await setArtifactErrorStatus(config);\n }\n\n // a requested rebase has now been applied, so any comment explaining why we'd skipped it no longer applies\n if (commitSha && branchPr && config.rebaseRequested) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure pending rebase comment removal in PR #${branchPr.number}`,\n );\n } else {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: pendingRebaseTopic,\n });\n }\n }\n }\n\n if (branchPr) {\n const platformPrOptions = getPlatformPrOptions(config);\n if (\n commitSha &&\n platformPrOptions.usePlatformAutomerge &&\n platform.reattemptPlatformAutomerge\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would reattempt platform automerge for PR #${branchPr.number}`,\n );\n } else {\n await platform.reattemptPlatformAutomerge({\n number: branchPr.number,\n platformPrOptions,\n });\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (platform.refreshPr) {\n await platform.refreshPr(branchPr.number);\n }\n }\n if (!commitSha && !branchExists) {\n return {\n branchExists,\n result: 'no-work',\n };\n }\n if (commitSha) {\n const action = branchExists ? 'updated' : 'created';\n logger.info({ commitSha }, `Branch ${action}`);\n }\n await setBranchStatusChecks(config);\n // new commit means status check are pretty sure pending but maybe not reported yet\n // if PR has not been created + new commit + prCreation !== immediate skip\n // but do not break when there are artifact errors\n if (\n !branchPr &&\n !config.artifactErrors?.length &&\n !userRebaseRequested &&\n commitSha &&\n config.prCreation !== 'immediate'\n ) {\n logger.debug(`Branch status pending, current sha: ${commitSha}`);\n return {\n branchExists: true,\n updatesVerified,\n result: 'pending',\n commitSha,\n };\n }\n\n // Try to automerge branch and finish if successful, but only if branch already existed before this run\n // skip if we have a non-immediate pr and there is an existing PR,\n // we want to update the PR and skip the Auto merge since status checks aren't done yet\n const canAutomerge = !commitSha || config.ignoreTests;\n if (!config.artifactErrors?.length && canAutomerge) {\n const mergeStatus = await tryBranchAutomerge(config, branchPr);\n logger.debug(`mergeStatus=${mergeStatus}`);\n if (mergeStatus === 'automerged') {\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete branch${config.branchName}`);\n } else {\n await deleteBranchSilently(config.branchName);\n }\n logger.debug('Branch is automerged - returning');\n return { branchExists: false, result: 'automerged' };\n }\n if (mergeStatus === 'off schedule') {\n if (userRebaseRequested) {\n config.forcePr = true;\n } else {\n logger.debug(\n 'Branch cannot automerge now because automergeSchedule is off schedule - skipping',\n );\n return {\n branchExists,\n result: 'not-scheduled',\n commitSha,\n };\n }\n }\n if (\n mergeStatus === 'stale' &&\n ['conflicted', 'never'].includes(config.rebaseWhen!) &&\n /* v8 ignore next -- needs test */\n !hasKeepUpdatedLabel(config, branchPr)\n ) {\n logger.warn(\n 'Branch cannot automerge because it is behind base branch and rebaseWhen setting disallows rebasing - raising a PR instead',\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n if (\n mergeStatus === 'automerge aborted - merge queue' ||\n mergeStatus === 'automerge aborted - PR exists' ||\n mergeStatus === 'branch status error' ||\n mergeStatus === 'failed'\n ) {\n logger.debug(\n `Branch automerge not possible, mergeStatus:${mergeStatus}`,\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n }\n } catch (err) {\n return handleBranchError(err, {\n branchExists,\n prNo: branchPr?.number,\n commitSha,\n updatesVerified,\n });\n }\n try {\n logger.debug('Ensuring PR');\n logger.debug(\n `There are ${config.errors!.length} errors and ${\n config.warnings!.length\n } warnings`,\n );\n const ensurePrResult = await ensurePr(config);\n if (ensurePrResult.type === 'without-pr') {\n const { prBlockedBy } = ensurePrResult;\n return {\n branchExists,\n prBlockedBy,\n result: prBlockedByToResult(prBlockedBy, config.isVulnerabilityAlert),\n commitSha,\n };\n }\n // v8 ignore else -- TODO: add test #40625\n if (ensurePrResult.type === 'with-pr') {\n const { pr } = ensurePrResult;\n branchPr = pr;\n // Retry setting branch statuses after PR/MR creation so that\n // platforms using MR pipelines (e.g. GitLab) have a pipeline to\n // associate the status with. The earlier call may have been\n // skipped if no pipeline existed yet.\n await setBranchStatusChecks(config);\n\n // only update artifact status if branch was updated\n if (commitSha) {\n await setArtifactErrorStatus(config);\n }\n if (config.artifactErrors?.length) {\n logger.warn(\n { artifactErrors: config.artifactErrors },\n 'artifactErrors',\n );\n let content = `Renovate failed to update `;\n content +=\n config.artifactErrors.length > 1 ? 'artifacts' : 'an artifact';\n content += ' related to this branch. ';\n content += template.compile(\n config.userStrings!.artifactErrorWarning,\n config,\n );\n content += emojify(\n `\\n\\n:recycle: Renovate will retry this branch, including artifacts, only when one of the following happens:\\n\\n`,\n );\n content +=\n ' - any of the package files in this branch needs updating, or \\n';\n content += ' - the branch becomes conflicted, or\\n';\n content +=\n ' - you click the rebase/retry checkbox if found above, or\\n';\n content +=\n ' - you rename this PR\\'s title to start with \"rebase!\" to trigger it manually';\n content += '\\n\\nThe artifact failure details are included below:\\n\\n';\n // TODO: types (#22198)\n config.artifactErrors.forEach((error) => {\n content += `##### File name: ${error.fileName!}\\n\\n`;\n content += `\\`\\`\\`\\n${error.stderr!}\\n\\`\\`\\`\\n\\n`;\n });\n content = platform.massageMarkdown(content, config.rebaseLabel);\n // v8 ignore else -- TODO: add test #40625\n if (!(\n config.suppressNotifications!.includes('artifactErrors') ||\n config.suppressNotifications!.includes('lockFileErrors')\n )) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure lock file error comment in PR #${pr.number}`,\n );\n } else {\n await ensureComment({\n number: pr.number,\n topic: artifactErrorTopic,\n content,\n });\n }\n }\n } else {\n if (config.artifactNotices?.length) {\n const contentLines: string[] = [];\n for (const notice of config.artifactNotices) {\n contentLines.push(`##### File name: ${notice.file}`);\n contentLines.push(notice.message);\n }\n const content = contentLines.join('\\n\\n');\n await ensureComment({\n number: pr.number,\n topic: artifactNoticeTopic,\n content,\n });\n }\n\n if (config.automerge) {\n logger.debug('PR is configured for automerge');\n // skip automerge if there is a new commit since status checks aren't done yet\n // v8 ignore else -- TODO: add test #40625\n if (config.ignoreTests === true || !commitSha) {\n logger.debug('checking auto-merge');\n const prAutomergeResult = await checkAutoMerge(pr, config);\n if (prAutomergeResult?.automerged) {\n return {\n branchExists,\n result: 'automerged',\n commitSha,\n };\n }\n }\n } else {\n logger.debug('PR is not configured for automerge');\n }\n }\n }\n } catch (err) {\n /* v8 ignore if -- needs test */\n if (\n err instanceof ExternalHostError ||\n [PLATFORM_RATE_LIMIT_EXCEEDED, REPOSITORY_CHANGED].includes(err.message)\n ) {\n logger.debug('Passing PR error up');\n throw err;\n }\n // Otherwise don't throw here - we don't want to stop the other renovations\n logger.error({ err }, `Error ensuring PR`);\n }\n if (!branchExists) {\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'pr-created',\n commitSha,\n };\n }\n return {\n branchExists,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'done',\n commitSha,\n };\n}\n"],"mappings":"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"}
@@ -64,7 +64,8 @@ async function setConfidence(config) {
64
64
  if (config.branchName && config.confidenceStatus) logger.debug("statusCheckWhen.mergeConfidence is set to \"never\", skipping merge confidence status check.");
65
65
  return;
66
66
  }
67
- if (!config.branchName || !config.confidenceStatus || config.minimumConfidence && !isActiveConfidenceLevel(config.minimumConfidence)) return;
67
+ if (!config.branchName || !config.confidenceStatus) return;
68
+ if (config.minimumConfidence && !isActiveConfidenceLevel(config.minimumConfidence)) return;
68
69
  if (mode === "failed" && config.confidenceStatus === "green") return;
69
70
  const context = config.statusCheckNames?.mergeConfidence;
70
71
  if (!context) {
@@ -1 +1 @@
1
- {"version":3,"file":"status-checks.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/status-checks.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type {\n MinimumReleaseAgeBehaviour,\n RenovateConfig,\n UpdateType,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { enforcesMinimumReleaseAge } from '../../../../modules/manager/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport type { BranchStatusConfig } from '../../../../modules/platform/types.ts';\nimport type { BranchStatus } from '../../../../types/index.ts';\nimport { getElapsedMs } from '../../../../util/date.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport type { MergeConfidence } from '../../../../util/merge-confidence/types.ts';\nimport type { MinimumReleaseAgeCheckResult } from '../../../../util/minimum-release-age.ts';\nimport { checkMinimumReleaseAge } from '../../../../util/minimum-release-age.ts';\nimport { joinUrlParts } from '../../../../util/url.ts';\nimport type { BranchConfig, BranchUpgradeConfig } from '../../../types.ts';\n\nexport async function resolveBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ignoreTests = false,\n): Promise<BranchStatus> {\n logger.debug(\n `resolveBranchStatus(branchName=${branchName}, ignoreTests=${ignoreTests})`,\n );\n\n if (ignoreTests) {\n logger.debug('Ignore tests. Return green');\n return 'green';\n }\n\n const status = await platform.getBranchStatus(\n branchName,\n internalChecksAsSuccess,\n );\n logger.debug(`Branch status ${status}`);\n\n return status;\n}\n\nasync function setStatusCheck({\n branchName,\n context,\n description,\n state,\n url,\n}: BranchStatusConfig): Promise<void> {\n const existingState = await platform.getBranchStatusCheck(\n branchName,\n context,\n );\n if (existingState === state) {\n logger.debug(`Status check ${context} is already up-to-date`);\n } else {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would update ${context} status check state to ${state}`,\n );\n return;\n }\n logger.debug(`Updating ${context} status check state to ${state}`);\n await platform.setBranchStatus({\n branchName,\n context,\n description,\n state,\n url,\n });\n }\n}\n\nexport interface StabilityConfig extends RenovateConfig {\n stabilityStatus?: BranchStatus;\n branchName: string;\n}\n\nexport async function setStability(config: StabilityConfig): Promise<void> {\n const mode = config.statusCheckWhen?.minimumReleaseAge ?? 'always';\n\n if (mode === 'never') {\n if (config.stabilityStatus) {\n logger.debug(\n 'statusCheckWhen.minimumReleaseAge is set to \"never\", skipping stability status check.',\n );\n }\n return;\n }\n\n if (!config.stabilityStatus) {\n return;\n }\n\n if (mode === 'failed' && config.stabilityStatus === 'green') {\n return;\n }\n\n const context = config.statusCheckNames?.minimumReleaseAge;\n if (!context) {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n return;\n }\n\n const description =\n config.stabilityStatus === 'green'\n ? 'Updates have met minimum release age requirement'\n : 'Updates have not met minimum release age requirement';\n\n const docsLink = joinUrlParts(\n GlobalConfig.get('productLinks').documentation,\n 'key-concepts/minimum-release-age/',\n );\n\n await setStatusCheck({\n branchName: config.branchName,\n context,\n description,\n state: config.stabilityStatus,\n url: docsLink,\n });\n}\n\nexport interface ConfidenceConfig extends RenovateConfig {\n confidenceStatus?: BranchStatus;\n minimumConfidence?: MergeConfidence | undefined;\n}\n\nexport async function setConfidence(config: ConfidenceConfig): Promise<void> {\n const mode = config.statusCheckWhen?.mergeConfidence ?? 'always';\n\n if (mode === 'never') {\n if (config.branchName && config.confidenceStatus) {\n logger.debug(\n 'statusCheckWhen.mergeConfidence is set to \"never\", skipping merge confidence status check.',\n );\n }\n return;\n }\n\n if (\n !config.branchName ||\n !config.confidenceStatus ||\n (config.minimumConfidence &&\n !isActiveConfidenceLevel(config.minimumConfidence))\n ) {\n return;\n }\n\n if (mode === 'failed' && config.confidenceStatus === 'green') {\n return;\n }\n\n const context = config.statusCheckNames?.mergeConfidence;\n if (!context) {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n return;\n }\n\n const description =\n config.confidenceStatus === 'green'\n ? 'Updates have met Merge Confidence requirement'\n : 'Updates have not met Merge Confidence requirement';\n\n const docsLink = joinUrlParts(\n GlobalConfig.get('productLinks').documentation,\n 'merge-confidence',\n );\n\n await setStatusCheck({\n branchName: config.branchName,\n context,\n description,\n state: config.confidenceStatus,\n url: docsLink,\n });\n}\n\n/**\n * Checks the minimum release age of `upgrade`, which is skipped for lock file\n * maintenance if the package manager enforces it itself.\n */\nasync function checkUpgradeMinimumReleaseAge(\n upgrade: BranchUpgradeConfig,\n): Promise<MinimumReleaseAgeCheckResult> {\n const result = checkMinimumReleaseAge(\n {\n ...upgrade,\n minimumReleaseAgeBehaviour:\n upgrade.minimumReleaseAgeBehaviour ?? 'timestamp-required',\n },\n upgrade.releaseTimestamp,\n );\n if (!result.minimumReleaseAgeMs || !upgrade.isLockFileMaintenance) {\n return result;\n }\n if (!(await enforcesMinimumReleaseAge(upgrade.manager, upgrade))) {\n return result;\n }\n logger.debug(\n `Lock file maintenance of ${upgrade.packageFile}: the package manager enforces the minimum release age`,\n );\n return { ...result, isPending: false, minimumReleaseAgeMs: 0 };\n}\n\nexport interface InternalChecksStatus {\n stabilityStatus?: BranchStatus;\n confidenceStatus?: BranchStatus;\n}\n\n/**\n * Computes the internal checks status of a branch from its upgrades, i.e. their\n * minimum release age and their merge confidence. Returns `null` if none of the\n * upgrades has any internal check configured.\n */\nexport async function computeInternalChecksStatus(\n config: BranchConfig,\n): Promise<InternalChecksStatus | null> {\n const internalChecksConfigured = config.upgrades.some(\n (upgrade) =>\n isNonEmptyString(upgrade.minimumReleaseAge) ||\n isNonEmptyString(upgrade.minimumReleaseAgeExtracted) ||\n isActiveConfidenceLevel(upgrade.minimumConfidence!),\n );\n if (!internalChecksConfigured) {\n return null;\n }\n\n const status: InternalChecksStatus = {};\n const depNamesWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n {\n depName: string;\n updateType: UpdateType;\n }[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // Only set a stability status check if one or more of the updates contain\n // both a minimumReleaseAge setting and a releaseTimestamp\n status.stabilityStatus = 'green';\n // Default to 'success' but set 'pending' if any update is pending\n for (const upgrade of config.upgrades) {\n const { isPending, minimumReleaseAgeMs, hasTimestamp } =\n await checkUpgradeMinimumReleaseAge(upgrade);\n\n if (isPending) {\n if (hasTimestamp) {\n // regardless of the value of `minimumReleaseAgeBehaviour`, if there is a timestamp, we will process it according to `minimumReleaseAge`\n logger.debug(\n {\n depName: upgrade.depName,\n timeElapsed: getElapsedMs(upgrade.releaseTimestamp!),\n minimumReleaseAge: upgrade.minimumReleaseAge,\n },\n 'Update has not passed minimum release age',\n );\n } else {\n // if we're set to `minimumReleaseAgeBehaviour=timestamp-required`, and there isn't a timestamp, always mark the update as pending\n depNamesWithoutReleaseTimestamp['timestamp-required'].push({\n depName: upgrade.depName!,\n updateType: upgrade.updateType!,\n });\n }\n status.stabilityStatus = 'yellow';\n continue;\n }\n if (minimumReleaseAgeMs && !hasTimestamp) {\n // if there is no timestamp, and we're running in `optional` mode, we can allow it, but make sure to warn the user\n depNamesWithoutReleaseTimestamp['timestamp-optional'].push({\n depName: upgrade.depName!,\n updateType: upgrade.updateType!,\n });\n }\n const datasource = upgrade.datasource!;\n const depName = upgrade.depName!;\n const packageName = upgrade.packageName!;\n const minimumConfidence = upgrade.minimumConfidence!;\n const updateType = upgrade.updateType!;\n const currentVersion = upgrade.currentVersion!;\n const newVersion = upgrade.newVersion!;\n if (isActiveConfidenceLevel(minimumConfidence)) {\n const confidence =\n (await getMergeConfidenceLevel(\n datasource,\n packageName,\n currentVersion,\n newVersion,\n updateType,\n )) ?? 'neutral';\n if (satisfiesConfidenceLevel(confidence, minimumConfidence)) {\n status.confidenceStatus = 'green';\n } else {\n logger.debug(\n { depName, confidence, minimumConfidence },\n 'Update does not meet minimum confidence scores',\n );\n status.confidenceStatus = 'yellow';\n continue;\n }\n }\n }\n\n if (depNamesWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n { updates: depNamesWithoutReleaseTimestamp['timestamp-required'] },\n `Marking ${depNamesWithoutReleaseTimestamp['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 if (depNamesWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some upgrade(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 { updates: depNamesWithoutReleaseTimestamp['timestamp-optional'] },\n `${depNamesWithoutReleaseTimestamp['timestamp-optional'].length} upgrade(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n return status;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"status-checks.js","names":[],"sources":["../../../../../lib/workers/repository/update/branch/status-checks.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type {\n MinimumReleaseAgeBehaviour,\n RenovateConfig,\n UpdateType,\n} from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { enforcesMinimumReleaseAge } from '../../../../modules/manager/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport type { BranchStatusConfig } from '../../../../modules/platform/types.ts';\nimport type { BranchStatus } from '../../../../types/index.ts';\nimport { getElapsedMs } from '../../../../util/date.ts';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence/index.ts';\nimport type { MergeConfidence } from '../../../../util/merge-confidence/types.ts';\nimport type { MinimumReleaseAgeCheckResult } from '../../../../util/minimum-release-age.ts';\nimport { checkMinimumReleaseAge } from '../../../../util/minimum-release-age.ts';\nimport { joinUrlParts } from '../../../../util/url.ts';\nimport type { BranchConfig, BranchUpgradeConfig } from '../../../types.ts';\n\nexport async function resolveBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ignoreTests = false,\n): Promise<BranchStatus> {\n logger.debug(\n `resolveBranchStatus(branchName=${branchName}, ignoreTests=${ignoreTests})`,\n );\n\n if (ignoreTests) {\n logger.debug('Ignore tests. Return green');\n return 'green';\n }\n\n const status = await platform.getBranchStatus(\n branchName,\n internalChecksAsSuccess,\n );\n logger.debug(`Branch status ${status}`);\n\n return status;\n}\n\nasync function setStatusCheck({\n branchName,\n context,\n description,\n state,\n url,\n}: BranchStatusConfig): Promise<void> {\n const existingState = await platform.getBranchStatusCheck(\n branchName,\n context,\n );\n if (existingState === state) {\n logger.debug(`Status check ${context} is already up-to-date`);\n } else {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would update ${context} status check state to ${state}`,\n );\n return;\n }\n logger.debug(`Updating ${context} status check state to ${state}`);\n await platform.setBranchStatus({\n branchName,\n context,\n description,\n state,\n url,\n });\n }\n}\n\nexport interface StabilityConfig extends RenovateConfig {\n stabilityStatus?: BranchStatus;\n branchName: string;\n}\n\nexport async function setStability(config: StabilityConfig): Promise<void> {\n const mode = config.statusCheckWhen?.minimumReleaseAge ?? 'always';\n\n if (mode === 'never') {\n if (config.stabilityStatus) {\n logger.debug(\n 'statusCheckWhen.minimumReleaseAge is set to \"never\", skipping stability status check.',\n );\n }\n return;\n }\n\n if (!config.stabilityStatus) {\n return;\n }\n\n if (mode === 'failed' && config.stabilityStatus === 'green') {\n return;\n }\n\n const context = config.statusCheckNames?.minimumReleaseAge;\n if (!context) {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n return;\n }\n\n const description =\n config.stabilityStatus === 'green'\n ? 'Updates have met minimum release age requirement'\n : 'Updates have not met minimum release age requirement';\n\n const docsLink = joinUrlParts(\n GlobalConfig.get('productLinks').documentation,\n 'key-concepts/minimum-release-age/',\n );\n\n await setStatusCheck({\n branchName: config.branchName,\n context,\n description,\n state: config.stabilityStatus,\n url: docsLink,\n });\n}\n\nexport interface ConfidenceConfig extends RenovateConfig {\n confidenceStatus?: BranchStatus;\n minimumConfidence?: MergeConfidence | undefined;\n}\n\nexport async function setConfidence(config: ConfidenceConfig): Promise<void> {\n const mode = config.statusCheckWhen?.mergeConfidence ?? 'always';\n\n if (mode === 'never') {\n if (config.branchName && config.confidenceStatus) {\n logger.debug(\n 'statusCheckWhen.mergeConfidence is set to \"never\", skipping merge confidence status check.',\n );\n }\n return;\n }\n\n if (!config.branchName || !config.confidenceStatus) {\n return;\n }\n if (\n config.minimumConfidence &&\n !isActiveConfidenceLevel(config.minimumConfidence)\n ) {\n return;\n }\n\n if (mode === 'failed' && config.confidenceStatus === 'green') {\n return;\n }\n\n const context = config.statusCheckNames?.mergeConfidence;\n if (!context) {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n return;\n }\n\n const description =\n config.confidenceStatus === 'green'\n ? 'Updates have met Merge Confidence requirement'\n : 'Updates have not met Merge Confidence requirement';\n\n const docsLink = joinUrlParts(\n GlobalConfig.get('productLinks').documentation,\n 'merge-confidence',\n );\n\n await setStatusCheck({\n branchName: config.branchName,\n context,\n description,\n state: config.confidenceStatus,\n url: docsLink,\n });\n}\n\n/**\n * Checks the minimum release age of `upgrade`, which is skipped for lock file\n * maintenance if the package manager enforces it itself.\n */\nasync function checkUpgradeMinimumReleaseAge(\n upgrade: BranchUpgradeConfig,\n): Promise<MinimumReleaseAgeCheckResult> {\n const result = checkMinimumReleaseAge(\n {\n ...upgrade,\n minimumReleaseAgeBehaviour:\n upgrade.minimumReleaseAgeBehaviour ?? 'timestamp-required',\n },\n upgrade.releaseTimestamp,\n );\n if (!result.minimumReleaseAgeMs || !upgrade.isLockFileMaintenance) {\n return result;\n }\n if (!(await enforcesMinimumReleaseAge(upgrade.manager, upgrade))) {\n return result;\n }\n logger.debug(\n `Lock file maintenance of ${upgrade.packageFile}: the package manager enforces the minimum release age`,\n );\n return { ...result, isPending: false, minimumReleaseAgeMs: 0 };\n}\n\nexport interface InternalChecksStatus {\n stabilityStatus?: BranchStatus;\n confidenceStatus?: BranchStatus;\n}\n\n/**\n * Computes the internal checks status of a branch from its upgrades, i.e. their\n * minimum release age and their merge confidence. Returns `null` if none of the\n * upgrades has any internal check configured.\n */\nexport async function computeInternalChecksStatus(\n config: BranchConfig,\n): Promise<InternalChecksStatus | null> {\n const internalChecksConfigured = config.upgrades.some(\n (upgrade) =>\n isNonEmptyString(upgrade.minimumReleaseAge) ||\n isNonEmptyString(upgrade.minimumReleaseAgeExtracted) ||\n isActiveConfidenceLevel(upgrade.minimumConfidence!),\n );\n if (!internalChecksConfigured) {\n return null;\n }\n\n const status: InternalChecksStatus = {};\n const depNamesWithoutReleaseTimestamp: Record<\n MinimumReleaseAgeBehaviour,\n {\n depName: string;\n updateType: UpdateType;\n }[]\n > = {\n 'timestamp-required': [],\n 'timestamp-optional': [],\n };\n\n // Only set a stability status check if one or more of the updates contain\n // both a minimumReleaseAge setting and a releaseTimestamp\n status.stabilityStatus = 'green';\n // Default to 'success' but set 'pending' if any update is pending\n for (const upgrade of config.upgrades) {\n const { isPending, minimumReleaseAgeMs, hasTimestamp } =\n await checkUpgradeMinimumReleaseAge(upgrade);\n\n if (isPending) {\n if (hasTimestamp) {\n // regardless of the value of `minimumReleaseAgeBehaviour`, if there is a timestamp, we will process it according to `minimumReleaseAge`\n logger.debug(\n {\n depName: upgrade.depName,\n timeElapsed: getElapsedMs(upgrade.releaseTimestamp!),\n minimumReleaseAge: upgrade.minimumReleaseAge,\n },\n 'Update has not passed minimum release age',\n );\n } else {\n // if we're set to `minimumReleaseAgeBehaviour=timestamp-required`, and there isn't a timestamp, always mark the update as pending\n depNamesWithoutReleaseTimestamp['timestamp-required'].push({\n depName: upgrade.depName!,\n updateType: upgrade.updateType!,\n });\n }\n status.stabilityStatus = 'yellow';\n continue;\n }\n if (minimumReleaseAgeMs && !hasTimestamp) {\n // if there is no timestamp, and we're running in `optional` mode, we can allow it, but make sure to warn the user\n depNamesWithoutReleaseTimestamp['timestamp-optional'].push({\n depName: upgrade.depName!,\n updateType: upgrade.updateType!,\n });\n }\n const datasource = upgrade.datasource!;\n const depName = upgrade.depName!;\n const packageName = upgrade.packageName!;\n const minimumConfidence = upgrade.minimumConfidence!;\n const updateType = upgrade.updateType!;\n const currentVersion = upgrade.currentVersion!;\n const newVersion = upgrade.newVersion!;\n if (isActiveConfidenceLevel(minimumConfidence)) {\n const confidence =\n (await getMergeConfidenceLevel(\n datasource,\n packageName,\n currentVersion,\n newVersion,\n updateType,\n )) ?? 'neutral';\n if (satisfiesConfidenceLevel(confidence, minimumConfidence)) {\n status.confidenceStatus = 'green';\n } else {\n logger.debug(\n { depName, confidence, minimumConfidence },\n 'Update does not meet minimum confidence scores',\n );\n status.confidenceStatus = 'yellow';\n continue;\n }\n }\n }\n\n if (depNamesWithoutReleaseTimestamp['timestamp-required'].length) {\n logger.once.debug(\n { updates: depNamesWithoutReleaseTimestamp['timestamp-required'] },\n `Marking ${depNamesWithoutReleaseTimestamp['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 if (depNamesWithoutReleaseTimestamp['timestamp-optional'].length) {\n logger.once.warn(\n \"Some upgrade(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 { updates: depNamesWithoutReleaseTimestamp['timestamp-optional'] },\n `${depNamesWithoutReleaseTimestamp['timestamp-optional'].length} upgrade(s) did not have a releaseTimestamp, but as we're running with minimumReleaseAgeBehaviour=timestamp-optional, proceeding`,\n );\n }\n\n return status;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../../lib/workers/repository/update/pr/body/index.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../../../config/types.ts';\nimport { PLATFORM_FAMILIES } from '../../../../../constants/index.ts';\nimport type { PrDebugData } from '../../../../../modules/platform/index.ts';\nimport { platform } from '../../../../../modules/platform/index.ts';\nimport { detectPlatform } from '../../../../../util/common.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport { toBase64 } from '../../../../../util/string.ts';\nimport * as template from '../../../../../util/template/index.ts';\nimport { joinUrlParts } from '../../../../../util/url.ts';\nimport type { BranchConfig } from '../../../../types.ts';\nimport { getDepWarningsPR, getWarnings } from '../../../errors-warnings.ts';\nimport { getChangelogs } from './changelogs.ts';\nimport { getPrConfigDescription } from './config-description.ts';\nimport { getControls } from './controls.ts';\nimport { getPrFooter } from './footer.ts';\nimport { getPrHeader } from './header.ts';\nimport { getPrExtraNotes, getPrNotes } from './notes.ts';\nimport { getPrUpdatesTable } from './updates-table.ts';\n\nfunction massageUpdateMetadata(config: BranchConfig): void {\n config.upgrades.forEach((upgrade) => {\n const {\n homepage,\n sourceUrl,\n sourceDirectory,\n changelogUrl,\n dependencyUrl,\n } = upgrade;\n // TODO: types (#22198)\n let depNameLinked = upgrade.depName!;\n let newNameLinked = upgrade.newName!;\n const primaryLink = homepage ?? sourceUrl ?? dependencyUrl;\n if (primaryLink) {\n depNameLinked = `[${depNameLinked}](${primaryLink})`;\n newNameLinked = `[${newNameLinked}](${primaryLink})`;\n }\n\n const sourcePlatform = sourceUrl ? detectPlatform(sourceUrl) : null;\n const sourceRootPath = sourcePlatform\n ? PLATFORM_FAMILIES[sourcePlatform].webDirPath\n : 'tree/HEAD';\n\n const otherLinks = [];\n if (sourceUrl && (!!sourceDirectory || homepage)) {\n otherLinks.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n const templatedChangelogUrl = changelogUrl\n ? template.compile(changelogUrl, upgrade, true)\n : undefined;\n if (templatedChangelogUrl) {\n otherLinks.push(`[changelog](${templatedChangelogUrl})`);\n }\n if (otherLinks.length) {\n depNameLinked += ` (${otherLinks.join(', ')})`;\n }\n upgrade.depNameLinked = depNameLinked;\n upgrade.newNameLinked = newNameLinked;\n const references: string[] = [];\n if (homepage) {\n references.push(`[homepage](${homepage})`);\n }\n if (sourceUrl) {\n references.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n if (templatedChangelogUrl) {\n references.push(`[changelog](${templatedChangelogUrl})`);\n }\n upgrade.references = references.join(', ');\n });\n}\n\nfunction getFullSourceUrl(\n sourceUrl: string,\n sourceRootPath: string,\n sourceDirectory?: string,\n): string {\n let fullUrl = sourceUrl;\n if (sourceDirectory) {\n fullUrl = joinUrlParts(sourceUrl, sourceRootPath, sourceDirectory);\n }\n\n return fullUrl;\n}\n\ninterface PrBodyConfig {\n appendExtra?: string | null | undefined;\n rebasingNotice?: string;\n debugData: PrDebugData;\n}\n\nconst rebasingRegex = regEx(/\\*\\*Rebasing\\*\\*: .*/);\n\n// TODO: `branchConfig` and `config`are the same object\nexport function getPrBody(\n branchConfig: BranchConfig,\n prBodyConfig: PrBodyConfig,\n config: RenovateConfig,\n): string {\n massageUpdateMetadata(branchConfig);\n let warnings = '';\n warnings += getWarnings(branchConfig);\n if (branchConfig.packageFiles) {\n warnings += getDepWarningsPR(\n branchConfig.packageFiles,\n config,\n branchConfig.dependencyDashboard,\n );\n }\n const content = {\n header: getPrHeader(branchConfig),\n table: getPrUpdatesTable(branchConfig),\n warnings,\n notes: getPrNotes(branchConfig) + getPrExtraNotes(branchConfig),\n changelogs: getChangelogs(branchConfig),\n configDescription: getPrConfigDescription(branchConfig),\n controls: getControls(),\n footer: getPrFooter(branchConfig),\n };\n\n let prBody = '';\n if (branchConfig.prBodyTemplate) {\n const prBodyTemplate = branchConfig.prBodyTemplate;\n prBody = template.compile(prBodyTemplate, content, false);\n prBody = prBody.trim();\n prBody = prBody.replace(regEx(/\\n\\n\\n+/g), '\\n\\n');\n const prDebugData64 = toBase64(JSON.stringify(prBodyConfig.debugData));\n prBody += `\\n<!--renovate-debug:${prDebugData64}-->\\n`;\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (prBodyConfig?.rebasingNotice) {\n prBody = prBody.replace(\n rebasingRegex,\n `**Rebasing**: ${prBodyConfig.rebasingNotice}`,\n );\n }\n }\n return prBody;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,SAAS,sBAAsB,QAA4B;CACzD,OAAO,SAAS,SAAS,YAAY;EACnC,MAAM,EACJ,UACA,WACA,iBACA,cACA,kBACE;EAEJ,IAAI,gBAAgB,QAAQ;EAC5B,IAAI,gBAAgB,QAAQ;EAC5B,MAAM,cAAc,YAAY,aAAa;EAC7C,IAAI,aAAa;GACf,gBAAgB,IAAI,cAAc,IAAI,YAAY;GAClD,gBAAgB,IAAI,cAAc,IAAI,YAAY;EACpD;EAEA,MAAM,iBAAiB,YAAY,eAAe,SAAS,IAAI;EAC/D,MAAM,iBAAiB,iBACnB,kBAAkB,eAAe,CAAC,aAClC;EAEJ,MAAM,aAAa,CAAC;EACpB,IAAI,cAAc,CAAC,CAAC,mBAAmB,WACrC,WAAW,KACT,YAAY,iBAAiB,WAAW,gBAAgB,eAAe,EAAE,EAC3E;EAEF,MAAM,wBAAwB,eAC1BA,QAAiB,cAAc,SAAS,IAAI,IAC5C,KAAA;EACJ,IAAI,uBACF,WAAW,KAAK,eAAe,sBAAsB,EAAE;EAEzD,IAAI,WAAW,QACb,iBAAiB,KAAK,WAAW,KAAK,IAAI,EAAE;EAE9C,QAAQ,gBAAgB;EACxB,QAAQ,gBAAgB;EACxB,MAAM,aAAuB,CAAC;EAC9B,IAAI,UACF,WAAW,KAAK,cAAc,SAAS,EAAE;EAE3C,IAAI,WACF,WAAW,KACT,YAAY,iBAAiB,WAAW,gBAAgB,eAAe,EAAE,EAC3E;EAEF,IAAI,uBACF,WAAW,KAAK,eAAe,sBAAsB,EAAE;EAEzD,QAAQ,aAAa,WAAW,KAAK,IAAI;CAC3C,CAAC;AACH;AAEA,SAAS,iBACP,WACA,gBACA,iBACQ;CACR,IAAI,UAAU;CACd,IAAI,iBACF,UAAU,aAAa,WAAW,gBAAgB,eAAe;CAGnE,OAAO;AACT;AAQA,MAAM,gBAAgB,MAAM,sBAAsB;AAGlD,SAAgB,UACd,cACA,cACA,QACQ;CACR,sBAAsB,YAAY;CAClC,IAAI,WAAW;CACf,YAAY,YAAY,YAAY;CACpC,IAAI,aAAa,cACf,YAAY,iBACV,aAAa,cACb,QACA,aAAa,mBACf;CAEF,MAAM,UAAU;EACd,QAAQ,YAAY,YAAY;EAChC,OAAO,kBAAkB,YAAY;EACrC;EACA,OAAO,WAAW,YAAY,IAAI,gBAAgB,YAAY;EAC9D,YAAY,cAAc,YAAY;EACtC,mBAAmB,uBAAuB,YAAY;EACtD,UAAU,YAAY;EACtB,QAAQ,YAAY,YAAY;CAClC;CAEA,IAAI,SAAS;CACb,IAAI,aAAa,gBAAgB;EAC/B,MAAM,iBAAiB,aAAa;EACpC,SAASA,QAAiB,gBAAgB,SAAS,KAAK;EACxD,SAAS,OAAO,KAAK;EACrB,SAAS,OAAO,QAAQ,MAAM,UAAU,GAAG,MAAM;EACjD,MAAM,gBAAgB,SAAS,KAAK,UAAU,aAAa,SAAS,CAAC;EACrE,UAAU,wBAAwB,cAAc;EAChD,SAAS,SAAS,gBAAgB,QAAQ,OAAO,WAAW;EAE5D,IAAI,cAAc,gBAChB,SAAS,OAAO,QACd,eACA,iBAAiB,aAAa,gBAChC;CAEJ;CACA,OAAO;AACT"}
1
+ {"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../../lib/workers/repository/update/pr/body/index.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../../../config/types.ts';\nimport { PLATFORM_FAMILIES } from '../../../../../constants/index.ts';\nimport type { PrDebugData } from '../../../../../modules/platform/index.ts';\nimport { platform } from '../../../../../modules/platform/index.ts';\nimport { detectPlatform } from '../../../../../util/common.ts';\nimport { regEx } from '../../../../../util/regex.ts';\nimport { toBase64 } from '../../../../../util/string.ts';\nimport * as template from '../../../../../util/template/index.ts';\nimport { joinUrlParts } from '../../../../../util/url.ts';\nimport type { BranchConfig } from '../../../../types.ts';\nimport { getDepWarningsPR, getWarnings } from '../../../errors-warnings.ts';\nimport { getChangelogs } from './changelogs.ts';\nimport { getPrConfigDescription } from './config-description.ts';\nimport { getControls } from './controls.ts';\nimport { getPrFooter } from './footer.ts';\nimport { getPrHeader } from './header.ts';\nimport { getPrExtraNotes, getPrNotes } from './notes.ts';\nimport { getPrUpdatesTable } from './updates-table.ts';\n\nfunction massageUpdateMetadata(config: BranchConfig): void {\n config.upgrades.forEach((upgrade) => {\n const {\n homepage,\n sourceUrl,\n sourceDirectory,\n changelogUrl,\n dependencyUrl,\n } = upgrade;\n // TODO: types (#22198)\n let depNameLinked = upgrade.depName!;\n let newNameLinked = upgrade.newName!;\n const primaryLink = homepage ?? sourceUrl ?? dependencyUrl;\n if (primaryLink) {\n depNameLinked = `[${depNameLinked}](${primaryLink})`;\n newNameLinked = `[${newNameLinked}](${primaryLink})`;\n }\n\n const sourcePlatform = sourceUrl ? detectPlatform(sourceUrl) : null;\n const sourceRootPath = sourcePlatform\n ? PLATFORM_FAMILIES[sourcePlatform].webDirPath\n : 'tree/HEAD';\n\n const otherLinks = [];\n const hasSourceDirectoryOrHomepage = !!sourceDirectory || homepage;\n if (sourceUrl && hasSourceDirectoryOrHomepage) {\n otherLinks.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n const templatedChangelogUrl = changelogUrl\n ? template.compile(changelogUrl, upgrade, true)\n : undefined;\n if (templatedChangelogUrl) {\n otherLinks.push(`[changelog](${templatedChangelogUrl})`);\n }\n if (otherLinks.length) {\n depNameLinked += ` (${otherLinks.join(', ')})`;\n }\n upgrade.depNameLinked = depNameLinked;\n upgrade.newNameLinked = newNameLinked;\n const references: string[] = [];\n if (homepage) {\n references.push(`[homepage](${homepage})`);\n }\n if (sourceUrl) {\n references.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n if (templatedChangelogUrl) {\n references.push(`[changelog](${templatedChangelogUrl})`);\n }\n upgrade.references = references.join(', ');\n });\n}\n\nfunction getFullSourceUrl(\n sourceUrl: string,\n sourceRootPath: string,\n sourceDirectory?: string,\n): string {\n let fullUrl = sourceUrl;\n if (sourceDirectory) {\n fullUrl = joinUrlParts(sourceUrl, sourceRootPath, sourceDirectory);\n }\n\n return fullUrl;\n}\n\ninterface PrBodyConfig {\n appendExtra?: string | null | undefined;\n rebasingNotice?: string;\n debugData: PrDebugData;\n}\n\nconst rebasingRegex = regEx(/\\*\\*Rebasing\\*\\*: .*/);\n\n// TODO: `branchConfig` and `config`are the same object\nexport function getPrBody(\n branchConfig: BranchConfig,\n prBodyConfig: PrBodyConfig,\n config: RenovateConfig,\n): string {\n massageUpdateMetadata(branchConfig);\n let warnings = '';\n warnings += getWarnings(branchConfig);\n if (branchConfig.packageFiles) {\n warnings += getDepWarningsPR(\n branchConfig.packageFiles,\n config,\n branchConfig.dependencyDashboard,\n );\n }\n const content = {\n header: getPrHeader(branchConfig),\n table: getPrUpdatesTable(branchConfig),\n warnings,\n notes: getPrNotes(branchConfig) + getPrExtraNotes(branchConfig),\n changelogs: getChangelogs(branchConfig),\n configDescription: getPrConfigDescription(branchConfig),\n controls: getControls(),\n footer: getPrFooter(branchConfig),\n };\n\n let prBody = '';\n if (branchConfig.prBodyTemplate) {\n const prBodyTemplate = branchConfig.prBodyTemplate;\n prBody = template.compile(prBodyTemplate, content, false);\n prBody = prBody.trim();\n prBody = prBody.replace(regEx(/\\n\\n\\n+/g), '\\n\\n');\n const prDebugData64 = toBase64(JSON.stringify(prBodyConfig.debugData));\n prBody += `\\n<!--renovate-debug:${prDebugData64}-->\\n`;\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (prBodyConfig?.rebasingNotice) {\n prBody = prBody.replace(\n rebasingRegex,\n `**Rebasing**: ${prBodyConfig.rebasingNotice}`,\n );\n }\n }\n return prBody;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAmBA,SAAS,sBAAsB,QAA4B;CACzD,OAAO,SAAS,SAAS,YAAY;EACnC,MAAM,EACJ,UACA,WACA,iBACA,cACA,kBACE;EAEJ,IAAI,gBAAgB,QAAQ;EAC5B,IAAI,gBAAgB,QAAQ;EAC5B,MAAM,cAAc,YAAY,aAAa;EAC7C,IAAI,aAAa;GACf,gBAAgB,IAAI,cAAc,IAAI,YAAY;GAClD,gBAAgB,IAAI,cAAc,IAAI,YAAY;EACpD;EAEA,MAAM,iBAAiB,YAAY,eAAe,SAAS,IAAI;EAC/D,MAAM,iBAAiB,iBACnB,kBAAkB,eAAe,CAAC,aAClC;EAEJ,MAAM,aAAa,CAAC;EAEpB,IAAI,cADiC,CAAC,CAAC,mBAAmB,WAExD,WAAW,KACT,YAAY,iBAAiB,WAAW,gBAAgB,eAAe,EAAE,EAC3E;EAEF,MAAM,wBAAwB,eAC1BA,QAAiB,cAAc,SAAS,IAAI,IAC5C,KAAA;EACJ,IAAI,uBACF,WAAW,KAAK,eAAe,sBAAsB,EAAE;EAEzD,IAAI,WAAW,QACb,iBAAiB,KAAK,WAAW,KAAK,IAAI,EAAE;EAE9C,QAAQ,gBAAgB;EACxB,QAAQ,gBAAgB;EACxB,MAAM,aAAuB,CAAC;EAC9B,IAAI,UACF,WAAW,KAAK,cAAc,SAAS,EAAE;EAE3C,IAAI,WACF,WAAW,KACT,YAAY,iBAAiB,WAAW,gBAAgB,eAAe,EAAE,EAC3E;EAEF,IAAI,uBACF,WAAW,KAAK,eAAe,sBAAsB,EAAE;EAEzD,QAAQ,aAAa,WAAW,KAAK,IAAI;CAC3C,CAAC;AACH;AAEA,SAAS,iBACP,WACA,gBACA,iBACQ;CACR,IAAI,UAAU;CACd,IAAI,iBACF,UAAU,aAAa,WAAW,gBAAgB,eAAe;CAGnE,OAAO;AACT;AAQA,MAAM,gBAAgB,MAAM,sBAAsB;AAGlD,SAAgB,UACd,cACA,cACA,QACQ;CACR,sBAAsB,YAAY;CAClC,IAAI,WAAW;CACf,YAAY,YAAY,YAAY;CACpC,IAAI,aAAa,cACf,YAAY,iBACV,aAAa,cACb,QACA,aAAa,mBACf;CAEF,MAAM,UAAU;EACd,QAAQ,YAAY,YAAY;EAChC,OAAO,kBAAkB,YAAY;EACrC;EACA,OAAO,WAAW,YAAY,IAAI,gBAAgB,YAAY;EAC9D,YAAY,cAAc,YAAY;EACtC,mBAAmB,uBAAuB,YAAY;EACtD,UAAU,YAAY;EACtB,QAAQ,YAAY,YAAY;CAClC;CAEA,IAAI,SAAS;CACb,IAAI,aAAa,gBAAgB;EAC/B,MAAM,iBAAiB,aAAa;EACpC,SAASA,QAAiB,gBAAgB,SAAS,KAAK;EACxD,SAAS,OAAO,KAAK;EACrB,SAAS,OAAO,QAAQ,MAAM,UAAU,GAAG,MAAM;EACjD,MAAM,gBAAgB,SAAS,KAAK,UAAU,aAAa,SAAS,CAAC;EACrE,UAAU,wBAAwB,cAAc;EAChD,SAAS,SAAS,gBAAgB,QAAQ,OAAO,WAAW;EAE5D,IAAI,cAAc,gBAChB,SAAS,OAAO,QACd,eACA,iBAAiB,aAAa,gBAChC;CAEJ;CACA,OAAO;AACT"}
@@ -4,6 +4,7 @@ import { coerceString } from "../../../../../util/string.js";
4
4
  import { logger } from "../../../../../logger/index.js";
5
5
  import { buildCacheKey } from "../../../../../util/cache/package/key.js";
6
6
  import { isHttpUrl } from "../../../../../util/url.js";
7
+ import { isNotFound } from "../../../../../util/http/status.js";
7
8
  import { instrument } from "../../../../../instrumentation/index.js";
8
9
  import { detectPlatform } from "../../../../../util/common.js";
9
10
  import { get as get$1, set as set$1 } from "../../../../../util/cache/package/index.js";
@@ -27,7 +28,7 @@ async function getReleaseList(project, release, source) {
27
28
  try {
28
29
  return await source.getReleaseList(project, release);
29
30
  } catch (err) /* istanbul ignore next */ {
30
- if (err.statusCode === 404) logger.debug({
31
+ if (isNotFound(err)) logger.debug({
31
32
  repository,
32
33
  type,
33
34
  apiBaseUrl
@@ -163,7 +164,7 @@ async function getReleaseNotesMdFileInner(project, source) {
163
164
  try {
164
165
  return await source.getReleaseNotesMd(repository, apiBaseUrl, sourceDirectory);
165
166
  } catch (err) /* istanbul ignore next */ {
166
- if (err.statusCode === 404) logger.debug({
167
+ if (isNotFound(err)) logger.debug({
167
168
  repository,
168
169
  type,
169
170
  apiBaseUrl