renovate 40.0.0-next.40 → 40.0.0-next.41

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 (237) hide show
  1. package/dist/config/options/index.js +13 -0
  2. package/dist/config/options/index.js.map +1 -1
  3. package/dist/config/presets/common.js +1 -0
  4. package/dist/config/presets/common.js.map +1 -1
  5. package/dist/config/presets/internal/custom-managers.js +15 -0
  6. package/dist/config/presets/internal/custom-managers.js.map +1 -1
  7. package/dist/constants/platforms.js +5 -1
  8. package/dist/constants/platforms.js.map +1 -1
  9. package/dist/data/monorepo.json +3 -1
  10. package/dist/data-files.generated.js +2 -2
  11. package/dist/data-files.generated.js.map +1 -1
  12. package/dist/instrumentation/index.js +28 -8
  13. package/dist/instrumentation/index.js.map +1 -1
  14. package/dist/modules/datasource/api.js +2 -0
  15. package/dist/modules/datasource/api.js.map +1 -1
  16. package/dist/modules/datasource/azure-pipelines-tasks/index.js +4 -0
  17. package/dist/modules/datasource/azure-pipelines-tasks/index.js.map +1 -1
  18. package/dist/modules/datasource/azure-pipelines-tasks/schema.d.ts +8 -0
  19. package/dist/modules/datasource/azure-pipelines-tasks/schema.js +1 -0
  20. package/dist/modules/datasource/azure-pipelines-tasks/schema.js.map +1 -1
  21. package/dist/modules/datasource/bazel/index.js +18 -1
  22. package/dist/modules/datasource/bazel/index.js.map +1 -1
  23. package/dist/modules/datasource/bazel/schema.d.ts +1 -0
  24. package/dist/modules/datasource/bazel/schema.js.map +1 -1
  25. package/dist/modules/datasource/bitbucket-server-tags/index.d.ts +19 -0
  26. package/dist/modules/datasource/bitbucket-server-tags/index.js +133 -0
  27. package/dist/modules/datasource/bitbucket-server-tags/index.js.map +1 -0
  28. package/dist/modules/datasource/bitbucket-server-tags/schema.d.ts +28 -0
  29. package/dist/modules/datasource/bitbucket-server-tags/schema.js +13 -0
  30. package/dist/modules/datasource/bitbucket-server-tags/schema.js.map +1 -0
  31. package/dist/modules/datasource/conda/prefix-dev.js +1 -3
  32. package/dist/modules/datasource/conda/prefix-dev.js.map +1 -1
  33. package/dist/modules/datasource/cpan/index.js +1 -3
  34. package/dist/modules/datasource/cpan/index.js.map +1 -1
  35. package/dist/modules/datasource/custom/schema.d.ts +3 -3
  36. package/dist/modules/datasource/deb/index.d.ts +4 -5
  37. package/dist/modules/datasource/deb/index.js +8 -9
  38. package/dist/modules/datasource/deb/index.js.map +1 -1
  39. package/dist/modules/datasource/deb/url.d.ts +3 -3
  40. package/dist/modules/datasource/deb/url.js +17 -13
  41. package/dist/modules/datasource/deb/url.js.map +1 -1
  42. package/dist/modules/datasource/docker/schema.d.ts +72 -96
  43. package/dist/modules/datasource/github-runners/index.js +2 -2
  44. package/dist/modules/datasource/github-runners/index.js.map +1 -1
  45. package/dist/modules/datasource/metadata.js +9 -1
  46. package/dist/modules/datasource/metadata.js.map +1 -1
  47. package/dist/modules/datasource/npm/get.d.ts +0 -1
  48. package/dist/modules/datasource/npm/get.js +14 -68
  49. package/dist/modules/datasource/npm/get.js.map +1 -1
  50. package/dist/modules/datasource/npm/types.d.ts +0 -8
  51. package/dist/modules/datasource/npm/types.js.map +1 -1
  52. package/dist/modules/datasource/packagist/schema.d.ts +7 -7
  53. package/dist/modules/datasource/types.d.ts +1 -0
  54. package/dist/modules/datasource/types.js.map +1 -1
  55. package/dist/modules/manager/argocd/schema.d.ts +12 -12
  56. package/dist/modules/manager/bazel-module/parser/maven.d.ts +6 -52
  57. package/dist/modules/manager/bazel-module/parser/oci.d.ts +3 -26
  58. package/dist/modules/manager/bazel-module/rules.d.ts +15 -125
  59. package/dist/modules/manager/bun/extract.d.ts +1 -0
  60. package/dist/modules/manager/bun/extract.js +53 -27
  61. package/dist/modules/manager/bun/extract.js.map +1 -1
  62. package/dist/modules/manager/bun/index.js +1 -1
  63. package/dist/modules/manager/bun/index.js.map +1 -1
  64. package/dist/modules/manager/bun/utils.d.ts +2 -0
  65. package/dist/modules/manager/bun/utils.js +22 -0
  66. package/dist/modules/manager/bun/utils.js.map +1 -0
  67. package/dist/modules/manager/cargo/schema.d.ts +3 -3
  68. package/dist/modules/manager/circleci/extract.js +21 -30
  69. package/dist/modules/manager/circleci/extract.js.map +1 -1
  70. package/dist/modules/manager/circleci/schema.d.ts +33 -144
  71. package/dist/modules/manager/circleci/schema.js +21 -17
  72. package/dist/modules/manager/circleci/schema.js.map +1 -1
  73. package/dist/modules/manager/composer/schema.d.ts +6 -8
  74. package/dist/modules/manager/conan/artifacts.d.ts +2 -0
  75. package/dist/modules/manager/conan/artifacts.js +76 -0
  76. package/dist/modules/manager/conan/artifacts.js.map +1 -0
  77. package/dist/modules/manager/conan/index.d.ts +2 -0
  78. package/dist/modules/manager/conan/index.js +4 -1
  79. package/dist/modules/manager/conan/index.js.map +1 -1
  80. package/dist/modules/manager/devbox/artifacts.js +7 -0
  81. package/dist/modules/manager/devbox/artifacts.js.map +1 -1
  82. package/dist/modules/manager/dockerfile/extract.js +2 -6
  83. package/dist/modules/manager/dockerfile/extract.js.map +1 -1
  84. package/dist/modules/manager/fingerprint.generated.js +10 -10
  85. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  86. package/dist/modules/manager/flux/schema.d.ts +36 -60
  87. package/dist/modules/manager/gomod/artifacts-extra.js +12 -4
  88. package/dist/modules/manager/gomod/artifacts-extra.js.map +1 -1
  89. package/dist/modules/manager/gomod/update.js +3 -1
  90. package/dist/modules/manager/gomod/update.js.map +1 -1
  91. package/dist/modules/manager/gradle/extract.js +8 -13
  92. package/dist/modules/manager/gradle/extract.js.map +1 -1
  93. package/dist/modules/manager/gradle/parser/handlers.js +8 -0
  94. package/dist/modules/manager/gradle/parser/handlers.js.map +1 -1
  95. package/dist/modules/manager/gradle/parser/registry-urls.js +36 -10
  96. package/dist/modules/manager/gradle/parser/registry-urls.js.map +1 -1
  97. package/dist/modules/manager/gradle/types.d.ts +1 -0
  98. package/dist/modules/manager/gradle/types.js.map +1 -1
  99. package/dist/modules/manager/maven/extract.js +1 -3
  100. package/dist/modules/manager/maven/extract.js.map +1 -1
  101. package/dist/modules/manager/nix/schema.d.ts +14 -14
  102. package/dist/modules/manager/nix/schema.js +1 -0
  103. package/dist/modules/manager/nix/schema.js.map +1 -1
  104. package/dist/modules/manager/npm/extract/common/package-file.js +1 -0
  105. package/dist/modules/manager/npm/extract/common/package-file.js.map +1 -1
  106. package/dist/modules/manager/nuget/extract.js +21 -18
  107. package/dist/modules/manager/nuget/extract.js.map +1 -1
  108. package/dist/modules/manager/pep621/schema.d.ts +292 -5
  109. package/dist/modules/manager/pip_requirements/common.js +2 -6
  110. package/dist/modules/manager/pip_requirements/common.js.map +1 -1
  111. package/dist/modules/manager/pixi/artifacts.js +4 -10
  112. package/dist/modules/manager/pixi/artifacts.js.map +1 -1
  113. package/dist/modules/manager/pixi/extract.d.ts +2 -0
  114. package/dist/modules/manager/pixi/extract.js +81 -3
  115. package/dist/modules/manager/pixi/extract.js.map +1 -1
  116. package/dist/modules/manager/pixi/index.d.ts +0 -1
  117. package/dist/modules/manager/pixi/index.js +1 -3
  118. package/dist/modules/manager/pixi/index.js.map +1 -1
  119. package/dist/modules/manager/pixi/schema.d.ts +394 -3
  120. package/dist/modules/manager/pixi/schema.js +135 -2
  121. package/dist/modules/manager/pixi/schema.js.map +1 -1
  122. package/dist/modules/manager/sveltos/schema.d.ts +18 -30
  123. package/dist/modules/manager/terraform/util.js +1 -3
  124. package/dist/modules/manager/terraform/util.js.map +1 -1
  125. package/dist/modules/manager/vendir/schema.d.ts +3 -3
  126. package/dist/modules/platform/bitbucket/schema.d.ts +3 -3
  127. package/dist/modules/platform/bitbucket-server/schema.d.ts +1 -0
  128. package/dist/modules/platform/bitbucket-server/schema.js +2 -1
  129. package/dist/modules/platform/bitbucket-server/schema.js.map +1 -1
  130. package/dist/modules/platform/gerrit/client.d.ts +0 -3
  131. package/dist/modules/platform/gerrit/client.js +8 -28
  132. package/dist/modules/platform/gerrit/client.js.map +1 -1
  133. package/dist/modules/platform/gerrit/index.js +0 -6
  134. package/dist/modules/platform/gerrit/index.js.map +1 -1
  135. package/dist/modules/platform/gerrit/scm.js +5 -6
  136. package/dist/modules/platform/gerrit/scm.js.map +1 -1
  137. package/dist/modules/platform/gerrit/types.d.ts +1 -4
  138. package/dist/modules/platform/gerrit/types.js.map +1 -1
  139. package/dist/modules/platform/gerrit/utils.d.ts +3 -2
  140. package/dist/modules/platform/gerrit/utils.js +3 -7
  141. package/dist/modules/platform/gerrit/utils.js.map +1 -1
  142. package/dist/modules/platform/gitea/index.js +7 -9
  143. package/dist/modules/platform/gitea/index.js.map +1 -1
  144. package/dist/modules/platform/github/issue.d.ts +6 -6
  145. package/dist/modules/platform/github/schema.d.ts +52 -52
  146. package/dist/modules/platform/gitlab/index.js +2 -6
  147. package/dist/modules/platform/gitlab/index.js.map +1 -1
  148. package/dist/modules/versioning/distro.js +1 -3
  149. package/dist/modules/versioning/distro.js.map +1 -1
  150. package/dist/util/cache/package/types.d.ts +1 -1
  151. package/dist/util/cache/package/types.js.map +1 -1
  152. package/dist/util/cache/repository/impl/base.js +4 -0
  153. package/dist/util/cache/repository/impl/base.js.map +1 -1
  154. package/dist/util/common.d.ts +4 -2
  155. package/dist/util/common.js +17 -3
  156. package/dist/util/common.js.map +1 -1
  157. package/dist/util/exec/containerbase.js +2 -3
  158. package/dist/util/exec/containerbase.js.map +1 -1
  159. package/dist/util/git/auth.js +8 -5
  160. package/dist/util/git/auth.js.map +1 -1
  161. package/dist/util/git/index.js +2 -6
  162. package/dist/util/git/index.js.map +1 -1
  163. package/dist/util/git/private-key.js +1 -3
  164. package/dist/util/git/private-key.js.map +1 -1
  165. package/dist/util/git/types.d.ts +2 -0
  166. package/dist/util/git/types.js.map +1 -1
  167. package/dist/util/git/url.js +1 -1
  168. package/dist/util/git/url.js.map +1 -1
  169. package/dist/util/github/graphql/datasource-fetcher.js +3 -5
  170. package/dist/util/github/graphql/datasource-fetcher.js.map +1 -1
  171. package/dist/util/http/bitbucket-server.d.ts +2 -1
  172. package/dist/util/http/bitbucket-server.js +5 -3
  173. package/dist/util/http/bitbucket-server.js.map +1 -1
  174. package/dist/util/http/cache/package-http-cache-provider.d.ts +23 -0
  175. package/dist/util/http/cache/package-http-cache-provider.js +80 -0
  176. package/dist/util/http/cache/package-http-cache-provider.js.map +1 -0
  177. package/dist/util/http/host-rules.js +12 -0
  178. package/dist/util/http/host-rules.js.map +1 -1
  179. package/dist/util/schema-utils.d.ts +1 -0
  180. package/dist/util/schema-utils.js +43 -8
  181. package/dist/util/schema-utils.js.map +1 -1
  182. package/dist/util/string.d.ts +1 -0
  183. package/dist/util/string.js +4 -0
  184. package/dist/util/string.js.map +1 -1
  185. package/dist/util/yaml.js +2 -3
  186. package/dist/util/yaml.js.map +1 -1
  187. package/dist/workers/global/config/parse/index.js +10 -0
  188. package/dist/workers/global/config/parse/index.js.map +1 -1
  189. package/dist/workers/global/index.js +4 -2
  190. package/dist/workers/global/index.js.map +1 -1
  191. package/dist/workers/repository/process/lookup/index.js +2 -0
  192. package/dist/workers/repository/process/lookup/index.js.map +1 -1
  193. package/dist/workers/repository/process/lookup/timestamps.d.ts +18 -0
  194. package/dist/workers/repository/process/lookup/timestamps.js +69 -0
  195. package/dist/workers/repository/process/lookup/timestamps.js.map +1 -0
  196. package/dist/workers/repository/process/lookup/types.d.ts +1 -0
  197. package/dist/workers/repository/process/lookup/types.js.map +1 -1
  198. package/dist/workers/repository/process/lookup/utils.js +20 -9
  199. package/dist/workers/repository/process/lookup/utils.js.map +1 -1
  200. package/dist/workers/repository/process/sort.js +1 -1
  201. package/dist/workers/repository/process/sort.js.map +1 -1
  202. package/dist/workers/repository/reconfigure/utils.d.ts +2 -0
  203. package/dist/workers/repository/reconfigure/utils.js +16 -0
  204. package/dist/workers/repository/reconfigure/utils.js.map +1 -1
  205. package/dist/workers/repository/reconfigure/validate.js +5 -17
  206. package/dist/workers/repository/reconfigure/validate.js.map +1 -1
  207. package/dist/workers/repository/update/branch/auto-replace.js +25 -5
  208. package/dist/workers/repository/update/branch/auto-replace.js.map +1 -1
  209. package/dist/workers/repository/update/branch/commit.js +2 -0
  210. package/dist/workers/repository/update/branch/commit.js.map +1 -1
  211. package/dist/workers/repository/update/pr/body/config-description.js +26 -1
  212. package/dist/workers/repository/update/pr/body/config-description.js.map +1 -1
  213. package/dist/workers/repository/update/pr/body/index.js +21 -14
  214. package/dist/workers/repository/update/pr/body/index.js.map +1 -1
  215. package/dist/workers/repository/update/pr/changelog/api.js +8 -6
  216. package/dist/workers/repository/update/pr/changelog/api.js.map +1 -1
  217. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.d.ts +3 -0
  218. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.js +39 -0
  219. package/dist/workers/repository/update/pr/changelog/bitbucket-server/index.js.map +1 -0
  220. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.d.ts +8 -0
  221. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.js +31 -0
  222. package/dist/workers/repository/update/pr/changelog/bitbucket-server/source.js.map +1 -0
  223. package/dist/workers/repository/update/pr/changelog/release-notes.js +12 -8
  224. package/dist/workers/repository/update/pr/changelog/release-notes.js.map +1 -1
  225. package/dist/workers/repository/update/pr/changelog/source.d.ts +1 -1
  226. package/dist/workers/repository/update/pr/changelog/source.js.map +1 -1
  227. package/dist/workers/repository/update/pr/changelog/types.d.ts +1 -1
  228. package/dist/workers/repository/update/pr/changelog/types.js.map +1 -1
  229. package/dist/workers/repository/update/pr/index.js +2 -4
  230. package/dist/workers/repository/update/pr/index.js.map +1 -1
  231. package/dist/workers/repository/updates/generate.js +2 -0
  232. package/dist/workers/repository/updates/generate.js.map +1 -1
  233. package/package.json +40 -37
  234. package/renovate-schema.json +9 -2
  235. package/dist/modules/manager/pixi/lockfile.d.ts +0 -6
  236. package/dist/modules/manager/pixi/lockfile.js +0 -25
  237. package/dist/modules/manager/pixi/lockfile.js.map +0 -1
@@ -24,7 +24,8 @@ function addReplacementUpdateIfValid(updates, config) {
24
24
  function isReplacementRulesConfigured(config) {
25
25
  return (is_1.default.nonEmptyString(config.replacementName) ||
26
26
  is_1.default.nonEmptyString(config.replacementNameTemplate) ||
27
- is_1.default.nonEmptyString(config.replacementVersion));
27
+ is_1.default.nonEmptyString(config.replacementVersion) ||
28
+ is_1.default.nonEmptyString(config.replacementVersionTemplate));
28
29
  }
29
30
  function determineNewReplacementName(config) {
30
31
  if (config.replacementName) {
@@ -36,17 +37,27 @@ function determineNewReplacementName(config) {
36
37
  return config.packageName;
37
38
  }
38
39
  function determineNewReplacementValue(config) {
40
+ const newVersion = getNewVersion(config);
41
+ if (!newVersion) {
42
+ return config.currentValue;
43
+ }
39
44
  const versioningApi = allVersioning.get(config.versioning);
40
45
  const rangeStrategy = (0, manager_1.getRangeStrategy)(config);
46
+ return versioningApi.getNewValue({
47
+ // TODO #22198
48
+ currentValue: config.currentValue,
49
+ newVersion,
50
+ rangeStrategy: rangeStrategy,
51
+ isReplacement: true,
52
+ });
53
+ }
54
+ function getNewVersion(config) {
41
55
  if (!is_1.default.nullOrUndefined(config.replacementVersion)) {
42
- return versioningApi.getNewValue({
43
- // TODO #22198
44
- currentValue: config.currentValue,
45
- newVersion: config.replacementVersion,
46
- rangeStrategy: rangeStrategy,
47
- isReplacement: true,
48
- });
56
+ return config.replacementVersion;
57
+ }
58
+ if (!is_1.default.nullOrUndefined(config.replacementVersionTemplate)) {
59
+ return template.compile(config.replacementVersionTemplate, config, true);
49
60
  }
50
- return config.currentValue;
61
+ return null;
51
62
  }
52
63
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/process/lookup/utils.ts"],"names":[],"mappings":";;AAQA,kEAiBC;AAED,oEAQC;AAED,kEAUC;AAED,oEAiBC;;AAlED,kEAAkC;AAElC,yDAA+D;AAE/D,sFAAgE;AAChE,4EAAsD;AAGtD,SAAgB,2BAA2B,CACzC,OAAuB,EACvB,MAA0B;IAE1B,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAEjE,IACE,MAAM,CAAC,WAAW,KAAK,kBAAkB;QACzC,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,mBAAoB;SAC/B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA0B;IAE1B,OAAO,CACL,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC;QACzC,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,uBAAuB,CAAC;QACjD,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAC7C,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,MAA0B;IAE1B,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA0B;IAE1B,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAA,0BAAgB,EAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC,YAAE,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnD,OAAO,aAAa,CAAC,WAAW,CAAC;YAC/B,cAAc;YACd,YAAY,EAAE,MAAM,CAAC,YAAa;YAClC,UAAU,EAAE,MAAM,CAAC,kBAAkB;YACrC,aAAa,EAAE,aAAc;YAC7B,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,YAAY,CAAC;AAC7B,CAAC","sourcesContent":["import is from '@sindresorhus/is';\n\nimport { getRangeStrategy } from '../../../../modules/manager';\nimport type { LookupUpdate } from '../../../../modules/manager/types';\nimport * as allVersioning from '../../../../modules/versioning';\nimport * as template from '../../../../util/template';\nimport type { LookupUpdateConfig } from './types';\n\nexport function addReplacementUpdateIfValid(\n updates: LookupUpdate[],\n config: LookupUpdateConfig,\n): void {\n const replacementNewName = determineNewReplacementName(config);\n const replacementNewValue = determineNewReplacementValue(config);\n\n if (\n config.packageName !== replacementNewName ||\n config.currentValue !== replacementNewValue\n ) {\n updates.push({\n updateType: 'replacement',\n newName: replacementNewName,\n newValue: replacementNewValue!,\n });\n }\n}\n\nexport function isReplacementRulesConfigured(\n config: LookupUpdateConfig,\n): boolean {\n return (\n is.nonEmptyString(config.replacementName) ||\n is.nonEmptyString(config.replacementNameTemplate) ||\n is.nonEmptyString(config.replacementVersion)\n );\n}\n\nexport function determineNewReplacementName(\n config: LookupUpdateConfig,\n): string {\n if (config.replacementName) {\n return config.replacementName;\n }\n if (config.replacementNameTemplate) {\n return template.compile(config.replacementNameTemplate, config, true);\n }\n return config.packageName;\n}\n\nexport function determineNewReplacementValue(\n config: LookupUpdateConfig,\n): string | undefined | null {\n const versioningApi = allVersioning.get(config.versioning);\n const rangeStrategy = getRangeStrategy(config);\n\n if (!is.nullOrUndefined(config.replacementVersion)) {\n return versioningApi.getNewValue({\n // TODO #22198\n currentValue: config.currentValue!,\n newVersion: config.replacementVersion,\n rangeStrategy: rangeStrategy!,\n isReplacement: true,\n });\n }\n\n return config.currentValue;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/process/lookup/utils.ts"],"names":[],"mappings":";;AAQA,kEAiBC;AAED,oEASC;AAED,kEAUC;AAED,oEAkBC;;AApED,kEAAkC;AAElC,yDAA+D;AAE/D,sFAAgE;AAChE,4EAAsD;AAGtD,SAAgB,2BAA2B,CACzC,OAAuB,EACvB,MAA0B;IAE1B,MAAM,kBAAkB,GAAG,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAEjE,IACE,MAAM,CAAC,WAAW,KAAK,kBAAkB;QACzC,MAAM,CAAC,YAAY,KAAK,mBAAmB,EAC3C,CAAC;QACD,OAAO,CAAC,IAAI,CAAC;YACX,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,kBAAkB;YAC3B,QAAQ,EAAE,mBAAoB;SAC/B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA0B;IAE1B,OAAO,CACL,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC;QACzC,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,uBAAuB,CAAC;QACjD,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,kBAAkB,CAAC;QAC5C,YAAE,CAAC,cAAc,CAAC,MAAM,CAAC,0BAA0B,CAAC,CACrD,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,MAA0B;IAE1B,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA0B;IAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,MAAM,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3D,MAAM,aAAa,GAAG,IAAA,0BAAgB,EAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,aAAa,CAAC,WAAW,CAAC;QAC/B,cAAc;QACd,YAAY,EAAE,MAAM,CAAC,YAAa;QAClC,UAAU;QACV,aAAa,EAAE,aAAc;QAC7B,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAA0B;IAC/C,IAAI,CAAC,YAAE,CAAC,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,kBAAkB,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,YAAE,CAAC,eAAe,CAAC,MAAM,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC3D,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import is from '@sindresorhus/is';\n\nimport { getRangeStrategy } from '../../../../modules/manager';\nimport type { LookupUpdate } from '../../../../modules/manager/types';\nimport * as allVersioning from '../../../../modules/versioning';\nimport * as template from '../../../../util/template';\nimport type { LookupUpdateConfig } from './types';\n\nexport function addReplacementUpdateIfValid(\n updates: LookupUpdate[],\n config: LookupUpdateConfig,\n): void {\n const replacementNewName = determineNewReplacementName(config);\n const replacementNewValue = determineNewReplacementValue(config);\n\n if (\n config.packageName !== replacementNewName ||\n config.currentValue !== replacementNewValue\n ) {\n updates.push({\n updateType: 'replacement',\n newName: replacementNewName,\n newValue: replacementNewValue!,\n });\n }\n}\n\nexport function isReplacementRulesConfigured(\n config: LookupUpdateConfig,\n): boolean {\n return (\n is.nonEmptyString(config.replacementName) ||\n is.nonEmptyString(config.replacementNameTemplate) ||\n is.nonEmptyString(config.replacementVersion) ||\n is.nonEmptyString(config.replacementVersionTemplate)\n );\n}\n\nexport function determineNewReplacementName(\n config: LookupUpdateConfig,\n): string {\n if (config.replacementName) {\n return config.replacementName;\n }\n if (config.replacementNameTemplate) {\n return template.compile(config.replacementNameTemplate, config, true);\n }\n return config.packageName;\n}\n\nexport function determineNewReplacementValue(\n config: LookupUpdateConfig,\n): string | undefined | null {\n const newVersion = getNewVersion(config);\n if (!newVersion) {\n return config.currentValue;\n }\n\n const versioningApi = allVersioning.get(config.versioning);\n const rangeStrategy = getRangeStrategy(config);\n\n return versioningApi.getNewValue({\n // TODO #22198\n currentValue: config.currentValue!,\n newVersion,\n rangeStrategy: rangeStrategy!,\n isReplacement: true,\n });\n}\n\nfunction getNewVersion(config: LookupUpdateConfig): string | null {\n if (!is.nullOrUndefined(config.replacementVersion)) {\n return config.replacementVersion;\n }\n if (!is.nullOrUndefined(config.replacementVersionTemplate)) {\n return template.compile(config.replacementVersionTemplate, config, true);\n }\n return null;\n}\n"]}
@@ -32,7 +32,7 @@ function sortBranches(branches) {
32
32
  }
33
33
  // TODO #22198
34
34
  // Sort by prTitle if updateType is the same
35
- return a.prTitle < b.prTitle ? -1 : 1;
35
+ return a.prTitle.localeCompare(b.prTitle, undefined, { numeric: true });
36
36
  });
37
37
  }
38
38
  function getPrPriority(branch) {
@@ -1 +1 @@
1
- {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../lib/workers/repository/process/sort.ts"],"names":[],"mappings":";;AAGA,oCAkCC;AArCD,4CAAyC;AAGzC,SAAgB,YAAY,CAAC,QAAiC;IAC5D,gBAAgB;IAChB,MAAM,SAAS,GAAG;QAChB,KAAK;QACL,QAAQ;QACR,OAAO;QACP,OAAO;QACP,OAAO;QACP,qBAAqB;KACtB,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,cAAc;QACd,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,cAAc;QACd,MAAM,QAAQ,GACZ,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,UAAW,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,UAAW,CAAC,CAAC;QACtE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,cAAc;QACd,4CAA4C;QAC5C,OAAO,CAAC,CAAC,OAAQ,GAAG,CAAC,CAAC,OAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,OAAO,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport type { BranchConfig } from '../../types';\n\nexport function sortBranches(branches: Partial<BranchConfig>[]): void {\n // Sort branches\n const sortOrder = [\n 'pin',\n 'digest',\n 'patch',\n 'minor',\n 'major',\n 'lockFileMaintenance',\n ];\n logger.trace({ branches }, 'branches');\n branches.sort((a, b) => {\n if (a.isVulnerabilityAlert && !b.isVulnerabilityAlert) {\n return -1;\n }\n if (!a.isVulnerabilityAlert && b.isVulnerabilityAlert) {\n return 1;\n }\n\n // TODO #22198\n const prPriorityDiff = getPrPriority(b) - getPrPriority(a);\n if (prPriorityDiff !== 0) {\n return prPriorityDiff;\n }\n // TODO #22198\n const sortDiff =\n sortOrder.indexOf(a.updateType!) - sortOrder.indexOf(b.updateType!);\n if (sortDiff !== 0) {\n return sortDiff;\n }\n // TODO #22198\n // Sort by prTitle if updateType is the same\n return a.prTitle! < b.prTitle! ? -1 : 1;\n });\n}\n\nfunction getPrPriority(branch: Partial<BranchConfig>): number {\n return branch.prPriority ?? 0;\n}\n"]}
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../../../lib/workers/repository/process/sort.ts"],"names":[],"mappings":";;AAGA,oCAkCC;AArCD,4CAAyC;AAGzC,SAAgB,YAAY,CAAC,QAAiC;IAC5D,gBAAgB;IAChB,MAAM,SAAS,GAAG;QAChB,KAAK;QACL,QAAQ;QACR,OAAO;QACP,OAAO;QACP,OAAO;QACP,qBAAqB;KACtB,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrB,IAAI,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,oBAAoB,EAAE,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,cAAc;QACd,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC3D,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,cAAc;QACd,MAAM,QAAQ,GACZ,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,UAAW,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,UAAW,CAAC,CAAC;QACtE,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,cAAc;QACd,4CAA4C;QAC5C,OAAO,CAAC,CAAC,OAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,OAAQ,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,MAA6B;IAClD,OAAO,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { logger } from '../../../logger';\nimport type { BranchConfig } from '../../types';\n\nexport function sortBranches(branches: Partial<BranchConfig>[]): void {\n // Sort branches\n const sortOrder = [\n 'pin',\n 'digest',\n 'patch',\n 'minor',\n 'major',\n 'lockFileMaintenance',\n ];\n logger.trace({ branches }, 'branches');\n branches.sort((a, b) => {\n if (a.isVulnerabilityAlert && !b.isVulnerabilityAlert) {\n return -1;\n }\n if (!a.isVulnerabilityAlert && b.isVulnerabilityAlert) {\n return 1;\n }\n\n // TODO #22198\n const prPriorityDiff = getPrPriority(b) - getPrPriority(a);\n if (prPriorityDiff !== 0) {\n return prPriorityDiff;\n }\n // TODO #22198\n const sortDiff =\n sortOrder.indexOf(a.updateType!) - sortOrder.indexOf(b.updateType!);\n if (sortDiff !== 0) {\n return sortDiff;\n }\n // TODO #22198\n // Sort by prTitle if updateType is the same\n return a.prTitle!.localeCompare(b.prTitle!, undefined, { numeric: true });\n });\n}\n\nfunction getPrPriority(branch: Partial<BranchConfig>): number {\n return branch.prPriority ?? 0;\n}\n"]}
@@ -1 +1,3 @@
1
+ import type { BranchStatus } from '../../../types';
1
2
  export declare function getReconfigureBranchName(prefix: string): string;
3
+ export declare function setBranchStatus(branchName: string, description: string, state: BranchStatus, context?: string | null): Promise<void>;
@@ -1,7 +1,23 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getReconfigureBranchName = getReconfigureBranchName;
4
+ exports.setBranchStatus = setBranchStatus;
5
+ const tslib_1 = require("tslib");
6
+ const is_1 = tslib_1.__importDefault(require("@sindresorhus/is"));
7
+ const platform_1 = require("../../../modules/platform");
4
8
  function getReconfigureBranchName(prefix) {
5
9
  return `${prefix}reconfigure`;
6
10
  }
11
+ async function setBranchStatus(branchName, description, state, context) {
12
+ if (!is_1.default.nonEmptyString(context)) {
13
+ // already logged this case when validating the status check
14
+ return;
15
+ }
16
+ await platform_1.platform.setBranchStatus({
17
+ branchName,
18
+ context,
19
+ description,
20
+ state,
21
+ });
22
+ }
7
23
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/workers/repository/reconfigure/utils.ts"],"names":[],"mappings":";;AAAA,4DAEC;AAFD,SAAgB,wBAAwB,CAAC,MAAc;IACrD,OAAO,GAAG,MAAM,aAAa,CAAC;AAChC,CAAC","sourcesContent":["export function getReconfigureBranchName(prefix: string): string {\n return `${prefix}reconfigure`;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../lib/workers/repository/reconfigure/utils.ts"],"names":[],"mappings":";;AAIA,4DAEC;AAED,0CAiBC;;AAzBD,kEAAkC;AAClC,wDAAqD;AAGrD,SAAgB,wBAAwB,CAAC,MAAc;IACrD,OAAO,GAAG,MAAM,aAAa,CAAC;AAChC,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,WAAmB,EACnB,KAAmB,EACnB,OAAuB;IAEvB,IAAI,CAAC,YAAE,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,4DAA4D;QAC5D,OAAO;IACT,CAAC;IAED,MAAM,mBAAQ,CAAC,eAAe,CAAC;QAC7B,UAAU;QACV,OAAO;QACP,WAAW;QACX,KAAK;KACN,CAAC,CAAC;AACL,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { platform } from '../../../modules/platform';\nimport type { BranchStatus } from '../../../types';\n\nexport function getReconfigureBranchName(prefix: string): string {\n return `${prefix}reconfigure`;\n}\n\nexport async function setBranchStatus(\n branchName: string,\n description: string,\n state: BranchStatus,\n context?: string | null,\n): Promise<void> {\n if (!is.nonEmptyString(context)) {\n // already logged this case when validating the status check\n return;\n }\n\n await platform.setBranchStatus({\n branchName,\n context,\n description,\n state,\n });\n}\n"]}
@@ -17,18 +17,6 @@ const regex_1 = require("../../../util/regex");
17
17
  const merge_1 = require("../init/merge");
18
18
  const reconfigure_cache_1 = require("./reconfigure-cache");
19
19
  const utils_1 = require("./utils");
20
- async function setBranchStatus(branchName, description, state, context) {
21
- if (!is_1.default.nonEmptyString(context)) {
22
- // already logged this case when validating the status check
23
- return;
24
- }
25
- await platform_1.platform.setBranchStatus({
26
- branchName,
27
- context,
28
- description,
29
- state,
30
- });
31
- }
32
20
  async function validateReconfigureBranch(config) {
33
21
  logger_1.logger.debug('validateReconfigureBranch()');
34
22
  const context = config.statusCheckNames?.configValidation;
@@ -65,7 +53,7 @@ async function validateReconfigureBranch(config) {
65
53
  }
66
54
  if (!is_1.default.nonEmptyString(configFileName)) {
67
55
  logger_1.logger.warn('No config file found in reconfigure branch');
68
- await setBranchStatus(branchName, 'Validation Failed - No config file found', 'red', context);
56
+ await (0, utils_1.setBranchStatus)(branchName, 'Validation Failed - No config file found', 'red', context);
69
57
  (0, reconfigure_cache_1.setReconfigureBranchCache)(branchSha, false);
70
58
  await scm_1.scm.checkoutBranch(config.defaultBranch);
71
59
  return;
@@ -79,7 +67,7 @@ async function validateReconfigureBranch(config) {
79
67
  }
80
68
  if (!is_1.default.nonEmptyString(configFileRaw)) {
81
69
  logger_1.logger.warn('Empty or invalid config file');
82
- await setBranchStatus(branchName, 'Validation Failed - Empty/Invalid config file', 'red', context);
70
+ await (0, utils_1.setBranchStatus)(branchName, 'Validation Failed - Empty/Invalid config file', 'red', context);
83
71
  (0, reconfigure_cache_1.setReconfigureBranchCache)(branchSha, false);
84
72
  await scm_1.scm.checkoutBranch(config.baseBranch);
85
73
  return;
@@ -94,7 +82,7 @@ async function validateReconfigureBranch(config) {
94
82
  }
95
83
  catch (err) {
96
84
  logger_1.logger.error({ err }, 'Error while parsing config file');
97
- await setBranchStatus(branchName, 'Validation Failed - Unparsable config file', 'red', context);
85
+ await (0, utils_1.setBranchStatus)(branchName, 'Validation Failed - Unparsable config file', 'red', context);
98
86
  (0, reconfigure_cache_1.setReconfigureBranchCache)(branchSha, false);
99
87
  await scm_1.scm.checkoutBranch(config.baseBranch);
100
88
  return;
@@ -125,13 +113,13 @@ async function validateReconfigureBranch(config) {
125
113
  content: body,
126
114
  });
127
115
  }
128
- await setBranchStatus(branchName, 'Validation Failed', 'red', context);
116
+ await (0, utils_1.setBranchStatus)(branchName, 'Validation Failed', 'red', context);
129
117
  (0, reconfigure_cache_1.setReconfigureBranchCache)(branchSha, false);
130
118
  await scm_1.scm.checkoutBranch(config.baseBranch);
131
119
  return;
132
120
  }
133
121
  // passing check
134
- await setBranchStatus(branchName, 'Validation Successful', 'green', context);
122
+ await (0, utils_1.setBranchStatus)(branchName, 'Validation Successful', 'green', context);
135
123
  (0, reconfigure_cache_1.setReconfigureBranchCache)(branchSha, true);
136
124
  await scm_1.scm.checkoutBranch(config.baseBranch);
137
125
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../lib/workers/repository/reconfigure/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport JSON5 from 'json5';\nimport { massageConfig } from '../../../config/massage';\nimport type { RenovateConfig } from '../../../config/types';\nimport { validateConfig } from '../../../config/validation';\nimport { logger } from '../../../logger';\nimport { platform } from '../../../modules/platform';\nimport { ensureComment } from '../../../modules/platform/comment';\nimport { scm } from '../../../modules/platform/scm';\nimport type { BranchStatus } from '../../../types';\nimport { getCache } from '../../../util/cache/repository';\nimport { readLocalFile } from '../../../util/fs';\nimport { getBranchCommit } from '../../../util/git';\nimport { regEx } from '../../../util/regex';\nimport { detectConfigFile } from '../init/merge';\nimport { setReconfigureBranchCache } from './reconfigure-cache';\nimport { getReconfigureBranchName } from './utils';\n\nasync function setBranchStatus(\n branchName: string,\n description: string,\n state: BranchStatus,\n context?: string | null,\n): Promise<void> {\n if (!is.nonEmptyString(context)) {\n // already logged this case when validating the status check\n return;\n }\n\n await platform.setBranchStatus({\n branchName,\n context,\n description,\n state,\n });\n}\n\nexport async function validateReconfigureBranch(\n config: RenovateConfig,\n): Promise<void> {\n logger.debug('validateReconfigureBranch()');\n\n const context = config.statusCheckNames?.configValidation;\n const branchName = getReconfigureBranchName(config.branchPrefix!);\n\n // look for config file\n // 1. check reconfigure branch cache and use the configFileName if it exists\n // 2. checkout reconfigure branch and look for the config file, don't assume default configFileName\n const branchSha = getBranchCommit(branchName)!;\n const cache = getCache();\n let configFileName: string | null = null;\n const reconfigureCache = cache.reconfigureBranchCache;\n // only use valid cached information\n if (reconfigureCache?.reconfigureBranchSha === branchSha) {\n logger.debug('Skipping validation check as branch sha is unchanged');\n return;\n }\n\n if (context) {\n const validationStatus = await platform.getBranchStatusCheck(\n branchName,\n context,\n );\n\n // if old status check is present skip validation\n if (is.nonEmptyString(validationStatus)) {\n logger.debug(\n 'Skipping validation check because status check already exists.',\n );\n return;\n }\n } else {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n }\n\n try {\n await scm.checkoutBranch(branchName);\n configFileName = await detectConfigFile();\n } catch (err) {\n logger.error(\n { err },\n 'Error while searching for config file in reconfigure branch',\n );\n }\n\n if (!is.nonEmptyString(configFileName)) {\n logger.warn('No config file found in reconfigure branch');\n await setBranchStatus(\n branchName,\n 'Validation Failed - No config file found',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.defaultBranch!);\n return;\n }\n\n let configFileRaw: string | null = null;\n try {\n configFileRaw = await readLocalFile(configFileName, 'utf8');\n } catch (err) {\n logger.error({ err }, 'Error while reading config file');\n }\n\n if (!is.nonEmptyString(configFileRaw)) {\n logger.warn('Empty or invalid config file');\n await setBranchStatus(\n branchName,\n 'Validation Failed - Empty/Invalid config file',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n let configFileParsed: any;\n try {\n configFileParsed = JSON5.parse(configFileRaw);\n // no need to confirm renovate field in package.json we already do it in `detectConfigFile()`\n if (configFileName === 'package.json') {\n configFileParsed = configFileParsed.renovate;\n }\n } catch (err) {\n logger.error({ err }, 'Error while parsing config file');\n await setBranchStatus(\n branchName,\n 'Validation Failed - Unparsable config file',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n // perform validation and provide a passing or failing check based on result\n const massagedConfig = massageConfig(configFileParsed);\n const validationResult = await validateConfig('repo', massagedConfig);\n\n // failing check\n if (validationResult.errors.length > 0) {\n logger.debug(\n { errors: validationResult.errors.map((err) => err.message).join(', ') },\n 'Validation Errors',\n );\n\n const reconfigurePr = await platform.findPr({\n branchName,\n state: 'open',\n includeOtherAuthors: true,\n targetBranch: config.defaultBranch,\n });\n\n // add comment to reconfigure PR if it exists\n if (reconfigurePr) {\n let body = `There is an error with this repository's Renovate configuration that needs to be fixed.\\n\\n`;\n body += `Location: \\`${configFileName}\\`\\n`;\n body += `Message: \\`${validationResult.errors\n .map((e) => e.message)\n .join(', ')\n .replace(regEx(/`/g), \"'\")}\\`\\n`;\n\n await ensureComment({\n number: reconfigurePr.number,\n topic: 'Action Required: Fix Renovate Configuration',\n content: body,\n });\n }\n\n await setBranchStatus(branchName, 'Validation Failed', 'red', context);\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n // passing check\n await setBranchStatus(branchName, 'Validation Successful', 'green', context);\n\n setReconfigureBranchCache(branchSha, true);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n}\n"]}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../../lib/workers/repository/reconfigure/validate.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport JSON5 from 'json5';\nimport { massageConfig } from '../../../config/massage';\nimport type { RenovateConfig } from '../../../config/types';\nimport { validateConfig } from '../../../config/validation';\nimport { logger } from '../../../logger';\nimport { platform } from '../../../modules/platform';\nimport { ensureComment } from '../../../modules/platform/comment';\nimport { scm } from '../../../modules/platform/scm';\nimport { getCache } from '../../../util/cache/repository';\nimport { readLocalFile } from '../../../util/fs';\nimport { getBranchCommit } from '../../../util/git';\nimport { regEx } from '../../../util/regex';\nimport { detectConfigFile } from '../init/merge';\nimport { setReconfigureBranchCache } from './reconfigure-cache';\nimport { getReconfigureBranchName, setBranchStatus } from './utils';\n\nexport async function validateReconfigureBranch(\n config: RenovateConfig,\n): Promise<void> {\n logger.debug('validateReconfigureBranch()');\n\n const context = config.statusCheckNames?.configValidation;\n const branchName = getReconfigureBranchName(config.branchPrefix!);\n\n // look for config file\n // 1. check reconfigure branch cache and use the configFileName if it exists\n // 2. checkout reconfigure branch and look for the config file, don't assume default configFileName\n const branchSha = getBranchCommit(branchName)!;\n const cache = getCache();\n let configFileName: string | null = null;\n const reconfigureCache = cache.reconfigureBranchCache;\n // only use valid cached information\n if (reconfigureCache?.reconfigureBranchSha === branchSha) {\n logger.debug('Skipping validation check as branch sha is unchanged');\n return;\n }\n\n if (context) {\n const validationStatus = await platform.getBranchStatusCheck(\n branchName,\n context,\n );\n\n // if old status check is present skip validation\n if (is.nonEmptyString(validationStatus)) {\n logger.debug(\n 'Skipping validation check because status check already exists.',\n );\n return;\n }\n } else {\n logger.debug(\n 'Status check is null or an empty string, skipping status check addition.',\n );\n }\n\n try {\n await scm.checkoutBranch(branchName);\n configFileName = await detectConfigFile();\n } catch (err) {\n logger.error(\n { err },\n 'Error while searching for config file in reconfigure branch',\n );\n }\n\n if (!is.nonEmptyString(configFileName)) {\n logger.warn('No config file found in reconfigure branch');\n await setBranchStatus(\n branchName,\n 'Validation Failed - No config file found',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.defaultBranch!);\n return;\n }\n\n let configFileRaw: string | null = null;\n try {\n configFileRaw = await readLocalFile(configFileName, 'utf8');\n } catch (err) {\n logger.error({ err }, 'Error while reading config file');\n }\n\n if (!is.nonEmptyString(configFileRaw)) {\n logger.warn('Empty or invalid config file');\n await setBranchStatus(\n branchName,\n 'Validation Failed - Empty/Invalid config file',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n let configFileParsed: any;\n try {\n configFileParsed = JSON5.parse(configFileRaw);\n // no need to confirm renovate field in package.json we already do it in `detectConfigFile()`\n if (configFileName === 'package.json') {\n configFileParsed = configFileParsed.renovate;\n }\n } catch (err) {\n logger.error({ err }, 'Error while parsing config file');\n await setBranchStatus(\n branchName,\n 'Validation Failed - Unparsable config file',\n 'red',\n context,\n );\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n // perform validation and provide a passing or failing check based on result\n const massagedConfig = massageConfig(configFileParsed);\n const validationResult = await validateConfig('repo', massagedConfig);\n\n // failing check\n if (validationResult.errors.length > 0) {\n logger.debug(\n { errors: validationResult.errors.map((err) => err.message).join(', ') },\n 'Validation Errors',\n );\n\n const reconfigurePr = await platform.findPr({\n branchName,\n state: 'open',\n includeOtherAuthors: true,\n targetBranch: config.defaultBranch,\n });\n\n // add comment to reconfigure PR if it exists\n if (reconfigurePr) {\n let body = `There is an error with this repository's Renovate configuration that needs to be fixed.\\n\\n`;\n body += `Location: \\`${configFileName}\\`\\n`;\n body += `Message: \\`${validationResult.errors\n .map((e) => e.message)\n .join(', ')\n .replace(regEx(/`/g), \"'\")}\\`\\n`;\n\n await ensureComment({\n number: reconfigurePr.number,\n topic: 'Action Required: Fix Renovate Configuration',\n content: body,\n });\n }\n\n await setBranchStatus(branchName, 'Validation Failed', 'red', context);\n setReconfigureBranchCache(branchSha, false);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n }\n\n // passing check\n await setBranchStatus(branchName, 'Validation Successful', 'green', context);\n\n setReconfigureBranchCache(branchSha, true);\n await scm.checkoutBranch(config.baseBranch!);\n return;\n}\n"]}
@@ -94,6 +94,15 @@ function getDepsSignature(deps) {
94
94
  dep.depName)}`)
95
95
  .join(',');
96
96
  }
97
+ function firstIndexOf(existingContent, depName, currentValue, position = 0) {
98
+ const depIndex = existingContent.indexOf(depName, position);
99
+ const valIndex = existingContent.indexOf(currentValue, position);
100
+ const index = depIndex < valIndex ? depIndex : valIndex;
101
+ if (index < 0) {
102
+ return position === 0 ? -1 : existingContent.length;
103
+ }
104
+ return index;
105
+ }
97
106
  async function checkBranchDepsMatchBaseDeps(upgrade, branchContent) {
98
107
  const { baseDeps, manager, packageFile } = upgrade;
99
108
  try {
@@ -138,9 +147,7 @@ async function doAutoReplace(upgrade, existingContent, reuseExistingBranch, firs
138
147
  logger_1.logger.trace({ depName, replaceString }, 'autoReplace replaceString');
139
148
  let searchIndex;
140
149
  if (replaceWithoutReplaceString) {
141
- const depIndex = existingContent.indexOf(depName);
142
- const valIndex = existingContent.indexOf(currentValue);
143
- searchIndex = depIndex < valIndex ? depIndex : valIndex;
150
+ searchIndex = firstIndexOf(existingContent, depName, currentValue);
144
151
  }
145
152
  else {
146
153
  searchIndex = existingContent.indexOf(replaceString);
@@ -201,8 +208,8 @@ async function doAutoReplace(upgrade, existingContent, reuseExistingBranch, firs
201
208
  if (newName && (0, string_1.matchAt)(newContent, searchIndex, depName)) {
202
209
  logger_1.logger.debug({ packageFile, depName }, `Found depName at index ${searchIndex}`);
203
210
  if (nameReplaced) {
204
- startIndex += 1;
205
- searchIndex = startIndex;
211
+ startIndex = firstIndexOf(existingContent, depName, currentValue, startIndex + 1);
212
+ searchIndex = startIndex - 1;
206
213
  await (0, fs_1.writeLocalFile)(upgrade.packageFile, existingContent);
207
214
  newContent = existingContent;
208
215
  nameReplaced = false;
@@ -213,19 +220,32 @@ async function doAutoReplace(upgrade, existingContent, reuseExistingBranch, firs
213
220
  newContent = (0, string_1.replaceAt)(newContent, searchIndex, depName, newName);
214
221
  await (0, fs_1.writeLocalFile)(upgrade.packageFile, newContent);
215
222
  nameReplaced = true;
223
+ searchIndex += newName.length - 1;
216
224
  }
217
225
  else if (newValue &&
218
226
  (0, string_1.matchAt)(newContent, searchIndex, currentValue)) {
219
227
  logger_1.logger.debug({ packageFile, currentValue }, `Found currentValue at index ${searchIndex}`);
228
+ if (valueReplaced) {
229
+ startIndex = firstIndexOf(existingContent, depName, currentValue, startIndex + 1);
230
+ searchIndex = startIndex - 1;
231
+ await (0, fs_1.writeLocalFile)(upgrade.packageFile, existingContent);
232
+ newContent = existingContent;
233
+ nameReplaced = false;
234
+ valueReplaced = false;
235
+ continue;
236
+ }
220
237
  // Now test if the result matches
221
238
  newContent = (0, string_1.replaceAt)(newContent, searchIndex, currentValue, newValue);
222
239
  await (0, fs_1.writeLocalFile)(upgrade.packageFile, newContent);
223
240
  valueReplaced = true;
241
+ searchIndex += newValue.length - 1;
224
242
  }
225
243
  if (nameReplaced && valueReplaced) {
226
244
  if (await confirmIfDepUpdated(upgrade, newContent)) {
227
245
  return newContent;
228
246
  }
247
+ startIndex = firstIndexOf(existingContent, depName, currentValue, startIndex + 1);
248
+ searchIndex = startIndex - 1;
229
249
  await (0, fs_1.writeLocalFile)(upgrade.packageFile, existingContent);
230
250
  newContent = existingContent;
231
251
  nameReplaced = false;
@@ -1 +1 @@
1
- {"version":3,"file":"auto-replace.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/auto-replace.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO #22198\nimport is from '@sindresorhus/is';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { extractPackageFile } from '../../../../modules/manager';\nimport type { PackageDependency } from '../../../../modules/manager/types';\nimport { writeLocalFile } from '../../../../util/fs';\nimport { escapeRegExp, regEx } from '../../../../util/regex';\nimport { matchAt, replaceAt } from '../../../../util/string';\nimport { compile } from '../../../../util/template';\nimport type { BranchUpgradeConfig } from '../../../types';\n\nexport async function confirmIfDepUpdated(\n upgrade: BranchUpgradeConfig,\n newContent: string,\n): Promise<boolean> {\n const { manager, packageFile, depIndex } = upgrade;\n let newUpgrade: PackageDependency;\n try {\n const newExtract = await extractPackageFile(\n manager,\n newContent,\n packageFile!,\n upgrade,\n );\n // istanbul ignore if\n if (!newExtract) {\n // TODO: fix types (#22198)\n logger.debug(\n `Could not extract ${packageFile!} (manager=${manager}) after autoreplace. Did the autoreplace make the file unparseable?`,\n );\n logger.trace(\n { packageFile, content: newContent },\n 'packageFile content after autoreplace',\n );\n return false;\n }\n // istanbul ignore if\n if (!newExtract.deps?.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has no deps array. Did the autoreplace make the file unparseable?`,\n );\n return false;\n }\n // istanbul ignore if\n if (is.number(depIndex) && depIndex >= newExtract.deps.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has fewer deps than expected.`,\n );\n return false;\n }\n newUpgrade = newExtract.deps[depIndex!];\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ manager, packageFile, err }, 'Failed to parse newContent');\n }\n\n if (!newUpgrade!) {\n logger.debug(`No newUpgrade in ${packageFile!}`);\n return false;\n }\n\n if (\n upgrade.depName !== newUpgrade.depName &&\n upgrade.newName !== newUpgrade.depName\n ) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName mismatch',\n );\n return false;\n }\n\n if (upgrade.newName && upgrade.newName !== newUpgrade.depName) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName is not updated',\n );\n return false;\n }\n\n if (upgrade.newValue && upgrade.newValue !== newUpgrade.currentValue) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newValue,\n foundValue: newUpgrade.currentValue,\n },\n 'Value is not updated',\n );\n return false;\n }\n\n if (\n upgrade.newDigest &&\n (upgrade.isPinDigest === true || upgrade.currentDigest) &&\n upgrade.newDigest !== newUpgrade.currentDigest\n ) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newDigest,\n foundValue: newUpgrade.currentDigest,\n },\n 'Digest is not updated',\n );\n return false;\n }\n\n return true;\n}\n\nfunction getDepsSignature(deps: PackageDependency[]): string {\n // TODO: types (#22198)\n return deps\n .map(\n (dep) =>\n `${(dep.depName ?? dep.packageName)!}${(dep.packageName ??\n dep.depName)!}`,\n )\n .join(',');\n}\n\nexport async function checkBranchDepsMatchBaseDeps(\n upgrade: BranchUpgradeConfig,\n branchContent: string,\n): Promise<boolean> {\n const { baseDeps, manager, packageFile } = upgrade;\n try {\n const res = await extractPackageFile(\n manager,\n branchContent,\n packageFile!,\n upgrade,\n )!;\n const branchDeps = res!.deps;\n return getDepsSignature(baseDeps!) === getDepsSignature(branchDeps);\n } catch /* istanbul ignore next */ {\n logger.info(\n { manager, packageFile },\n 'Failed to parse branchContent - rebasing',\n );\n return false;\n }\n}\n\nasync function checkExistingBranch(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n): Promise<string | null> {\n const { packageFile, depName } = upgrade;\n if (!(await checkBranchDepsMatchBaseDeps(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after deps list has changed',\n );\n return null;\n }\n if (!(await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing after outdated branch dep found',\n );\n return null;\n }\n // TODO: fix types (#22198)\n logger.debug(`Branch dep ${depName!} in ${packageFile!} is already updated`);\n return existingContent;\n}\n\nexport async function doAutoReplace(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n reuseExistingBranch: boolean,\n firstUpdate = true,\n): Promise<string | null> {\n const {\n packageFile,\n depName,\n depNameTemplate,\n newName,\n currentValue,\n currentValueTemplate,\n newValue,\n currentDigest,\n currentDigestShort,\n newDigest,\n autoReplaceGlobalMatch,\n autoReplaceStringTemplate,\n } = upgrade;\n /*\n If replacement support for more managers is added,\n please also update the list in docs/usage/configuration-options.md\n at replacementName and replacementVersion\n */\n if (reuseExistingBranch) {\n return await checkExistingBranch(upgrade, existingContent);\n }\n const replaceWithoutReplaceString =\n is.string(newName) &&\n newName !== depName &&\n (is.undefined(upgrade.replaceString) ||\n !upgrade.replaceString?.includes(depName!));\n const replaceString = upgrade.replaceString ?? currentValue ?? currentDigest;\n logger.trace({ depName, replaceString }, 'autoReplace replaceString');\n let searchIndex: number;\n if (replaceWithoutReplaceString) {\n const depIndex = existingContent.indexOf(depName!);\n const valIndex = existingContent.indexOf(currentValue!);\n searchIndex = depIndex < valIndex ? depIndex : valIndex;\n } else {\n searchIndex = existingContent.indexOf(replaceString!);\n }\n if (searchIndex === -1) {\n logger.info(\n { packageFile, depName, existingContent, replaceString },\n 'Cannot find replaceString in current file content. Was it already updated?',\n );\n return existingContent;\n }\n try {\n let newString: string;\n if (autoReplaceStringTemplate && !newName) {\n newString = compile(autoReplaceStringTemplate, upgrade, false);\n } else {\n newString = replaceString!;\n\n const autoReplaceRegExpFlag = autoReplaceGlobalMatch ? 'g' : '';\n if (currentValue && newValue && currentValue !== newValue) {\n if (!newString.includes(currentValue)) {\n logger.debug(\n { stringToReplace: newString, currentValue, currentValueTemplate },\n 'currentValue not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentValue), autoReplaceRegExpFlag),\n newValue,\n );\n }\n if (depName && newName && depName !== newName) {\n if (!newString.includes(depName)) {\n logger.debug(\n { stringToReplace: newString, depName, depNameTemplate },\n 'depName not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(depName), autoReplaceRegExpFlag),\n newName,\n );\n }\n if (currentDigest && newDigest && currentDigest !== newDigest) {\n if (!newString.includes(currentDigest)) {\n logger.debug(\n { stringToReplace: newString, currentDigest },\n 'currentDigest not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigest), autoReplaceRegExpFlag),\n newDigest,\n );\n } else if (\n currentDigestShort &&\n newDigest &&\n currentDigestShort !== newDigest\n ) {\n if (!newString.includes(currentDigestShort)) {\n logger.debug(\n { stringToReplace: newString, currentDigestShort },\n 'currentDigestShort not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigestShort), autoReplaceRegExpFlag),\n newDigest,\n );\n }\n }\n if (!firstUpdate && (await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Package file is already updated - no work to do',\n );\n return existingContent;\n }\n logger.debug(\n { packageFile, depName },\n `Starting search at index ${searchIndex}`,\n );\n let newContent = existingContent;\n let nameReplaced = !newName;\n let valueReplaced = !newValue;\n let startIndex = searchIndex;\n // Iterate through the rest of the file\n for (; searchIndex < newContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (replaceWithoutReplaceString) {\n // look for depName and currentValue\n if (newName && matchAt(newContent, searchIndex, depName!)) {\n logger.debug(\n { packageFile, depName },\n `Found depName at index ${searchIndex}`,\n );\n if (nameReplaced) {\n startIndex += 1;\n searchIndex = startIndex;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = false;\n valueReplaced = false;\n continue;\n }\n // replace with newName\n newContent = replaceAt(newContent, searchIndex, depName!, newName);\n await writeLocalFile(upgrade.packageFile!, newContent);\n nameReplaced = true;\n } else if (\n newValue &&\n matchAt(newContent, searchIndex, currentValue!)\n ) {\n logger.debug(\n { packageFile, currentValue },\n `Found currentValue at index ${searchIndex}`,\n );\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentValue!,\n newValue,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n valueReplaced = true;\n }\n if (nameReplaced && valueReplaced) {\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = false;\n valueReplaced = false;\n }\n } else if (matchAt(newContent, searchIndex, replaceString!)) {\n logger.debug(\n { packageFile, depName },\n `Found match at index ${searchIndex}`,\n );\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n replaceString!,\n newString,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ packageFile, depName, err }, 'doAutoReplace error');\n }\n // istanbul ignore next\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n}\n"]}
1
+ {"version":3,"file":"auto-replace.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/auto-replace.ts"],"names":[],"mappings":"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","sourcesContent":["// TODO #22198\nimport is from '@sindresorhus/is';\nimport { WORKER_FILE_UPDATE_FAILED } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { extractPackageFile } from '../../../../modules/manager';\nimport type { PackageDependency } from '../../../../modules/manager/types';\nimport { writeLocalFile } from '../../../../util/fs';\nimport { escapeRegExp, regEx } from '../../../../util/regex';\nimport { matchAt, replaceAt } from '../../../../util/string';\nimport { compile } from '../../../../util/template';\nimport type { BranchUpgradeConfig } from '../../../types';\n\nexport async function confirmIfDepUpdated(\n upgrade: BranchUpgradeConfig,\n newContent: string,\n): Promise<boolean> {\n const { manager, packageFile, depIndex } = upgrade;\n let newUpgrade: PackageDependency;\n try {\n const newExtract = await extractPackageFile(\n manager,\n newContent,\n packageFile!,\n upgrade,\n );\n // istanbul ignore if\n if (!newExtract) {\n // TODO: fix types (#22198)\n logger.debug(\n `Could not extract ${packageFile!} (manager=${manager}) after autoreplace. Did the autoreplace make the file unparseable?`,\n );\n logger.trace(\n { packageFile, content: newContent },\n 'packageFile content after autoreplace',\n );\n return false;\n }\n // istanbul ignore if\n if (!newExtract.deps?.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has no deps array. Did the autoreplace make the file unparseable?`,\n );\n return false;\n }\n // istanbul ignore if\n if (is.number(depIndex) && depIndex >= newExtract.deps.length) {\n logger.debug(\n `Extracted ${packageFile!} after autoreplace has fewer deps than expected.`,\n );\n return false;\n }\n newUpgrade = newExtract.deps[depIndex!];\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ manager, packageFile, err }, 'Failed to parse newContent');\n }\n\n if (!newUpgrade!) {\n logger.debug(`No newUpgrade in ${packageFile!}`);\n return false;\n }\n\n if (\n upgrade.depName !== newUpgrade.depName &&\n upgrade.newName !== newUpgrade.depName\n ) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName mismatch',\n );\n return false;\n }\n\n if (upgrade.newName && upgrade.newName !== newUpgrade.depName) {\n logger.debug(\n {\n manager,\n packageFile,\n currentDepName: upgrade.depName,\n newDepName: newUpgrade.depName,\n },\n 'depName is not updated',\n );\n return false;\n }\n\n if (upgrade.newValue && upgrade.newValue !== newUpgrade.currentValue) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newValue,\n foundValue: newUpgrade.currentValue,\n },\n 'Value is not updated',\n );\n return false;\n }\n\n if (\n upgrade.newDigest &&\n (upgrade.isPinDigest === true || upgrade.currentDigest) &&\n upgrade.newDigest !== newUpgrade.currentDigest\n ) {\n logger.debug(\n {\n depName: upgrade.depName,\n manager,\n packageFile,\n expectedValue: upgrade.newDigest,\n foundValue: newUpgrade.currentDigest,\n },\n 'Digest is not updated',\n );\n return false;\n }\n\n return true;\n}\n\nfunction getDepsSignature(deps: PackageDependency[]): string {\n // TODO: types (#22198)\n return deps\n .map(\n (dep) =>\n `${(dep.depName ?? dep.packageName)!}${(dep.packageName ??\n dep.depName)!}`,\n )\n .join(',');\n}\n\nfunction firstIndexOf(\n existingContent: string,\n depName: string,\n currentValue: string,\n position = 0,\n): number {\n const depIndex = existingContent.indexOf(depName, position);\n const valIndex = existingContent.indexOf(currentValue, position);\n const index = depIndex < valIndex ? depIndex : valIndex;\n if (index < 0) {\n return position === 0 ? -1 : existingContent.length;\n }\n return index;\n}\n\nexport async function checkBranchDepsMatchBaseDeps(\n upgrade: BranchUpgradeConfig,\n branchContent: string,\n): Promise<boolean> {\n const { baseDeps, manager, packageFile } = upgrade;\n try {\n const res = await extractPackageFile(\n manager,\n branchContent,\n packageFile!,\n upgrade,\n )!;\n const branchDeps = res!.deps;\n return getDepsSignature(baseDeps!) === getDepsSignature(branchDeps);\n } catch /* istanbul ignore next */ {\n logger.info(\n { manager, packageFile },\n 'Failed to parse branchContent - rebasing',\n );\n return false;\n }\n}\n\nasync function checkExistingBranch(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n): Promise<string | null> {\n const { packageFile, depName } = upgrade;\n if (!(await checkBranchDepsMatchBaseDeps(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing branch after deps list has changed',\n );\n return null;\n }\n if (!(await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Rebasing after outdated branch dep found',\n );\n return null;\n }\n // TODO: fix types (#22198)\n logger.debug(`Branch dep ${depName!} in ${packageFile!} is already updated`);\n return existingContent;\n}\n\nexport async function doAutoReplace(\n upgrade: BranchUpgradeConfig,\n existingContent: string,\n reuseExistingBranch: boolean,\n firstUpdate = true,\n): Promise<string | null> {\n const {\n packageFile,\n depName,\n depNameTemplate,\n newName,\n currentValue,\n currentValueTemplate,\n newValue,\n currentDigest,\n currentDigestShort,\n newDigest,\n autoReplaceGlobalMatch,\n autoReplaceStringTemplate,\n } = upgrade;\n /*\n If replacement support for more managers is added,\n please also update the list in docs/usage/configuration-options.md\n at replacementName and replacementVersion\n */\n if (reuseExistingBranch) {\n return await checkExistingBranch(upgrade, existingContent);\n }\n const replaceWithoutReplaceString =\n is.string(newName) &&\n newName !== depName &&\n (is.undefined(upgrade.replaceString) ||\n !upgrade.replaceString?.includes(depName!));\n const replaceString = upgrade.replaceString ?? currentValue ?? currentDigest;\n logger.trace({ depName, replaceString }, 'autoReplace replaceString');\n let searchIndex: number;\n if (replaceWithoutReplaceString) {\n searchIndex = firstIndexOf(existingContent, depName!, currentValue!);\n } else {\n searchIndex = existingContent.indexOf(replaceString!);\n }\n if (searchIndex === -1) {\n logger.info(\n { packageFile, depName, existingContent, replaceString },\n 'Cannot find replaceString in current file content. Was it already updated?',\n );\n return existingContent;\n }\n try {\n let newString: string;\n if (autoReplaceStringTemplate && !newName) {\n newString = compile(autoReplaceStringTemplate, upgrade, false);\n } else {\n newString = replaceString!;\n\n const autoReplaceRegExpFlag = autoReplaceGlobalMatch ? 'g' : '';\n if (currentValue && newValue && currentValue !== newValue) {\n if (!newString.includes(currentValue)) {\n logger.debug(\n { stringToReplace: newString, currentValue, currentValueTemplate },\n 'currentValue not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentValue), autoReplaceRegExpFlag),\n newValue,\n );\n }\n if (depName && newName && depName !== newName) {\n if (!newString.includes(depName)) {\n logger.debug(\n { stringToReplace: newString, depName, depNameTemplate },\n 'depName not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(depName), autoReplaceRegExpFlag),\n newName,\n );\n }\n if (currentDigest && newDigest && currentDigest !== newDigest) {\n if (!newString.includes(currentDigest)) {\n logger.debug(\n { stringToReplace: newString, currentDigest },\n 'currentDigest not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigest), autoReplaceRegExpFlag),\n newDigest,\n );\n } else if (\n currentDigestShort &&\n newDigest &&\n currentDigestShort !== newDigest\n ) {\n if (!newString.includes(currentDigestShort)) {\n logger.debug(\n { stringToReplace: newString, currentDigestShort },\n 'currentDigestShort not found in string to replace',\n );\n }\n newString = newString.replace(\n regEx(escapeRegExp(currentDigestShort), autoReplaceRegExpFlag),\n newDigest,\n );\n }\n }\n if (!firstUpdate && (await confirmIfDepUpdated(upgrade, existingContent))) {\n logger.debug(\n { packageFile, depName },\n 'Package file is already updated - no work to do',\n );\n return existingContent;\n }\n logger.debug(\n { packageFile, depName },\n `Starting search at index ${searchIndex}`,\n );\n let newContent = existingContent;\n let nameReplaced = !newName;\n let valueReplaced = !newValue;\n let startIndex = searchIndex;\n // Iterate through the rest of the file\n for (; searchIndex < newContent.length; searchIndex += 1) {\n // First check if we have a hit for the old version\n if (replaceWithoutReplaceString) {\n // look for depName and currentValue\n if (newName && matchAt(newContent, searchIndex, depName!)) {\n logger.debug(\n { packageFile, depName },\n `Found depName at index ${searchIndex}`,\n );\n if (nameReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = false;\n valueReplaced = false;\n continue;\n }\n // replace with newName\n newContent = replaceAt(newContent, searchIndex, depName!, newName);\n await writeLocalFile(upgrade.packageFile!, newContent);\n nameReplaced = true;\n searchIndex += newName.length - 1;\n } else if (\n newValue &&\n matchAt(newContent, searchIndex, currentValue!)\n ) {\n logger.debug(\n { packageFile, currentValue },\n `Found currentValue at index ${searchIndex}`,\n );\n if (valueReplaced) {\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = false;\n valueReplaced = false;\n continue;\n }\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n currentValue!,\n newValue,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n valueReplaced = true;\n searchIndex += newValue.length - 1;\n }\n if (nameReplaced && valueReplaced) {\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n startIndex = firstIndexOf(\n existingContent,\n depName!,\n currentValue!,\n startIndex + 1,\n );\n searchIndex = startIndex - 1;\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n nameReplaced = false;\n valueReplaced = false;\n }\n } else if (matchAt(newContent, searchIndex, replaceString!)) {\n logger.debug(\n { packageFile, depName },\n `Found match at index ${searchIndex}`,\n );\n // Now test if the result matches\n newContent = replaceAt(\n newContent,\n searchIndex,\n replaceString!,\n newString,\n );\n await writeLocalFile(upgrade.packageFile!, newContent);\n if (await confirmIfDepUpdated(upgrade, newContent)) {\n return newContent;\n }\n await writeLocalFile(upgrade.packageFile!, existingContent);\n newContent = existingContent;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ packageFile, depName, err }, 'doAutoReplace error');\n }\n // istanbul ignore next\n throw new Error(WORKER_FILE_UPDATE_FAILED);\n}\n"]}
@@ -50,6 +50,8 @@ function commitFilesToBranch(config) {
50
50
  platformCommit: config.platformCommit,
51
51
  // Only needed by Gerrit platform
52
52
  prTitle: config.prTitle,
53
+ // Only needed by Gerrit platform
54
+ autoApprove: config.autoApprove,
53
55
  });
54
56
  }
55
57
  //# sourceMappingURL=commit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/commit.ts"],"names":[],"mappings":";;AAWA,kDAsDC;;AAjED,cAAc;AACd,kEAAkC;AAClC,sDAAyD;AACzD,yEAA8E;AAC9E,+CAA4C;AAC5C,0DAAuD;AAEvD,0DAAuD;AACvD,wDAAqD;AAGrD,SAAgB,mBAAmB,CACjC,MAAoB;IAEpB,IAAI,YAAY,GAAG,MAAM,CAAC,mBAAoB,CAAC,MAAM,CACnD,MAAM,CAAC,gBAAiB,CACzB,CAAC;IACF,qBAAqB;IACrB,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChD,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxD,MAAM,mBAAmB,GAAG,MAAM,CAAC,kBAAmB,CAAC,IAAI,CACzD,CAAC,YAAY,EAAE,EAAE,CACf,IAAA,qBAAS,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CACzD,CAAC;YACF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,eAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,cAAc,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,YAAE,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,eAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,eAAM,CAAC,KAAK,CAAC,GAAG,UAAU,oBAAoB,CAAC,CAAC;IAChD,qBAAqB;IACrB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,wCAAwC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,qBAAqB;IACrB,IACE,MAAM,CAAC,UAAU,KAAK,IAAA,mBAAQ,EAAC,MAAM,CAAC,UAAU,CAAC;QACjD,MAAM,CAAC,aAAa,KAAK,IAAA,mBAAQ,EAAC,MAAM,CAAC,aAAa,CAAC,EACvD,CAAC;QACD,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EACjC,gDAAgD,CACjD,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,uCAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,oDAAoD;IACpD,OAAO,SAAG,CAAC,aAAa,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,MAAM,CAAC,aAAc;QAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;QAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,iCAAiC;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC,CAAC;AACL,CAAC","sourcesContent":["// TODO #22198\nimport is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport { CONFIG_SECRETS_EXPOSED } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { scm } from '../../../../modules/platform/scm';\nimport type { LongCommitSha } from '../../../../util/git/types';\nimport { minimatch } from '../../../../util/minimatch';\nimport { sanitize } from '../../../../util/sanitize';\nimport type { BranchConfig } from '../../../types';\n\nexport function commitFilesToBranch(\n config: BranchConfig,\n): Promise<LongCommitSha | null> {\n let updatedFiles = config.updatedPackageFiles!.concat(\n config.updatedArtifacts!,\n );\n // istanbul ignore if\n if (is.nonEmptyArray(config.excludeCommitPaths)) {\n updatedFiles = updatedFiles.filter(({ path: filePath }) => {\n const matchesExcludePaths = config.excludeCommitPaths!.some(\n (excludedPath) =>\n minimatch(excludedPath, { dot: true }).match(filePath),\n );\n if (matchesExcludePaths) {\n logger.debug(`Excluding ${filePath} from commit`);\n return false;\n }\n return true;\n });\n }\n if (!is.nonEmptyArray(updatedFiles)) {\n logger.debug(`No files to commit`);\n return Promise.resolve(null);\n }\n const fileLength = [...new Set(updatedFiles.map((file) => file.path))].length;\n logger.debug(`${fileLength} file(s) to commit`);\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);\n return Promise.resolve(null);\n }\n // istanbul ignore if\n if (\n config.branchName !== sanitize(config.branchName) ||\n config.commitMessage !== sanitize(config.commitMessage)\n ) {\n logger.debug(\n { branchName: config.branchName },\n 'Secrets exposed in branchName or commitMessage',\n );\n throw new Error(CONFIG_SECRETS_EXPOSED);\n }\n\n // API will know whether to create new branch or not\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName: config.branchName,\n files: updatedFiles,\n message: config.commitMessage!,\n force: !!config.forceCommit,\n platformCommit: config.platformCommit,\n // Only needed by Gerrit platform\n prTitle: config.prTitle,\n });\n}\n"]}
1
+ {"version":3,"file":"commit.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/commit.ts"],"names":[],"mappings":";;AAWA,kDAwDC;;AAnED,cAAc;AACd,kEAAkC;AAClC,sDAAyD;AACzD,yEAA8E;AAC9E,+CAA4C;AAC5C,0DAAuD;AAEvD,0DAAuD;AACvD,wDAAqD;AAGrD,SAAgB,mBAAmB,CACjC,MAAoB;IAEpB,IAAI,YAAY,GAAG,MAAM,CAAC,mBAAoB,CAAC,MAAM,CACnD,MAAM,CAAC,gBAAiB,CACzB,CAAC;IACF,qBAAqB;IACrB,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAChD,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE;YACxD,MAAM,mBAAmB,GAAG,MAAM,CAAC,kBAAmB,CAAC,IAAI,CACzD,CAAC,YAAY,EAAE,EAAE,CACf,IAAA,qBAAS,EAAC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CACzD,CAAC;YACF,IAAI,mBAAmB,EAAE,CAAC;gBACxB,eAAM,CAAC,KAAK,CAAC,aAAa,QAAQ,cAAc,CAAC,CAAC;gBAClD,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,YAAE,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;QACpC,eAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9E,eAAM,CAAC,KAAK,CAAC,GAAG,UAAU,oBAAoB,CAAC,CAAC;IAChD,qBAAqB;IACrB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,eAAM,CAAC,IAAI,CAAC,wCAAwC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1E,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IACD,qBAAqB;IACrB,IACE,MAAM,CAAC,UAAU,KAAK,IAAA,mBAAQ,EAAC,MAAM,CAAC,UAAU,CAAC;QACjD,MAAM,CAAC,aAAa,KAAK,IAAA,mBAAQ,EAAC,MAAM,CAAC,aAAa,CAAC,EACvD,CAAC;QACD,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,EACjC,gDAAgD,CACjD,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,uCAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,oDAAoD;IACpD,OAAO,SAAG,CAAC,aAAa,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,MAAM,CAAC,aAAc;QAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;QAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,iCAAiC;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,iCAAiC;QACjC,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;AACL,CAAC","sourcesContent":["// TODO #22198\nimport is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport { CONFIG_SECRETS_EXPOSED } from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport { scm } from '../../../../modules/platform/scm';\nimport type { LongCommitSha } from '../../../../util/git/types';\nimport { minimatch } from '../../../../util/minimatch';\nimport { sanitize } from '../../../../util/sanitize';\nimport type { BranchConfig } from '../../../types';\n\nexport function commitFilesToBranch(\n config: BranchConfig,\n): Promise<LongCommitSha | null> {\n let updatedFiles = config.updatedPackageFiles!.concat(\n config.updatedArtifacts!,\n );\n // istanbul ignore if\n if (is.nonEmptyArray(config.excludeCommitPaths)) {\n updatedFiles = updatedFiles.filter(({ path: filePath }) => {\n const matchesExcludePaths = config.excludeCommitPaths!.some(\n (excludedPath) =>\n minimatch(excludedPath, { dot: true }).match(filePath),\n );\n if (matchesExcludePaths) {\n logger.debug(`Excluding ${filePath} from commit`);\n return false;\n }\n return true;\n });\n }\n if (!is.nonEmptyArray(updatedFiles)) {\n logger.debug(`No files to commit`);\n return Promise.resolve(null);\n }\n const fileLength = [...new Set(updatedFiles.map((file) => file.path))].length;\n logger.debug(`${fileLength} file(s) to commit`);\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would commit files to branch ' + config.branchName);\n return Promise.resolve(null);\n }\n // istanbul ignore if\n if (\n config.branchName !== sanitize(config.branchName) ||\n config.commitMessage !== sanitize(config.commitMessage)\n ) {\n logger.debug(\n { branchName: config.branchName },\n 'Secrets exposed in branchName or commitMessage',\n );\n throw new Error(CONFIG_SECRETS_EXPOSED);\n }\n\n // API will know whether to create new branch or not\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName: config.branchName,\n files: updatedFiles,\n message: config.commitMessage!,\n force: !!config.forceCommit,\n platformCommit: config.platformCommit,\n // Only needed by Gerrit platform\n prTitle: config.prTitle,\n // Only needed by Gerrit platform\n autoApprove: config.autoApprove,\n });\n}\n"]}
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPrConfigDescription = getPrConfigDescription;
4
+ const tslib_1 = require("tslib");
5
+ const croner_1 = require("croner");
6
+ const cronstrue_1 = tslib_1.__importDefault(require("cronstrue"));
4
7
  const emoji_1 = require("../../../../../util/emoji");
8
+ const string_1 = require("../../../../../util/string");
5
9
  function getPrConfigDescription(config) {
6
10
  let prBody = `\n\n---\n\n### Configuration\n\n`;
7
11
  prBody += (0, emoji_1.emojify)(`:date: **Schedule**: `);
@@ -46,7 +50,8 @@ function getPrConfigDescription(config) {
46
50
  function scheduleToString(schedule, timezone) {
47
51
  let scheduleString = '';
48
52
  if (schedule && schedule[0] !== 'at any time') {
49
- scheduleString += `"${String(schedule)}"`;
53
+ scheduleString =
54
+ getReadableCronSchedule(schedule) ?? `"${String(schedule)}"`;
50
55
  if (timezone) {
51
56
  scheduleString += ` in timezone ${timezone}`;
52
57
  }
@@ -59,4 +64,24 @@ function scheduleToString(schedule, timezone) {
59
64
  }
60
65
  return scheduleString;
61
66
  }
67
+ /**
68
+ * Return human-readable cron schedule summary if the schedule is a valid cron
69
+ * else return null
70
+ */
71
+ function getReadableCronSchedule(scheduleText) {
72
+ // assuming if one schedule is cron the others in the array will be cron too
73
+ try {
74
+ new croner_1.CronPattern(scheduleText[0]); // validate cron
75
+ return scheduleText
76
+ .map((cron) => (0, string_1.capitalize)(cronstrue_1.default
77
+ .toString(cron, {
78
+ throwExceptionOnParseError: false,
79
+ })
80
+ .replace('Every minute, ', '')) + ` ( ${cron} )`)
81
+ .join(', ');
82
+ }
83
+ catch {
84
+ return null;
85
+ }
86
+ }
62
87
  //# sourceMappingURL=config-description.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-description.js","sourceRoot":"","sources":["../../../../../../lib/workers/repository/update/pr/body/config-description.ts"],"names":[],"mappings":";;AAGA,wDA0CC;AA7CD,qDAAoD;AAGpD,SAAgB,sBAAsB,CAAC,MAAoB;IACzD,IAAI,MAAM,GAAG,kCAAkC,CAAC;IAChD,MAAM,IAAI,IAAA,eAAO,EAAC,uBAAuB,CAAC,CAAC;IAC3C,MAAM;QACJ,oBAAoB,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5E,MAAM;QACJ,gBAAgB;YAChB,gBAAgB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,QAAQ,CAAC;YAC3D,GAAG,CAAC;IAEN,MAAM,IAAI,MAAM,CAAC;IACjB,MAAM,IAAI,IAAA,eAAO,EAAC,0CAA0C,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC;IACvB,CAAC;SAAM,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;QACvC,MAAM,IAAI,2DAA2D,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,MAAM;YACJ,wEAAwE,CAAC;IAC7E,CAAC;IACD,MAAM,IAAI,MAAM,CAAC;IACjB,MAAM,IAAI,IAAA,eAAO,EAAC,0BAA0B,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,UAAU,KAAK,oBAAoB,EAAE,CAAC;QAC/C,MAAM,IAAI,mCAAmC,CAAC;IAChD,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAChE,MAAM,IAAI,OAAO,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,gCAAgC,CAAC;IAC7C,CAAC;IACD,MAAM,IAAI,8CAA8C,CAAC;IACzD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,MAAM,IAAI,IAAA,eAAO,EACf,yFAAyF,MAAM,CAAC,YAAY,EAAE,IAAI,4BAA4B,CAC/I,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,IAAA,eAAO,EACf,uEACE,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eACjD,aAAa,CACd,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CACvB,QAA8B,EAC9B,QAA4B;IAE5B,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,aAAa,EAAE,CAAC;QAC9C,cAAc,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,cAAc,IAAI,gBAAgB,QAAQ,EAAE,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,cAAc,IAAI,QAAQ,CAAC;QAC7B,CAAC;IACH,CAAC;SAAM,CAAC;QACN,cAAc,IAAI,mCAAmC,CAAC;IACxD,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC","sourcesContent":["import { emojify } from '../../../../../util/emoji';\nimport type { BranchConfig } from '../../../../types';\n\nexport function getPrConfigDescription(config: BranchConfig): string {\n let prBody = `\\n\\n---\\n\\n### Configuration\\n\\n`;\n prBody += emojify(`:date: **Schedule**: `);\n prBody +=\n 'Branch creation - ' + scheduleToString(config.schedule, config.timezone);\n prBody +=\n ', Automerge - ' +\n scheduleToString(config.automergeSchedule, config.timezone) +\n '.';\n\n prBody += '\\n\\n';\n prBody += emojify(':vertical_traffic_light: **Automerge**: ');\n if (config.automerge) {\n prBody += 'Enabled.';\n } else if (config.automergedPreviously) {\n prBody += 'Disabled because a matching PR was automerged previously.';\n } else {\n prBody +=\n 'Disabled by config. Please merge this manually once you are satisfied.';\n }\n prBody += '\\n\\n';\n prBody += emojify(':recycle: **Rebasing**: ');\n if (config.rebaseWhen === 'behind-base-branch') {\n prBody += 'Whenever PR is behind base branch';\n } else if (config.rebaseWhen === 'never' || config.stopUpdating) {\n prBody += 'Never';\n } else {\n prBody += 'Whenever PR becomes conflicted';\n }\n prBody += `, or you tick the rebase/retry checkbox.\\n\\n`;\n if (config.recreateClosed) {\n prBody += emojify(\n `:ghost: **Immortal**: This PR will be recreated if closed unmerged. Get [config help](${config.productLinks?.help}) if that's undesired.\\n\\n`,\n );\n } else {\n prBody += emojify(\n `:no_bell: **Ignore**: Close this PR and you won't be reminded about ${\n config.upgrades.length === 1 ? 'this update' : 'these updates'\n } again.\\n\\n`,\n );\n }\n return prBody;\n}\n\nfunction scheduleToString(\n schedule: string[] | undefined,\n timezone: string | undefined,\n): string {\n let scheduleString = '';\n if (schedule && schedule[0] !== 'at any time') {\n scheduleString += `\"${String(schedule)}\"`;\n if (timezone) {\n scheduleString += ` in timezone ${timezone}`;\n } else {\n scheduleString += ` (UTC)`;\n }\n } else {\n scheduleString += 'At any time (no schedule defined)';\n }\n return scheduleString;\n}\n"]}
1
+ {"version":3,"file":"config-description.js","sourceRoot":"","sources":["../../../../../../lib/workers/repository/update/pr/body/config-description.ts"],"names":[],"mappings":"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","sourcesContent":["import { CronPattern } from 'croner';\nimport cronstrue from 'cronstrue';\nimport { emojify } from '../../../../../util/emoji';\nimport { capitalize } from '../../../../../util/string';\nimport type { BranchConfig } from '../../../../types';\n\nexport function getPrConfigDescription(config: BranchConfig): string {\n let prBody = `\\n\\n---\\n\\n### Configuration\\n\\n`;\n prBody += emojify(`:date: **Schedule**: `);\n prBody +=\n 'Branch creation - ' + scheduleToString(config.schedule, config.timezone);\n prBody +=\n ', Automerge - ' +\n scheduleToString(config.automergeSchedule, config.timezone) +\n '.';\n\n prBody += '\\n\\n';\n prBody += emojify(':vertical_traffic_light: **Automerge**: ');\n if (config.automerge) {\n prBody += 'Enabled.';\n } else if (config.automergedPreviously) {\n prBody += 'Disabled because a matching PR was automerged previously.';\n } else {\n prBody +=\n 'Disabled by config. Please merge this manually once you are satisfied.';\n }\n prBody += '\\n\\n';\n prBody += emojify(':recycle: **Rebasing**: ');\n if (config.rebaseWhen === 'behind-base-branch') {\n prBody += 'Whenever PR is behind base branch';\n } else if (config.rebaseWhen === 'never' || config.stopUpdating) {\n prBody += 'Never';\n } else {\n prBody += 'Whenever PR becomes conflicted';\n }\n prBody += `, or you tick the rebase/retry checkbox.\\n\\n`;\n if (config.recreateClosed) {\n prBody += emojify(\n `:ghost: **Immortal**: This PR will be recreated if closed unmerged. Get [config help](${config.productLinks?.help}) if that's undesired.\\n\\n`,\n );\n } else {\n prBody += emojify(\n `:no_bell: **Ignore**: Close this PR and you won't be reminded about ${\n config.upgrades.length === 1 ? 'this update' : 'these updates'\n } again.\\n\\n`,\n );\n }\n return prBody;\n}\n\nfunction scheduleToString(\n schedule: string[] | undefined,\n timezone: string | undefined,\n): string {\n let scheduleString = '';\n if (schedule && schedule[0] !== 'at any time') {\n scheduleString =\n getReadableCronSchedule(schedule) ?? `\"${String(schedule)}\"`;\n if (timezone) {\n scheduleString += ` in timezone ${timezone}`;\n } else {\n scheduleString += ` (UTC)`;\n }\n } else {\n scheduleString += 'At any time (no schedule defined)';\n }\n return scheduleString;\n}\n\n/**\n * Return human-readable cron schedule summary if the schedule is a valid cron\n * else return null\n */\nfunction getReadableCronSchedule(scheduleText: string[]): string | null {\n // assuming if one schedule is cron the others in the array will be cron too\n try {\n new CronPattern(scheduleText[0]); // validate cron\n return scheduleText\n .map(\n (cron) =>\n capitalize(\n cronstrue\n .toString(cron, {\n throwExceptionOnParseError: false,\n })\n .replace('Every minute, ', ''),\n ) + ` ( ${cron} )`,\n )\n .join(', ');\n } catch {\n return null;\n }\n}\n"]}
@@ -25,21 +25,25 @@ function massageUpdateMetadata(config) {
25
25
  if (primaryLink) {
26
26
  depNameLinked = `[${depNameLinked}](${primaryLink})`;
27
27
  }
28
- let sourceRootPath = 'tree';
28
+ let sourceRootPath = 'tree/HEAD';
29
29
  if (sourceUrl) {
30
30
  const sourcePlatform = (0, common_1.detectPlatform)(sourceUrl);
31
31
  if (sourcePlatform === 'bitbucket') {
32
- sourceRootPath = 'src';
32
+ sourceRootPath = 'src/HEAD';
33
+ }
34
+ else if (sourcePlatform === 'bitbucket-server') {
35
+ sourceRootPath = 'browse';
33
36
  }
34
37
  }
35
38
  const otherLinks = [];
36
39
  if (sourceUrl && (!!sourceDirectory || homepage)) {
37
- otherLinks.push(`[source](${sourceDirectory
38
- ? (0, url_1.joinUrlParts)(sourceUrl, sourceRootPath, 'HEAD', sourceDirectory)
39
- : sourceUrl})`);
40
+ otherLinks.push(`[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`);
40
41
  }
41
- if (changelogUrl) {
42
- otherLinks.push(`[changelog](${changelogUrl})`);
42
+ const templatedChangelogUrl = changelogUrl
43
+ ? template.compile(changelogUrl, upgrade, true)
44
+ : undefined;
45
+ if (templatedChangelogUrl) {
46
+ otherLinks.push(`[changelog](${templatedChangelogUrl})`);
43
47
  }
44
48
  if (otherLinks.length) {
45
49
  depNameLinked += ` (${otherLinks.join(', ')})`;
@@ -50,18 +54,21 @@ function massageUpdateMetadata(config) {
50
54
  references.push(`[homepage](${homepage})`);
51
55
  }
52
56
  if (sourceUrl) {
53
- let fullUrl = sourceUrl;
54
- if (sourceDirectory) {
55
- fullUrl = (0, url_1.joinUrlParts)(sourceUrl, sourceRootPath, 'HEAD', sourceDirectory);
56
- }
57
- references.push(`[source](${fullUrl})`);
57
+ references.push(`[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`);
58
58
  }
59
- if (changelogUrl) {
60
- references.push(`[changelog](${changelogUrl})`);
59
+ if (templatedChangelogUrl) {
60
+ references.push(`[changelog](${templatedChangelogUrl})`);
61
61
  }
62
62
  upgrade.references = references.join(', ');
63
63
  });
64
64
  }
65
+ function getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory) {
66
+ let fullUrl = sourceUrl;
67
+ if (sourceDirectory) {
68
+ fullUrl = (0, url_1.joinUrlParts)(sourceUrl, sourceRootPath, sourceDirectory);
69
+ }
70
+ return fullUrl;
71
+ }
65
72
  const rebasingRegex = (0, regex_1.regEx)(/\*\*Rebasing\*\*: .*/);
66
73
  function getPrBody(branchConfig, prBodyConfig, config) {
67
74
  massageUpdateMetadata(branchConfig);