renovate 44.198.2 → 44.199.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/data/replacements.js +11 -0
  2. package/dist/modules/manager/fingerprint.generated.js +1 -1
  3. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  4. package/dist/modules/manager/git-submodules/update.js +8 -2
  5. package/dist/modules/manager/git-submodules/update.js.map +1 -1
  6. package/dist/modules/manager/types.d.ts +8 -1
  7. package/dist/util/http/github.d.ts +4 -0
  8. package/dist/util/http/github.js +8 -2
  9. package/dist/util/http/github.js.map +1 -1
  10. package/dist/workers/repository/config-migration/branch/commit-message.js +9 -9
  11. package/dist/workers/repository/config-migration/branch/commit-message.js.map +1 -1
  12. package/dist/workers/repository/config-migration/branch/create.js +13 -16
  13. package/dist/workers/repository/config-migration/branch/create.js.map +1 -1
  14. package/dist/workers/repository/config-migration/branch/rebase.js +15 -20
  15. package/dist/workers/repository/config-migration/branch/rebase.js.map +1 -1
  16. package/dist/workers/repository/config-migration/pr/index.js +13 -58
  17. package/dist/workers/repository/config-migration/pr/index.js.map +1 -1
  18. package/dist/workers/repository/model/commit-body.js +27 -0
  19. package/dist/workers/repository/model/commit-body.js.map +1 -0
  20. package/dist/workers/repository/model/commit-config-file.js +40 -0
  21. package/dist/workers/repository/model/commit-config-file.js.map +1 -0
  22. package/dist/workers/repository/model/commit-message-factory.js.map +1 -1
  23. package/dist/workers/repository/onboarding/branch/commit-message.js +8 -17
  24. package/dist/workers/repository/onboarding/branch/commit-message.js.map +1 -1
  25. package/dist/workers/repository/onboarding/branch/create.js +9 -27
  26. package/dist/workers/repository/onboarding/branch/create.js.map +1 -1
  27. package/dist/workers/repository/onboarding/branch/rebase.js +9 -15
  28. package/dist/workers/repository/onboarding/branch/rebase.js.map +1 -1
  29. package/dist/workers/repository/onboarding/common.js +5 -1
  30. package/dist/workers/repository/onboarding/common.js.map +1 -1
  31. package/dist/workers/repository/onboarding/pr/index.js +16 -65
  32. package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
  33. package/dist/workers/repository/process/lookup/filter-checks.js +1 -1
  34. package/dist/workers/repository/update/branch/automerge.js +2 -2
  35. package/dist/workers/repository/update/branch/automerge.js.map +1 -1
  36. package/dist/workers/repository/update/branch/check-existing.js +61 -1
  37. package/dist/workers/repository/update/branch/check-existing.js.map +1 -1
  38. package/dist/workers/repository/update/branch/errors.js +90 -0
  39. package/dist/workers/repository/update/branch/errors.js.map +1 -0
  40. package/dist/workers/repository/update/branch/get-updated.js +8 -5
  41. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  42. package/dist/workers/repository/update/branch/index.js +43 -302
  43. package/dist/workers/repository/update/branch/index.js.map +1 -1
  44. package/dist/workers/repository/update/branch/pr-blocked-by.js +25 -0
  45. package/dist/workers/repository/update/branch/pr-blocked-by.js.map +1 -0
  46. package/dist/workers/repository/update/branch/reuse.js +84 -7
  47. package/dist/workers/repository/update/branch/reuse.js.map +1 -1
  48. package/dist/workers/repository/update/branch/status-checks.js +84 -2
  49. package/dist/workers/repository/update/branch/status-checks.js.map +1 -1
  50. package/dist/workers/repository/update/pr/body/controls.js +6 -2
  51. package/dist/workers/repository/update/pr/body/controls.js.map +1 -1
  52. package/dist/workers/repository/update/pr/body/footer.js.map +1 -1
  53. package/dist/workers/repository/update/pr/body/header.js.map +1 -1
  54. package/dist/workers/repository/update/pr/body/index.js +2 -2
  55. package/dist/workers/repository/update/pr/ensure-config-pr.js +75 -0
  56. package/dist/workers/repository/update/pr/ensure-config-pr.js.map +1 -0
  57. package/dist/workers/repository/update/pr/index.js +6 -5
  58. package/dist/workers/repository/update/pr/index.js.map +1 -1
  59. package/package.json +1 -1
  60. package/renovate-schema.json +2 -2
@@ -64,6 +64,7 @@ var replacements_default = {
64
64
  "replacements:terraform-provider-mrparkers-keycloak-to-keycloak-keycloak",
65
65
  "replacements:tsconfig-bases-node",
66
66
  "replacements:typeorm-seeding-to-scoped",
67
+ "replacements:ucanaccess-to-io-github-spannm",
67
68
  "replacements:vitest-coverage-c8-to-coverage-v8",
68
69
  "replacements:vso-task-lib-to-azure-pipelines-task-lib",
69
70
  "replacements:vsts-task-lib-to-azure-pipelines-task-lib",
@@ -1192,6 +1193,16 @@ var replacements_default = {
1192
1193
  "replacementVersion": "2.0.0"
1193
1194
  }]
1194
1195
  },
1196
+ "ucanaccess-to-io-github-spannm": {
1197
+ "description": "`net.sf.ucanaccess:ucanaccess` is no longer maintained, development continues at `io.github.spannm:ucanaccess`.",
1198
+ "packageRules": [{
1199
+ "matchCurrentVersion": ">=5.0.1",
1200
+ "matchDatasources": ["maven"],
1201
+ "matchPackageNames": ["net.sf.ucanaccess:ucanaccess"],
1202
+ "replacementName": "io.github.spannm:ucanaccess",
1203
+ "replacementVersion": "5.1.0"
1204
+ }]
1205
+ },
1195
1206
  "vitest-coverage-c8-to-coverage-v8": {
1196
1207
  "description": "`@vitest/coverage-c8` was renamed to `@vitest/coverage-v8`.",
1197
1208
  "packageRules": [{
@@ -42,7 +42,7 @@ hashMap.set("droneci", "661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782e
42
42
  hashMap.set("fleet", "ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97");
43
43
  hashMap.set("flux", "0e9d00a108f6e828ad207ee0213d56ecd64475df9bd87c23b0c2b2f80e00a392");
44
44
  hashMap.set("fvm", "9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90");
45
- hashMap.set("git-submodules", "f4e2c6ddf2fa93241665c5176faafb358eecfcb701e7478790c4d58853ed827a");
45
+ hashMap.set("git-submodules", "9dbdecb1a40443b6e9594416492086c1c4e15ff6afaad1b06eb955addd71122a");
46
46
  hashMap.set("github-actions", "070b49e15d295acd9a87ad0206795e101e64295bd809765ef1ea69663b62d741");
47
47
  hashMap.set("gitlabci", "a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672");
48
48
  hashMap.set("gitlabci-include", "8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351");
@@ -1 +1 @@
1
- {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','66c207983960b1a1f49b972f77efe3bfd3097e19b0ee4034ccf9ac6c0d13e05b');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','77a06471b8aec434457bcbde14a7473bc1c20a5fbe203ecc188bcc7a4fec1718');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','3253c4b828f3871c58f8bc68973704cb06f3043abf6f97775ab220a79da5fbfe');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','bbca094a652544845c147bd801b04ce4aae3719cb27acfb68b2ebac616940538');\nhashMap.set('conan','03cdeeffe4e688fb403766100cc1fc617dd388629f1c769ba54a966db3b23414');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','41e6a8b7b8bae08f07b3e4b69c8c095db5da984bb23c004cd1ebf755a6317794');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','0e9d00a108f6e828ad207ee0213d56ecd64475df9bd87c23b0c2b2f80e00a392');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','f4e2c6ddf2fa93241665c5176faafb358eecfcb701e7478790c4d58853ed827a');\nhashMap.set('github-actions','070b49e15d295acd9a87ad0206795e101e64295bd809765ef1ea69663b62d741');\nhashMap.set('gitlabci','a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','0960350ca66c6e45ef34e7d3a6f0d54f03c7c7b81b9874b486473e18b5757d26');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','ab63e5bc2bb381939a6b75911947e3fc79d31827423ded07f61ea1c98d95a542');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','11b17044d29321b3b0ad8cee40ba00cd3297b9e94648556211043f1e8635c8e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','f9df7bfca0f8ffc2eff230aec09a53c8ae3e4012ac499a38622b31df203f047a');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','49077fd316618114cea787f4d165dee2abd9afb7c3b52e5213a70645c35dfb70');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','9cbd96a29fe96e3df7418e422256380202f07970cf7f00b08388c181224a2b85');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','cd2b909d892ef3e41e51b5df5b1b0b7e34e795845b0640225e41621416c1ee7d');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('paket','0cf8ff9b040ecf28f29b23bbe2ab2544ab3c94822bc1fb53ee4df7b74f000dea');\nhashMap.set('pep621','02ba97d9d2bbd696417ea0ea26c0ed27f4e8cf296f1afdbb27ec07bcc3bd987c');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','2c74e8e94c484c8bfc93ba1272078d531a52e4faaa978fc90ddb654064bb85bc');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','890cabf707d01b58394e0bec05e3a29b73de8f0b43fcbe8a42cd26e328608d70');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','cdf063debdbf36888523ff8cec6d2d1b0ec6f49b37b2fbcd80b0d4f6a31114e1');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','20be5247fdc164173871a051acb0527da017d0c155c653d7563601f55e7b3ff5');"],"mappings":"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"}
1
+ {"version":3,"file":"fingerprint.generated.js","names":[],"sources":["../../../lib/modules/manager/fingerprint.generated.ts"],"sourcesContent":["export const hashMap = new Map<string, string>();\n\nhashMap.set('ansible','a52394a36ac5517f7330473c31d93aa05b2ce607c5e951b48f25a4693cd20a81');\nhashMap.set('ansible-galaxy','8e11293c8f61b4cbae77a3b1634a47213031c59df2c9833d89db65bf4e6edc64');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('apm','66c207983960b1a1f49b972f77efe3bfd3097e19b0ee4034ccf9ac6c0d13e05b');\nhashMap.set('argocd','cff9cd22257bc460ae4b9936570bf0ed5585f280a55d26629deaeeb0bfee8eb5');\nhashMap.set('asdf','430eb99b58171700c8a59c78b9e648575e9b176b781d90dd10a710f7b69015bb');\nhashMap.set('azure-pipelines','04a13dec4e08ba21004961c718072fde976226d65809fa3c838bf66ba93e5d5a');\nhashMap.set('batect','375d39b432013bedb1330cf40a2199dd822751b28578214f219e7bab98594b8d');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','4d4f1d9a6519ba552b316b396db13ff0654a2663d8ed976188899a2d57d306a2');\nhashMap.set('bazel-module','9fbba0339f9f7785d52ab85c5f0f6385003093c063483c13feccba13ae438bef');\nhashMap.set('bazelisk','770f75a746dc6ba90c518788d5987d7df4243ef9eee122d1bb0556a93d6e1b11');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','b8b404f53cd5d61c39153fddf93945e621471c4ac6aa9960c881cd868922bb4c');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','77a06471b8aec434457bcbde14a7473bc1c20a5fbe203ecc188bcc7a4fec1718');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','6e4784dd98c1f86ef64cc8cbf3128df48aebf920032d7792b54fdedd3dd9d4d5');\nhashMap.set('cake','9ebd8b481220b30a8860121d26184540a1a2fcc05ef780df9295dea39b386fad');\nhashMap.set('cargo','3253c4b828f3871c58f8bc68973704cb06f3043abf6f97775ab220a79da5fbfe');\nhashMap.set('cdnurl','9a81c8e3c6ad6c788498c99fc1067ffdfcd92a427c3afaf8c0130975d83131f2');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','f4e40388944652c8a19f8518771ac8d3f3c4ccf81ddef0e68b463aca833cb73c');\nhashMap.set('cocoapods','f832e2beef885bb3fd697ed9bb3e8cd742926bfec37ff41212edd2dbb4edb3ba');\nhashMap.set('composer','bbca094a652544845c147bd801b04ce4aae3719cb27acfb68b2ebac616940538');\nhashMap.set('conan','03cdeeffe4e688fb403766100cc1fc617dd388629f1c769ba54a966db3b23414');\nhashMap.set('copier','a0678cc1eec36301328780966eec215c6e18748ea80c98873c8e13291a684cfa');\nhashMap.set('cpanfile','07813fec3f3c2197056500e9266a0553b9774c02f2c74d5ca2e213188c7c12d3');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','41e6a8b7b8bae08f07b3e4b69c8c095db5da984bb23c004cd1ebf755a6317794');\nhashMap.set('deps-edn','06783dbc8b9c7bb84e162d1f75b7db56dfa021cc6f809dfd2314cee8b64af08d');\nhashMap.set('devbox','a40050cc61bd9b5d500ec111abb17bb15d5f82ab5b7699f66f628307ba8382c9');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','fba87b82cb0f2bfd66526631fbe928b8153e7ca701a5790d02b944df17417bb9');\nhashMap.set('dockerfile','b5faeb8f31d238e0d05a4aeebf9a837273687908ab8078b34e738bb0e369c80c');\nhashMap.set('droneci','661d2a2d7295af8dd7a1234c7090c42a89306bd574c3adf1fc67782efaad3998');\nhashMap.set('fleet','ffa222820f72c4eb4cdc4c229ae8c50433bee96f3b974f0633d5a7d1f6427c97');\nhashMap.set('flux','0e9d00a108f6e828ad207ee0213d56ecd64475df9bd87c23b0c2b2f80e00a392');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','9dbdecb1a40443b6e9594416492086c1c4e15ff6afaad1b06eb955addd71122a');\nhashMap.set('github-actions','070b49e15d295acd9a87ad0206795e101e64295bd809765ef1ea69663b62d741');\nhashMap.set('gitlabci','a5e1e66ef461e1c1e71062f85f35a212417e23627f4b002810f9a98295d6e672');\nhashMap.set('gitlabci-include','8860a15ab516fde00694f9bd9bf56fce4addafe5a55b5ddb9a4ec477d301d351');\nhashMap.set('glasskube','93e7b9000a17efa15a1abaaf320b5af9169b1ecd828fc0c881d98570ef9d9e30');\nhashMap.set('gleam','5e9b9f5f914afe5ed7b526c06c65111e3716d2dea9b0cbe7907bbc96db1064a3');\nhashMap.set('gomod','0960350ca66c6e45ef34e7d3a6f0d54f03c7c7b81b9874b486473e18b5757d26');\nhashMap.set('gradle','14ffeecba62452d47d3796e68753da745de2614b6e5ecc346da4f0067ed4bc6e');\nhashMap.set('gradle-wrapper','73ba30c34955fab7737454b5cff9aca6d1b5607d53c17c9e13d8ad96f6eaae87');\nhashMap.set('haskell-cabal','f158b7725e3143dfd2950e3de0bbccc2a61cd7eba87f7a54c5057e01252348e2');\nhashMap.set('helm-requirements','22f61344565f87ca3512c0ba8fac32627fde8ee919b7badae07b2116e285f049');\nhashMap.set('helm-values','0aa79bb0257d0d72e54dfd2653e59bfef63b97e46c035b7443593bdf6e6382aa');\nhashMap.set('helmfile','ab63e5bc2bb381939a6b75911947e3fc79d31827423ded07f61ea1c98d95a542');\nhashMap.set('helmsman','951deeb3355da751ef39c9e932b26ea749450e32e75759e4b5fc29359e100b37');\nhashMap.set('helmv3','927798e082caf46a0da703389ba07e9e61fa73ef571ab551301b8fc6b06957d1');\nhashMap.set('hermit','abf066a64be5e5112e4da68896cf14583691e817d8bf2fc5ec65aebcc0fde53b');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','dffe954a4e18c2dc4bfdaa12222fe8ddc3395869afd5afa603fc2b6264747984');\nhashMap.set('html','81fa6c2bf2b868596584a48b949645207a2aa3081951ed99183ee50b70b77d5f');\nhashMap.set('jenkins','7fda0e7e0f3d5e18088ccb3594f727f4cfc48b064706bdaaf1a0a075b6a2cff5');\nhashMap.set('jsonnet-bundler','4cedeb0394e5c38361d1868ff45b4f34747ab8c492378b6e63dcaf1f4f3c024d');\nhashMap.set('kotlin-script','95ebc844c040ca047321b207d525220e29774a2a1fe06f9639e8353c66908564');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','11b17044d29321b3b0ad8cee40ba00cd3297b9e94648556211043f1e8635c8e7');\nhashMap.set('leiningen','c8397e376f1717c2f771ae9ea3ba6b720d2422b133cf937e762c44e42be146a2');\nhashMap.set('maven','c110b99291c2a5bc82cf7a69330275e9bbd7dc8ba3e9e987611dfcffbe002d8d');\nhashMap.set('maven-wrapper','f9df7bfca0f8ffc2eff230aec09a53c8ae3e4012ac499a38622b31df203f047a');\nhashMap.set('meteor','4636a47ba4dcfff19fe662572ef7a40d17146be3c966e00ef437e1fc8de92776');\nhashMap.set('mint','248fe4f1ea5c985921c286785792c97e06fc41f402b2d45df82f6aecd17f710e');\nhashMap.set('mise','49077fd316618114cea787f4d165dee2abd9afb7c3b52e5213a70645c35dfb70');\nhashMap.set('mix','0f79163dc2a1c896599d152be635c23beaf16812ae3d8fbfffec98c7bd0de872');\nhashMap.set('nix','9cbd96a29fe96e3df7418e422256380202f07970cf7f00b08388c181224a2b85');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','cd2b909d892ef3e41e51b5df5b1b0b7e34e795845b0640225e41621416c1ee7d');\nhashMap.set('nuget','fb02247c67a198ffe414a44d23c7894bd114dcc53803334f82e39479e7b27f6f');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','d6567a733ef3983112b46fdccd7ceebfcd48411104e0c6b6e714d4310db48024');\nhashMap.set('paket','0cf8ff9b040ecf28f29b23bbe2ab2544ab3c94822bc1fb53ee4df7b74f000dea');\nhashMap.set('pep621','02ba97d9d2bbd696417ea0ea26c0ed27f4e8cf296f1afdbb27ec07bcc3bd987c');\nhashMap.set('pep723','77022a0eae6a3cbb74a1e6d596db1276e379768e40448192b3fa81edd14ca73f');\nhashMap.set('pip-compile','a98dc76a002e1dc21662237f009ff8fea36236bb4e24cb82ee30c6a78f57271f');\nhashMap.set('pip_requirements','bf3a407f72abf711230247bef94ba5dc84c08a35107b0f017912fad66afa716a');\nhashMap.set('pip_setup','df18fba2bdcf48f3ca12a8f7e5cd28df31e2368d5528127277038ef4206eca79');\nhashMap.set('pipenv','9b8ac4f9432f2789f60847c80582966d5ed4f735d2f678c82416d0eb9548b4fa');\nhashMap.set('pixi','e31c397982ffa34222b061f23f3b3683f42523dd5dca45ecce2448b0ebc55ea2');\nhashMap.set('poetry','2c74e8e94c484c8bfc93ba1272078d531a52e4faaa978fc90ddb654064bb85bc');\nhashMap.set('pre-commit','760f2c291ae084db889f722390798a0e2d431ccdc3bc676e73b14901ebea19ac');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','8e7c65dfd1999de4f7c44392e949a4d8f4701eb86df59d550e4657feb06b1872');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','40927b98dd2bac45dba60e66b5fd0e6b84b61d02db8be536fda7b14546a4feb7');\nhashMap.set('renovate-config','890cabf707d01b58394e0bec05e3a29b73de8f0b43fcbe8a42cd26e328608d70');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','6ace53db02874d73620d2d872291839820a512a9529c42d174358c692e5db720');\nhashMap.set('sbt','e1eb5c7f0171a9bb1b6bd4a36a91039a31b6c84e0983d91d930be31a69506d9e');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','4a3a7c812d34739c07685691e7e64c7d3127f9d7d4aff99dc45a25df97ed9745');\nhashMap.set('smithy','9641b91d065ffb63be0dd888139a0402dba41e550f8b44c592db9daf52109100');\nhashMap.set('sveltos','60dd75bb53ace31217211100d622fdb65068c6162758b6ae7103a6ce8bdc9f90');\nhashMap.set('swift','cdf063debdbf36888523ff8cec6d2d1b0ec6f49b37b2fbcd80b0d4f6a31114e1');\nhashMap.set('tekton','33948f5bdf7553909fa63744adb26da97ddf366e9499bccab1250879570267c9');\nhashMap.set('terraform','6788a8569ba9c50c763ffa2bed952a4314ae8e696c29f93d3eb7c4a12d99ce20');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','300f8fb3c09667654412d2f5dd8ab4882e0f5d1d7a8bc39794993d2e7e58d1b7');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','f423bfa2b42a2bfc0e38a33ebd4f9d452473e7ed4e7ad6384a99eb9a35d97479');\nhashMap.set('travis','f3e2f38e699c390b00ff481be5e91dceaa81609e93caf9a4214933de759c84fc');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','30774cd456c443be2cd236fd5b8cd1cb821f1437c6309842e34960832df3557f');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','416bcf61144b276b3112814c6e6d261aa29608f46fbb0516c471d35c16f8f0d7');\nhashMap.set('regex','20be5247fdc164173871a051acb0527da017d0c155c653d7563601f55e7b3ff5');"],"mappings":"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"}
@@ -30,9 +30,15 @@ async function updateDependency({ fileContent, upgrade }) {
30
30
  upgrade.newValue,
31
31
  upgrade.depName
32
32
  ]);
33
- return await readLocalFile(upgrade.packageFile, "utf8");
33
+ return {
34
+ content: await readLocalFile(upgrade.packageFile, "utf8"),
35
+ updatedOutOfBand: true
36
+ };
34
37
  }
35
- return fileContent;
38
+ return {
39
+ content: fileContent,
40
+ updatedOutOfBand: true
41
+ };
36
42
  } catch (err) {
37
43
  logger.debug({ err }, "submodule checkout error");
38
44
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/git-submodules/update.ts"],"sourcesContent":["import upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { createSimpleGit } from '../../../util/git/index.ts';\nimport type { UpdateDependencyConfig } from '../types.ts';\n\nexport default async function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): Promise<string | null> {\n // TODO: types (#22198)\n const localDir = GlobalConfig.get('localDir');\n const authentication = {\n hostTypes: ['git-tags', 'git-refs'],\n };\n\n const git = createSimpleGit({\n config: { baseDir: localDir },\n authentication,\n });\n const submoduleGit = createSimpleGit({\n // TODO: types (#22198)\n config: { baseDir: upath.join(localDir, upgrade.depName!) },\n authentication,\n });\n\n try {\n await git.submoduleUpdate([\n '--checkout',\n '--init',\n '--recursive',\n upgrade.depName!,\n ]);\n await submoduleGit.checkout([upgrade.newDigest!]);\n if (upgrade.newValue && upgrade.currentValue !== upgrade.newValue) {\n await git.subModule([\n 'set-branch',\n '--branch',\n upgrade.newValue,\n upgrade.depName!,\n ]);\n const updatedPackageContent = await readLocalFile(\n upgrade.packageFile!,\n 'utf8',\n );\n return updatedPackageContent!;\n }\n return fileContent;\n } catch (err) {\n logger.debug({ err }, 'submodule checkout error');\n return null;\n }\n}\n"],"mappings":";;;;;;AAOA,eAA8B,iBAAiB,EAC7C,aACA,WACiD;CAEjD,MAAM,WAAW,aAAa,IAAI,UAAU;CAC5C,MAAM,iBAAiB,EACrB,WAAW,CAAC,YAAY,UAAU,EACpC;CAEA,MAAM,MAAM,gBAAgB;EAC1B,QAAQ,EAAE,SAAS,SAAS;EAC5B;CACF,CAAC;CACD,MAAM,eAAe,gBAAgB;EAEnC,QAAQ,EAAE,SAAS,MAAM,KAAK,UAAU,QAAQ,OAAQ,EAAE;EAC1D;CACF,CAAC;CAED,IAAI;EACF,MAAM,IAAI,gBAAgB;GACxB;GACA;GACA;GACA,QAAQ;EACV,CAAC;EACD,MAAM,aAAa,SAAS,CAAC,QAAQ,SAAU,CAAC;EAChD,IAAI,QAAQ,YAAY,QAAQ,iBAAiB,QAAQ,UAAU;GACjE,MAAM,IAAI,UAAU;IAClB;IACA;IACA,QAAQ;IACR,QAAQ;GACV,CAAC;GAKD,OAAO,MAJ6B,cAClC,QAAQ,aACR,MACF;EAEF;EACA,OAAO;CACT,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,0BAA0B;EAChD,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"update.js","names":[],"sources":["../../../../lib/modules/manager/git-submodules/update.ts"],"sourcesContent":["import upath from 'upath';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { createSimpleGit } from '../../../util/git/index.ts';\nimport type {\n UpdateDependencyConfig,\n UpdateDependencyResult,\n} from '../types.ts';\n\nexport default async function updateDependency({\n fileContent,\n upgrade,\n}: UpdateDependencyConfig): Promise<UpdateDependencyResult | null> {\n // TODO: types (#22198)\n const localDir = GlobalConfig.get('localDir');\n const authentication = {\n hostTypes: ['git-tags', 'git-refs'],\n };\n\n const git = createSimpleGit({\n config: { baseDir: localDir },\n authentication,\n });\n const submoduleGit = createSimpleGit({\n // TODO: types (#22198)\n config: { baseDir: upath.join(localDir, upgrade.depName!) },\n authentication,\n });\n\n try {\n await git.submoduleUpdate([\n '--checkout',\n '--init',\n '--recursive',\n upgrade.depName!,\n ]);\n await submoduleGit.checkout([upgrade.newDigest!]);\n if (upgrade.newValue && upgrade.currentValue !== upgrade.newValue) {\n await git.subModule([\n 'set-branch',\n '--branch',\n upgrade.newValue,\n upgrade.depName!,\n ]);\n const updatedPackageContent = await readLocalFile(\n upgrade.packageFile!,\n 'utf8',\n );\n return { content: updatedPackageContent!, updatedOutOfBand: true };\n }\n return { content: fileContent, updatedOutOfBand: true };\n } catch (err) {\n logger.debug({ err }, 'submodule checkout error');\n return null;\n }\n}\n"],"mappings":";;;;;;AAUA,eAA8B,iBAAiB,EAC7C,aACA,WACiE;CAEjE,MAAM,WAAW,aAAa,IAAI,UAAU;CAC5C,MAAM,iBAAiB,EACrB,WAAW,CAAC,YAAY,UAAU,EACpC;CAEA,MAAM,MAAM,gBAAgB;EAC1B,QAAQ,EAAE,SAAS,SAAS;EAC5B;CACF,CAAC;CACD,MAAM,eAAe,gBAAgB;EAEnC,QAAQ,EAAE,SAAS,MAAM,KAAK,UAAU,QAAQ,OAAQ,EAAE;EAC1D;CACF,CAAC;CAED,IAAI;EACF,MAAM,IAAI,gBAAgB;GACxB;GACA;GACA;GACA,QAAQ;EACV,CAAC;EACD,MAAM,aAAa,SAAS,CAAC,QAAQ,SAAU,CAAC;EAChD,IAAI,QAAQ,YAAY,QAAQ,iBAAiB,QAAQ,UAAU;GACjE,MAAM,IAAI,UAAU;IAClB;IACA;IACA,QAAQ;IACR,QAAQ;GACV,CAAC;GAKD,OAAO;IAAE,SAAS,MAJkB,cAClC,QAAQ,aACR,MACF;IAC0C,kBAAkB;GAAK;EACnE;EACA,OAAO;GAAE,SAAS;GAAa,kBAAkB;EAAK;CACxD,SAAS,KAAK;EACZ,OAAO,MAAM,EAAE,IAAI,GAAG,0BAA0B;EAChD,OAAO;CACT;AACF"}
@@ -334,6 +334,13 @@ export interface UpdateDependencyConfig<T = unknown> {
334
334
  packageFile: string;
335
335
  upgrade: Upgrade<T>;
336
336
  }
337
+ export interface UpdateDependencyResult {
338
+ content: string;
339
+ /**
340
+ * The update was also applied outside the package file, e.g. to the checkout on disk, so the package file counts as updated and `updateArtifacts()` runs for it even if `content` is unchanged.
341
+ */
342
+ updatedOutOfBand?: boolean;
343
+ }
337
344
  export interface BumpPackageVersionResult {
338
345
  bumpedContent: string | null;
339
346
  }
@@ -426,7 +433,7 @@ export interface ManagerApiBase extends ModuleApi {
426
433
  */
427
434
  enforcesMinimumReleaseAge?(config: UpdateArtifactsConfig): MaybePromise<boolean>;
428
435
  updateArtifacts?(updateArtifact: UpdateArtifact): MaybePromise<UpdateArtifactsResult[] | null>;
429
- updateDependency?(updateDependencyConfig: UpdateDependencyConfig): MaybePromise<string | null>;
436
+ updateDependency?(updateDependencyConfig: UpdateDependencyConfig): MaybePromise<string | UpdateDependencyResult | null>;
430
437
  updateLockedDependency?(config: UpdateLockedConfig): MaybePromise<UpdateLockedResult>;
431
438
  }
432
439
  export type ManagerApi = ManagerApiBase & ({
@@ -22,6 +22,10 @@ export type GithubGraphqlResponse<T = unknown> = {
22
22
  message: string;
23
23
  }[];
24
24
  };
25
+ /**
26
+ * Whether `err` is GitHub's response to creating a PR for a branch which already has one, usually because a different user created it so Renovate could not find it.
27
+ */
28
+ export declare function isPrAlreadyExistsError(err: any): boolean;
25
29
  interface GraphqlPageCacheItem {
26
30
  pageLastResizedAt: string;
27
31
  pageSize: number;
@@ -42,6 +42,12 @@ const GithubError = z.object({
42
42
  * into an array of error objects, dropping anything that doesn't fit.
43
43
  */
44
44
  const GithubErrors = z.union([LooseArray(GithubError), GithubError.transform((error) => [error])]).catch([]);
45
+ /**
46
+ * Whether `err` is GitHub's response to creating a PR for a branch which already has one, usually because a different user created it so Renovate could not find it.
47
+ */
48
+ function isPrAlreadyExistsError(err) {
49
+ return err?.response?.statusCode === 422 && GithubErrors.parse(err.response.body?.errors).some((e) => e.message?.startsWith("A pull request already exists"));
50
+ }
45
51
  function handleGotError(err, url, opts) {
46
52
  const path = url.toString();
47
53
  let message = err.message || "";
@@ -106,7 +112,7 @@ function handleGotError(err, url, opts) {
106
112
  logger.debug({ err }, "Received invalid response - aborting");
107
113
  return new Error(REPOSITORY_CHANGED);
108
114
  }
109
- if (errors.some((e) => e.message?.startsWith("A pull request already exists"))) return err;
115
+ if (isPrAlreadyExistsError(err)) return err;
110
116
  logger.debug({ err }, "422 Error thrown from GitHub");
111
117
  return new ExternalHostError(err, "github");
112
118
  }
@@ -419,6 +425,6 @@ var GithubHttp = class extends HttpBase {
419
425
  }
420
426
  };
421
427
  //#endregion
422
- export { GithubHttp, setBaseUrl };
428
+ export { GithubHttp, isPrAlreadyExistsError, setBaseUrl };
423
429
 
424
430
  //# sourceMappingURL=github.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"github.js","names":["hostRules.find","p.all"],"sources":["../../../lib/util/http/github.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { z } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { maskToken } from '../mask.ts';\nimport { coerceObject } from '../object.ts';\nimport * as p from '../promises.ts';\nimport { range } from '../range.ts';\nimport { regEx } from '../regex.ts';\nimport { LooseArray } from '../schema-utils/index.ts';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url.ts';\nimport { findMatchingRule } from './host-rules.ts';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http.ts';\nimport type { GotLegacyError } from './legacy.ts';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types.ts';\n\nconst githubBaseUrl = 'https://api.github.com/';\nconst MAX_PAGINATION_PAGES = 100;\nlet baseUrl = githubBaseUrl;\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n code?: string;\n message: string;\n }[];\n };\n\n/**\n * GitHub reports a spent GraphQL budget in two shapes: `RATE_LIMITED` from the\n * GraphQL API itself, and `graphql_rate_limit` when an app installation has\n * exhausted its allowance. Both mean \"come back later\", not \"unknown error\".\n */\nfunction isGraphqlRateLimited(\n errors: { type?: string; code?: string }[] | undefined,\n): boolean {\n return !!errors?.some(\n (err) => err.type === 'RATE_LIMITED' || err.code === 'graphql_rate_limit',\n );\n}\n\nconst GithubError = z.object({\n field: z.string().optional(),\n code: z.string().optional(),\n message: z.string().optional(),\n});\n\n/**\n * GitHub usually returns `errors` as an array, but not always - normalize it\n * into an array of error objects, dropping anything that doesn't fit.\n */\nconst GithubErrors = z\n .union([LooseArray(GithubError), GithubError.transform((error) => [error])])\n .catch([]);\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n\n const parsed = parseUrl(baseUrl);\n\n const rule = hostRules.find({ url: baseUrl });\n if (rule.token || rule.password) {\n logger.once.warn(\n 'Rate limit exceeded for api.github.com, even though we are authenticated',\n );\n } else {\n if (parsed?.hostname === 'api.github.com') {\n logger.once.warn(\n {\n documentationUrl: `${GlobalConfig.get('productLinks').documentation}getting-started/running/#githubcom-token-for-changelogs-and-tools`,\n },\n 'Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN',\n );\n } else {\n logger.once.warn(\n { host: parsed!.host },\n 'Rate limit exceeded, as no hostRules set for this host',\n );\n }\n }\n\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n // v8 ignore else -- TODO: add test #40625\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n }\n\n const errors = GithubErrors.parse(err.body?.errors);\n if (errors.some((e) => e.field === 'milestone')) {\n return err;\n }\n if (errors.some((e) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n }\n if (\n errors.some((e) => e.message?.startsWith('A pull request already exists'))\n ) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes?: T[];\n edges?: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: unknown): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings = isString(input) ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n // v8 ignore else -- TODO: add test #40625\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nfunction resolvePaginationUrl(\n url: string,\n baseUrl: string | undefined,\n rebasePaginationLinks: boolean,\n): URL {\n const parsedUrl = new URL(url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n rebasePaginationLinks &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n return rebasePagination ? replaceUrlBase(parsedUrl, baseUrl) : parsedUrl;\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat([\n 'pageLimit',\n 'paginate',\n 'paginationField',\n 'repository',\n ] as (keyof GithubHttpOptions)[]);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n // create a mutable copy of `url`\n const authUrl = parseUrl(url.toString())!;\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = coerceObject(options.httpOptions);\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url) {\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const rebasePaginationLinks = !!env.RENOVATE_X_REBASE_PAGINATION_LINKS;\n const firstPageUrl = resolvePaginationUrl(\n next.url,\n baseUrl,\n rebasePaginationLinks,\n );\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (firstPageUrl.origin === resolvedUrl.origin) {\n let pages: HttpResponse<T>[];\n if (linkHeader?.last?.page) {\n logger.debug('Using GitHub offset-based pagination');\n let lastPage = parseInt(linkHeader.last.page, 10);\n // v8 ignore else -- TODO: add test #40625\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = parseUrl(firstPageUrl.toString())!;\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n pages = await p.all(queue);\n } else {\n logger.debug('Using GitHub cursor-based pagination');\n pages = [];\n const paginateAll =\n !!env.RENOVATE_PAGINATE_ALL || httpOptions.paginate === 'all';\n const cursorPageLimit = paginateAll\n ? MAX_PAGINATION_PAGES\n : pageLimit;\n let nextUrl: URL | null = firstPageUrl;\n let pageNumber = 2;\n for (; nextUrl && pageNumber <= cursorPageLimit; pageNumber += 1) {\n if (nextUrl.origin !== resolvedUrl.origin) {\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: nextUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n break;\n }\n const nextPage: HttpResponse<T> =\n await super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n pages.push(nextPage);\n const nextLink = parseLinkHeader(nextPage.headers.link)?.next;\n nextUrl = nextLink?.url\n ? resolvePaginationUrl(\n nextLink.url,\n baseUrl,\n rebasePaginationLinks,\n )\n : null;\n }\n if (paginateAll && nextUrl && pageNumber > cursorPageLimit) {\n logger.warn(\n { maxPages: MAX_PAGINATION_PAGES },\n 'GitHub cursor pagination limit reached',\n );\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: firstPageUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n let response: GithubGraphqlResponse<T> | null;\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n response = res.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n\n if (isGraphqlRateLimited(response?.errors)) {\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n\n return response;\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"github.js","names":["hostRules.find","p.all"],"sources":["../../../lib/util/http/github.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyObject,\n isNullOrUndefined,\n isPlainObject,\n isString,\n} from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { z } from 'zod/v4';\nimport { GlobalConfig } from '../../config/global.ts';\nimport {\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../constants/error-messages.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport * as hostRules from '../host-rules.ts';\nimport { maskToken } from '../mask.ts';\nimport { coerceObject } from '../object.ts';\nimport * as p from '../promises.ts';\nimport { range } from '../range.ts';\nimport { regEx } from '../regex.ts';\nimport { LooseArray } from '../schema-utils/index.ts';\nimport { joinUrlParts, parseLinkHeader, parseUrl } from '../url.ts';\nimport { findMatchingRule } from './host-rules.ts';\nimport {\n HttpBase,\n type InternalHttpOptions,\n type InternalJsonUnsafeOptions,\n} from './http.ts';\nimport type { GotLegacyError } from './legacy.ts';\nimport type {\n GraphqlOptions,\n HttpMethod,\n HttpOptions,\n HttpResponse,\n} from './types.ts';\n\nconst githubBaseUrl = 'https://api.github.com/';\nconst MAX_PAGINATION_PAGES = 100;\nlet baseUrl = githubBaseUrl;\nexport function setBaseUrl(url: string): void {\n baseUrl = url;\n}\n\nexport interface GithubBaseHttpOptions extends HttpOptions {\n repository?: string;\n}\n\nexport interface GithubHttpOptions extends GithubBaseHttpOptions {\n paginate?: boolean | string;\n paginationField?: string;\n pageLimit?: number;\n}\n\ninterface GithubGraphqlRepoData<T = unknown> {\n repository?: T;\n}\n\nexport type GithubGraphqlResponse<T = unknown> =\n | {\n data: T;\n errors?: never;\n }\n | {\n data?: never;\n errors: {\n type?: string;\n code?: string;\n message: string;\n }[];\n };\n\n/**\n * GitHub reports a spent GraphQL budget in two shapes: `RATE_LIMITED` from the\n * GraphQL API itself, and `graphql_rate_limit` when an app installation has\n * exhausted its allowance. Both mean \"come back later\", not \"unknown error\".\n */\nfunction isGraphqlRateLimited(\n errors: { type?: string; code?: string }[] | undefined,\n): boolean {\n return !!errors?.some(\n (err) => err.type === 'RATE_LIMITED' || err.code === 'graphql_rate_limit',\n );\n}\n\nconst GithubError = z.object({\n field: z.string().optional(),\n code: z.string().optional(),\n message: z.string().optional(),\n});\n\n/**\n * GitHub usually returns `errors` as an array, but not always - normalize it\n * into an array of error objects, dropping anything that doesn't fit.\n */\nconst GithubErrors = z\n .union([LooseArray(GithubError), GithubError.transform((error) => [error])])\n .catch([]);\n\n/**\n * Whether `err` is GitHub's response to creating a PR for a branch which already has one, usually because a different user created it so Renovate could not find it.\n */\nexport function isPrAlreadyExistsError(err: any): boolean {\n return (\n err?.response?.statusCode === 422 &&\n GithubErrors.parse(err.response.body?.errors).some((e) =>\n e.message?.startsWith('A pull request already exists'),\n )\n );\n}\n\nfunction handleGotError(\n err: GotLegacyError,\n url: string | URL,\n opts: GithubBaseHttpOptions,\n): Error {\n const path = url.toString();\n let message = err.message || '';\n const body = err.response?.body;\n if (isPlainObject(body) && 'message' in body) {\n message = String(body.message);\n }\n if (\n err.code === 'ERR_HTTP2_STREAM_ERROR' ||\n err.code === 'ENOTFOUND' ||\n err.code === 'ETIMEDOUT' ||\n err.code === 'EAI_AGAIN' ||\n err.code === 'ECONNRESET'\n ) {\n logger.debug({ err }, 'GitHub failure: RequestError');\n return new ExternalHostError(err, 'github');\n }\n if (err.name === 'ParseError') {\n logger.debug({ err }, '');\n return new ExternalHostError(err, 'github');\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n logger.debug({ err }, 'GitHub failure: 5xx');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have triggered an abuse detection mechanism')\n ) {\n logger.debug({ err }, 'GitHub failure: abuse detection');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('You have exceeded a secondary rate limit')\n ) {\n logger.warn({ err }, 'GitHub failure: secondary rate limit');\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (err.statusCode === 403 && message.includes('Upgrade to GitHub Pro')) {\n logger.debug(`Endpoint: ${path}, needs paid GitHub plan`);\n return err;\n }\n if (err.statusCode === 403 && message.includes('rate limit exceeded')) {\n logger.debug({ err }, 'GitHub failure: rate limit');\n\n const parsed = parseUrl(baseUrl);\n\n const rule = hostRules.find({ url: baseUrl });\n if (rule.token || rule.password) {\n logger.once.warn(\n 'Rate limit exceeded for api.github.com, even though we are authenticated',\n );\n } else {\n if (parsed?.hostname === 'api.github.com') {\n logger.once.warn(\n {\n documentationUrl: `${GlobalConfig.get('productLinks').documentation}getting-started/running/#githubcom-token-for-changelogs-and-tools`,\n },\n 'Rate limit exceeded for api.github.com, as no hostRules set for this host. Please set a GITHUB_COM_TOKEN',\n );\n } else {\n logger.once.warn(\n { host: parsed!.host },\n 'Rate limit exceeded, as no hostRules set for this host',\n );\n }\n }\n\n return new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n if (\n err.statusCode === 403 &&\n message.startsWith('Resource not accessible by integration')\n ) {\n logger.debug(\n { err },\n 'GitHub failure: Resource not accessible by integration',\n );\n return new Error(PLATFORM_INTEGRATION_UNAUTHORIZED);\n }\n if (err.statusCode === 401) {\n // Warn once for github.com token if unauthorized\n const hostname = parseUrl(url)?.hostname;\n // v8 ignore else -- TODO: add test #40625\n if (hostname === 'github.com' || hostname === 'api.github.com') {\n logger.once.warn('github.com token 401 unauthorized');\n }\n if (message.includes('Bad credentials')) {\n const rateLimit = err.headers?.['x-ratelimit-limit'] ?? -1;\n logger.debug(\n {\n token: maskToken(opts.token),\n err,\n },\n 'GitHub failure: Bad credentials',\n );\n if (rateLimit === '60') {\n return new ExternalHostError(err, 'github');\n }\n return new Error(PLATFORM_BAD_CREDENTIALS);\n }\n }\n if (err.statusCode === 422) {\n if (\n message.includes('Review cannot be requested from pull request author')\n ) {\n return err;\n }\n\n const errors = GithubErrors.parse(err.body?.errors);\n if (errors.some((e) => e.field === 'milestone')) {\n return err;\n }\n if (errors.some((e) => e.code === 'invalid')) {\n logger.debug({ err }, 'Received invalid response - aborting');\n return new Error(REPOSITORY_CHANGED);\n }\n if (isPrAlreadyExistsError(err)) {\n return err;\n }\n logger.debug({ err }, '422 Error thrown from GitHub');\n return new ExternalHostError(err, 'github');\n }\n if (\n err.statusCode === 410 &&\n err.body?.message === 'Issues are disabled for this repo'\n ) {\n return err;\n }\n return err;\n}\n\ninterface GraphqlPaginatedContent<T = unknown> {\n nodes?: T[];\n edges?: T[];\n pageInfo: { hasNextPage: boolean; endCursor: string };\n}\n\nfunction constructAcceptString(input?: unknown): string {\n const defaultAccept = 'application/vnd.github.v3+json';\n const acceptStrings = isString(input) ? input.split(regEx(/\\s*,\\s*/)) : [];\n\n // TODO: regression of #6736\n // v8 ignore else -- TODO: add test #40625\n if (\n !acceptStrings.some((x) => x === defaultAccept) &&\n (!acceptStrings.some((x) => x.startsWith('application/vnd.github.')) ||\n acceptStrings.length < 2)\n ) {\n acceptStrings.push(defaultAccept);\n }\n return acceptStrings.join(', ');\n}\n\nconst MAX_GRAPHQL_PAGE_SIZE = 100;\n\ninterface GraphqlPageCacheItem {\n pageLastResizedAt: string;\n pageSize: number;\n}\n\nexport type GraphqlPageCache = Record<string, GraphqlPageCacheItem>;\n\nfunction getGraphqlPageSize(\n fieldName: string,\n defaultPageSize = MAX_GRAPHQL_PAGE_SIZE,\n): number {\n const cache = getCache();\n const graphqlPageCache = cache?.platform?.github\n ?.graphqlPageCache as GraphqlPageCache;\n const cachedRecord = graphqlPageCache?.[fieldName];\n\n if (graphqlPageCache && cachedRecord) {\n logger.debug(\n { fieldName, ...cachedRecord },\n 'GraphQL page size: found cached value',\n );\n\n const oldPageSize = cachedRecord.pageSize;\n\n const now = DateTime.local();\n const then = DateTime.fromISO(cachedRecord.pageLastResizedAt);\n const expiry = then.plus({ hours: 24 });\n if (now > expiry) {\n const newPageSize = Math.min(oldPageSize * 2, MAX_GRAPHQL_PAGE_SIZE);\n if (newPageSize < MAX_GRAPHQL_PAGE_SIZE) {\n const timestamp = now.toISO();\n\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp },\n 'GraphQL page size: expanding',\n );\n\n cachedRecord.pageLastResizedAt = timestamp;\n cachedRecord.pageSize = newPageSize;\n } else {\n logger.debug(\n { fieldName, oldPageSize, newPageSize },\n 'GraphQL page size: expanded to default page size',\n );\n\n delete graphqlPageCache[fieldName];\n }\n\n return newPageSize;\n }\n\n return oldPageSize;\n }\n\n return defaultPageSize;\n}\n\nfunction setGraphqlPageSize(fieldName: string, newPageSize: number): void {\n const oldPageSize = getGraphqlPageSize(fieldName);\n if (newPageSize !== oldPageSize) {\n const now = DateTime.local();\n const pageLastResizedAt = now.toISO();\n logger.debug(\n { fieldName, oldPageSize, newPageSize, timestamp: pageLastResizedAt },\n 'GraphQL page size: shrinking',\n );\n const cache = getCache();\n cache.platform ??= {};\n cache.platform.github ??= {};\n cache.platform.github.graphqlPageCache ??= {};\n const graphqlPageCache = cache.platform.github\n .graphqlPageCache as GraphqlPageCache;\n graphqlPageCache[fieldName] = {\n pageLastResizedAt,\n pageSize: newPageSize,\n };\n }\n}\n\nfunction replaceUrlBase(url: URL, baseUrl: string): URL {\n const relativeUrl = `${url.pathname}${url.search}`;\n return new URL(relativeUrl, baseUrl);\n}\n\nfunction resolvePaginationUrl(\n url: string,\n baseUrl: string | undefined,\n rebasePaginationLinks: boolean,\n): URL {\n const parsedUrl = new URL(url, baseUrl);\n const rebasePagination =\n !!baseUrl &&\n rebasePaginationLinks &&\n // Preserve github.com URLs for use cases like release notes\n parsedUrl.origin !== 'https://api.github.com';\n return rebasePagination ? replaceUrlBase(parsedUrl, baseUrl) : parsedUrl;\n}\n\nexport class GithubHttp extends HttpBase<GithubHttpOptions> {\n protected override get baseUrl(): string | undefined {\n return baseUrl;\n }\n\n constructor(hostType = 'github', options?: HttpOptions) {\n super(hostType, options);\n }\n\n protected override extraOptions(): readonly string[] {\n return super\n .extraOptions()\n .concat([\n 'pageLimit',\n 'paginate',\n 'paginationField',\n 'repository',\n ] as (keyof GithubHttpOptions)[]);\n }\n\n protected override processOptions(\n url: URL,\n opts: InternalHttpOptions & GithubBaseHttpOptions,\n ): void {\n if (!opts.token) {\n // create a mutable copy of `url`\n const authUrl = parseUrl(url.toString())!;\n\n if (opts.repository) {\n // set authUrl to https://api.github.com/repos/org/repo or https://gihub.domain.com/api/v3/repos/org/repo\n authUrl.hash = '';\n authUrl.search = '';\n authUrl.pathname = joinUrlParts(\n authUrl.pathname.startsWith('/api/v3') ? '/api/v3' : '',\n 'repos',\n `${opts.repository}`,\n );\n }\n\n let readOnly = opts.readOnly;\n const { method = 'get' } = opts;\n if (\n readOnly === undefined &&\n ['get', 'head'].includes(method.toLowerCase())\n ) {\n readOnly = true;\n }\n const { token } = findMatchingRule(authUrl.toString(), {\n hostType: this.hostType,\n readOnly,\n });\n opts.token = token;\n }\n\n const accept = constructAcceptString(opts.headers?.accept);\n\n opts.headers = {\n ...opts.headers,\n accept,\n };\n }\n\n protected override handleError(\n url: string | URL,\n opts: HttpOptions,\n err: GotLegacyError,\n ): never {\n throw handleGotError(err, url, opts);\n }\n\n protected override async requestJsonUnsafe<T>(\n method: HttpMethod,\n options: InternalJsonUnsafeOptions<GithubHttpOptions>,\n ): Promise<HttpResponse<T>> {\n const httpOptions = coerceObject(options.httpOptions);\n const resolvedUrl = this.resolveUrl(options.url, httpOptions);\n const opts = {\n ...options,\n url: resolvedUrl,\n };\n\n const result = await super.requestJsonUnsafe<T>(method, opts);\n if (httpOptions.paginate) {\n delete httpOptions.cacheProvider;\n httpOptions.memCache = false;\n // Check if result is paginated\n const pageLimit = httpOptions.pageLimit ?? 10;\n const linkHeader = parseLinkHeader(result?.headers?.link);\n const next = linkHeader?.next;\n const env = getEnv();\n if (next?.url) {\n const baseUrl = httpOptions.baseUrl ?? this.baseUrl;\n const rebasePaginationLinks = !!env.RENOVATE_X_REBASE_PAGINATION_LINKS;\n const firstPageUrl = resolvePaginationUrl(\n next.url,\n baseUrl,\n rebasePaginationLinks,\n );\n // Don't follow a cross-origin request, unless we've been explicitly requested to do so with `RENOVATE_X_REBASE_PAGINATION_LINKS`\n if (firstPageUrl.origin === resolvedUrl.origin) {\n let pages: HttpResponse<T>[];\n if (linkHeader?.last?.page) {\n logger.debug('Using GitHub offset-based pagination');\n let lastPage = parseInt(linkHeader.last.page, 10);\n // v8 ignore else -- TODO: add test #40625\n if (!env.RENOVATE_PAGINATE_ALL && httpOptions.paginate !== 'all') {\n lastPage = Math.min(pageLimit, lastPage);\n }\n const queue = [...range(2, lastPage)].map(\n (pageNumber) => (): Promise<HttpResponse<T>> => {\n // copy before modifying searchParams\n const nextUrl = parseUrl(firstPageUrl.toString())!;\n nextUrl.searchParams.set('page', String(pageNumber));\n return super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n },\n );\n pages = await p.all(queue);\n } else {\n logger.debug('Using GitHub cursor-based pagination');\n pages = [];\n const paginateAll =\n !!env.RENOVATE_PAGINATE_ALL || httpOptions.paginate === 'all';\n const cursorPageLimit = paginateAll\n ? MAX_PAGINATION_PAGES\n : pageLimit;\n let nextUrl: URL | null = firstPageUrl;\n let pageNumber = 2;\n for (; nextUrl && pageNumber <= cursorPageLimit; pageNumber += 1) {\n if (nextUrl.origin !== resolvedUrl.origin) {\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: nextUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n break;\n }\n const nextPage: HttpResponse<T> =\n await super.requestJsonUnsafe<T>(method, {\n ...opts,\n url: nextUrl,\n });\n pages.push(nextPage);\n const nextLink = parseLinkHeader(nextPage.headers.link)?.next;\n nextUrl = nextLink?.url\n ? resolvePaginationUrl(\n nextLink.url,\n baseUrl,\n rebasePaginationLinks,\n )\n : null;\n }\n if (paginateAll && nextUrl && pageNumber > cursorPageLimit) {\n logger.warn(\n { maxPages: MAX_PAGINATION_PAGES },\n 'GitHub cursor pagination limit reached',\n );\n }\n }\n // v8 ignore else -- TODO: add test #40625\n if (httpOptions.paginationField && isPlainObject(result.body)) {\n const paginatedResult = result.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(paginatedResult)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isPlainObject(nextPage.body)) {\n const nextPageResults =\n nextPage.body[httpOptions.paginationField];\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPageResults)) {\n paginatedResult.push(...nextPageResults);\n }\n }\n }\n }\n } else if (isArray<T>(result.body)) {\n for (const nextPage of pages) {\n // v8 ignore else -- TODO: add test #40625\n if (isArray<T>(nextPage.body)) {\n result.body.push(...nextPage.body);\n }\n }\n }\n } else {\n // make sure that users are aware if there are any (potentially malicious, or misconfigured) pagination links being returned\n logger.once.warn(\n {\n requestOrigin: resolvedUrl.origin,\n paginationOrigin: firstPageUrl.origin,\n },\n 'Ignoring cross-origin GitHub pagination link. Set RENOVATE_X_REBASE_PAGINATION_LINKS if this is a self-hosted instance that returns a different origin in pagination links.',\n );\n }\n }\n }\n return result;\n }\n\n public async requestGraphql<T = unknown>(\n query: string,\n options: GraphqlOptions = {},\n ): Promise<GithubGraphqlResponse<T> | null> {\n const path = 'graphql';\n\n const { paginate, count = MAX_GRAPHQL_PAGE_SIZE, cursor = null } = options;\n let { variables } = options;\n if (paginate) {\n variables = {\n ...variables,\n count,\n cursor,\n };\n }\n const body = variables ? { query, variables } : { query };\n\n const opts: GithubBaseHttpOptions = {\n baseUrl: baseUrl.replace('/v3/', '/'), // GHE uses unversioned graphql path\n body,\n headers: { accept: options?.acceptHeader },\n readOnly: options.readOnly,\n };\n if (options.token) {\n opts.token = options.token;\n }\n logger.trace(`Performing Github GraphQL request`);\n\n let response: GithubGraphqlResponse<T> | null;\n try {\n const res = await this.postJson<GithubGraphqlResponse<T>>(path, opts);\n response = res.body;\n } catch (err) {\n logger.debug({ err, query, options }, 'Unexpected GraphQL Error');\n if (err instanceof ExternalHostError && count && count > 10) {\n logger.info('Reducing pagination count to workaround graphql errors');\n return null;\n }\n throw handleGotError(err, path, opts);\n }\n\n if (isGraphqlRateLimited(response?.errors)) {\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n\n return response;\n }\n\n async queryRepoField<T = Record<string, unknown>>(\n query: string,\n fieldName: string,\n options: GraphqlOptions = {},\n ): Promise<T[]> {\n const result: T[] = [];\n\n const { paginate = true } = options;\n\n let optimalCount: null | number = null;\n let count = getGraphqlPageSize(\n fieldName,\n options.count ?? MAX_GRAPHQL_PAGE_SIZE,\n );\n let limit = options.limit ?? 1000;\n let cursor: string | null = null;\n\n let isIterating = true;\n while (isIterating) {\n const res = await this.requestGraphql<GithubGraphqlRepoData<T>>(query, {\n ...options,\n count: Math.min(count, limit),\n cursor,\n paginate,\n });\n const repositoryData = res?.data?.repository;\n if (\n isNonEmptyObject(repositoryData) &&\n !isNullOrUndefined(repositoryData[fieldName])\n ) {\n optimalCount = count;\n\n const {\n nodes = [],\n edges = [],\n pageInfo,\n } = repositoryData[fieldName] as GraphqlPaginatedContent<T>;\n result.push(...nodes);\n result.push(...edges);\n\n limit = Math.max(0, limit - nodes.length - edges.length);\n\n if (limit === 0) {\n isIterating = false;\n } else if (paginate && pageInfo) {\n const { hasNextPage, endCursor } = pageInfo;\n if (hasNextPage && endCursor) {\n cursor = endCursor;\n } else {\n isIterating = false;\n }\n }\n } else {\n count = Math.floor(count / 2);\n if (count === 0) {\n logger.warn({ query, options, res }, 'Error fetching GraphQL nodes');\n isIterating = false;\n }\n }\n\n if (!paginate) {\n isIterating = false;\n }\n }\n\n if (optimalCount && optimalCount < MAX_GRAPHQL_PAGE_SIZE) {\n setGraphqlPageSize(fieldName, optimalCount);\n }\n\n return result;\n }\n\n /**\n * Get the raw text file from a URL.\n * Only use this method to fetch text files.\n *\n * @param url Full API URL, contents path or path inside the repository to the file\n * @param options\n *\n * @example url = 'https://api.github.com/repos/renovatebot/renovate/contents/package.json'\n * @example url = 'renovatebot/renovate/contents/package.json'\n * @example url = 'package.json' & options.repository = 'renovatebot/renovate'\n */\n public async getRawTextFile(\n url: string,\n options: InternalHttpOptions & GithubBaseHttpOptions = {},\n ): Promise<HttpResponse> {\n const newOptions: InternalHttpOptions & GithubBaseHttpOptions = {\n ...options,\n headers: {\n accept: 'application/vnd.github.raw+json',\n },\n };\n\n let newURL = url;\n const httpRegex = regEx(/^https?:\\/\\//);\n if (options.repository && !httpRegex.test(options.repository)) {\n newURL = joinUrlParts(options.repository, 'contents', url);\n }\n\n return await this.getText(newURL, newOptions);\n }\n}\n"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { compile } from "../../../../util/template/index.js";
2
- import { CommitMessageFactory } from "../../model/commit-message-factory.js";
2
+ import { createConfigFileCommitMessage } from "../../model/commit-config-file.js";
3
+ import { isNonEmptyString } from "@sindresorhus/is";
3
4
  //#region lib/workers/repository/config-migration/branch/commit-message.ts
4
5
  var ConfigMigrationCommitMessageFactory = class {
5
6
  config;
@@ -18,18 +19,17 @@ var ConfigMigrationCommitMessageFactory = class {
18
19
  commitMessageSuffix: "",
19
20
  commitMessageTopic
20
21
  };
21
- const commit = new CommitMessageFactory(config).create();
22
- if (commitMessage) {
23
- config.commitMessagePrefix = "";
24
- commit.subject = compile(commitMessage, config);
25
- } else commit.subject = commitMessageTopic;
26
- return commit;
22
+ const subject = isNonEmptyString(commitMessage) ? compile(commitMessage, {
23
+ ...config,
24
+ commitMessagePrefix: ""
25
+ }) : commitMessageTopic;
26
+ return createConfigFileCommitMessage(config, subject);
27
27
  }
28
28
  getCommitMessage() {
29
- return this.create(`Migrate config ${this.configFile}`).toString();
29
+ return this.create(`Migrate config ${this.configFile}`);
30
30
  }
31
31
  getPrTitle() {
32
- return this.create(`Migrate Renovate config`).toString();
32
+ return this.create(`Migrate Renovate config`);
33
33
  }
34
34
  };
35
35
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"commit-message.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/config-migration/branch/commit-message.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../../config/types.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { CommitMessage } from '../../model/commit-message.ts';\nimport { CommitMessageFactory } from '../../model/commit-message-factory.ts';\n\nexport class ConfigMigrationCommitMessageFactory {\n private readonly config: RenovateConfig;\n private readonly configFile: string;\n\n constructor(config: RenovateConfig, configFile: string) {\n this.config = config;\n this.configFile = configFile;\n }\n\n private create(commitMessageTopic: string): CommitMessage {\n const { commitMessage } = this.config;\n\n const config = {\n ...this.config,\n semanticCommitScope: 'config',\n commitMessageExtra: '',\n commitMessageAction: '',\n commitMessageSuffix: '',\n commitMessageTopic,\n };\n\n const commitMessageFactory = new CommitMessageFactory(config);\n const commit = commitMessageFactory.create();\n\n if (commitMessage) {\n config.commitMessagePrefix = '';\n commit.subject = template.compile(commitMessage, config);\n } else {\n commit.subject = commitMessageTopic;\n }\n\n return commit;\n }\n\n getCommitMessage(): string {\n return this.create(`Migrate config ${this.configFile}`).toString();\n }\n\n getPrTitle(): string {\n return this.create(`Migrate Renovate config`).toString();\n }\n}\n"],"mappings":";;;AAKA,IAAa,sCAAb,MAAiD;CAC/C;CACA;CAEA,YAAY,QAAwB,YAAoB;EACtD,KAAK,SAAS;EACd,KAAK,aAAa;CACpB;CAEA,OAAe,oBAA2C;EACxD,MAAM,EAAE,kBAAkB,KAAK;EAE/B,MAAM,SAAS;GACb,GAAG,KAAK;GACR,qBAAqB;GACrB,oBAAoB;GACpB,qBAAqB;GACrB,qBAAqB;GACrB;EACF;EAGA,MAAM,SAAS,IADkB,qBAAqB,MACpB,CAAC,CAAC,OAAO;EAE3C,IAAI,eAAe;GACjB,OAAO,sBAAsB;GAC7B,OAAO,UAAUA,QAAiB,eAAe,MAAM;EACzD,OACE,OAAO,UAAU;EAGnB,OAAO;CACT;CAEA,mBAA2B;EACzB,OAAO,KAAK,OAAO,kBAAkB,KAAK,YAAY,CAAC,CAAC,SAAS;CACnE;CAEA,aAAqB;EACnB,OAAO,KAAK,OAAO,yBAAyB,CAAC,CAAC,SAAS;CACzD;AACF"}
1
+ {"version":3,"file":"commit-message.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/config-migration/branch/commit-message.ts"],"sourcesContent":["import { isNonEmptyString } from '@sindresorhus/is';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport { createConfigFileCommitMessage } from '../../model/commit-config-file.ts';\n\nexport class ConfigMigrationCommitMessageFactory {\n private readonly config: RenovateConfig;\n private readonly configFile: string;\n\n constructor(config: RenovateConfig, configFile: string) {\n this.config = config;\n this.configFile = configFile;\n }\n\n private create(commitMessageTopic: string): string {\n const { commitMessage } = this.config;\n\n const config = {\n ...this.config,\n semanticCommitScope: 'config',\n commitMessageExtra: '',\n commitMessageAction: '',\n commitMessageSuffix: '',\n commitMessageTopic,\n };\n\n // a configured commitMessage replaces the prefix rather than following it\n const subject = isNonEmptyString(commitMessage)\n ? template.compile(commitMessage, { ...config, commitMessagePrefix: '' })\n : commitMessageTopic;\n\n return createConfigFileCommitMessage(config, subject);\n }\n\n getCommitMessage(): string {\n return this.create(`Migrate config ${this.configFile}`);\n }\n\n getPrTitle(): string {\n return this.create(`Migrate Renovate config`);\n }\n}\n"],"mappings":";;;;AAKA,IAAa,sCAAb,MAAiD;CAC/C;CACA;CAEA,YAAY,QAAwB,YAAoB;EACtD,KAAK,SAAS;EACd,KAAK,aAAa;CACpB;CAEA,OAAe,oBAAoC;EACjD,MAAM,EAAE,kBAAkB,KAAK;EAE/B,MAAM,SAAS;GACb,GAAG,KAAK;GACR,qBAAqB;GACrB,oBAAoB;GACpB,qBAAqB;GACrB,qBAAqB;GACrB;EACF;EAGA,MAAM,UAAU,iBAAiB,aAAa,IAC1CA,QAAiB,eAAe;GAAE,GAAG;GAAQ,qBAAqB;EAAG,CAAC,IACtE;EAEJ,OAAO,8BAA8B,QAAQ,OAAO;CACtD;CAEA,mBAA2B;EACzB,OAAO,KAAK,OAAO,kBAAkB,KAAK,YAAY;CACxD;CAEA,aAAqB;EACnB,OAAO,KAAK,OAAO,yBAAyB;CAC9C;AACF"}
@@ -1,9 +1,9 @@
1
- import { GlobalConfig } from "../../../../config/global.js";
2
1
  import { logger } from "../../../../logger/index.js";
3
2
  import { parseJson } from "../../../../util/common.js";
4
3
  import { readLocalFile } from "../../../../util/fs/index.js";
5
4
  import { scm } from "../../../../modules/platform/scm.js";
6
5
  import { getMigrationBranchName } from "../common.js";
6
+ import { commitConfigFile } from "../../model/commit-config-file.js";
7
7
  import { ConfigMigrationCommitMessageFactory } from "./commit-message.js";
8
8
  import { MigratedDataFactory, applyPrettierFormatting } from "./migrated-data.js";
9
9
  //#region lib/workers/repository/config-migration/branch/create.ts
@@ -13,12 +13,17 @@ async function createConfigMigrationBranch(config, migratedConfigData) {
13
13
  const configFileName = pJsonMigration ? "renovate.json" : migratedConfigData.filename;
14
14
  logger.debug("Creating config migration branch");
15
15
  const commitMessageFactory = new ConfigMigrationCommitMessageFactory(config, configFileName);
16
- const commitMessage = commitMessageFactory.getCommitMessage();
17
- // istanbul ignore if
18
- if (GlobalConfig.get("dryRun")) {
19
- logger.info("DRY-RUN: Would commit files to config migration branch");
20
- return Promise.resolve(null);
21
- }
16
+ return await commitConfigFile({
17
+ config,
18
+ branchName: getMigrationBranchName(config),
19
+ getFiles: () => getMigratedFiles(config, migratedConfigData, configFileName, pJsonMigration),
20
+ message: commitMessageFactory.getCommitMessage(),
21
+ prTitle: commitMessageFactory.getPrTitle(),
22
+ force: true,
23
+ dryRunMessage: "DRY-RUN: Would commit files to config migration branch"
24
+ });
25
+ }
26
+ async function getMigratedFiles(config, migratedConfigData, configFileName, pJsonMigration) {
22
27
  await scm.checkoutBranch(config.defaultBranch);
23
28
  const files = [{
24
29
  type: "addition",
@@ -35,15 +40,7 @@ async function createConfigMigrationBranch(config, migratedConfigData) {
35
40
  contents: pJsonContent
36
41
  });
37
42
  }
38
- return scm.commitAndPush({
39
- baseBranch: config.baseBranch,
40
- branchName: getMigrationBranchName(config),
41
- files,
42
- message: commitMessage.toString(),
43
- platformCommit: config.platformCommit,
44
- force: true,
45
- prTitle: commitMessageFactory.getPrTitle()
46
- });
43
+ return files;
47
44
  }
48
45
  //#endregion
49
46
  export { createConfigMigrationBranch };
@@ -1 +1 @@
1
- {"version":3,"file":"create.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/create.ts"],"sourcesContent":["import { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { parseJson } from '../../../../util/common.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport type { FileChange } from '../../../../util/git/types.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport {\n MigratedDataFactory,\n applyPrettierFormatting,\n} from './migrated-data.ts';\n\nexport async function createConfigMigrationBranch(\n config: Partial<RenovateConfig>,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('createConfigMigrationBranch()');\n const pJsonMigration = migratedConfigData.filename === 'package.json';\n const configFileName = pJsonMigration\n ? 'renovate.json'\n : migratedConfigData.filename;\n logger.debug('Creating config migration branch');\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n\n const commitMessage = commitMessageFactory.getCommitMessage();\n\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would commit files to config migration branch');\n return Promise.resolve(null);\n }\n\n await scm.checkoutBranch(config.defaultBranch!);\n const contents =\n await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);\n\n const files: FileChange[] = [\n {\n type: 'addition',\n path: configFileName,\n contents,\n },\n ];\n\n if (pJsonMigration) {\n const pJson = parseJson(\n await readLocalFile('package.json', 'utf8'),\n 'package.json',\n ) as Record<string, unknown>;\n if (pJson?.renovate) {\n delete pJson.renovate;\n }\n const pJsonContent = await applyPrettierFormatting(\n 'package.json',\n JSON.stringify(pJson, undefined, migratedConfigData.indent.indent),\n 'json',\n migratedConfigData.indent,\n );\n files.push({\n type: 'addition',\n path: 'package.json',\n contents: pJsonContent,\n });\n }\n\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName: getMigrationBranchName(config),\n files,\n message: commitMessage.toString(),\n platformCommit: config.platformCommit,\n force: true,\n // Only needed by Gerrit platform\n prTitle: commitMessageFactory.getPrTitle(),\n });\n}\n"],"mappings":";;;;;;;;;AAeA,eAAsB,4BACpB,QACA,oBACwB;CACxB,OAAO,MAAM,+BAA+B;CAC5C,MAAM,iBAAiB,mBAAmB,aAAa;CACvD,MAAM,iBAAiB,iBACnB,kBACA,mBAAmB;CACvB,OAAO,MAAM,kCAAkC;CAE/C,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CAEA,MAAM,gBAAgB,qBAAqB,iBAAiB;;CAG5D,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,wDAAwD;EACpE,OAAO,QAAQ,QAAQ,IAAI;CAC7B;CAEA,MAAM,IAAI,eAAe,OAAO,aAAc;CAI9C,MAAM,QAAsB,CAC1B;EACE,MAAM;EACN,MAAM;EACN,UAAA,MANI,oBAAoB,wBAAwB,kBAAkB;CAOpE,CACF;CAEA,IAAI,gBAAgB;EAClB,MAAM,QAAQ,UACZ,MAAM,cAAc,gBAAgB,MAAM,GAC1C,cACF;EACA,IAAI,OAAO,UACT,OAAO,MAAM;EAEf,MAAM,eAAe,MAAM,wBACzB,gBACA,KAAK,UAAU,OAAO,KAAA,GAAW,mBAAmB,OAAO,MAAM,GACjE,QACA,mBAAmB,MACrB;EACA,MAAM,KAAK;GACT,MAAM;GACN,MAAM;GACN,UAAU;EACZ,CAAC;CACH;CAEA,OAAO,IAAI,cAAc;EACvB,YAAY,OAAO;EACnB,YAAY,uBAAuB,MAAM;EACzC;EACA,SAAS,cAAc,SAAS;EAChC,gBAAgB,OAAO;EACvB,OAAO;EAEP,SAAS,qBAAqB,WAAW;CAC3C,CAAC;AACH"}
1
+ {"version":3,"file":"create.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/create.ts"],"sourcesContent":["import type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { parseJson } from '../../../../util/common.ts';\nimport { readLocalFile } from '../../../../util/fs/index.ts';\nimport type { FileChange } from '../../../../util/git/types.ts';\nimport { commitConfigFile } from '../../model/commit-config-file.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport {\n MigratedDataFactory,\n applyPrettierFormatting,\n} from './migrated-data.ts';\n\nexport async function createConfigMigrationBranch(\n config: Partial<RenovateConfig>,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('createConfigMigrationBranch()');\n const pJsonMigration = migratedConfigData.filename === 'package.json';\n const configFileName = pJsonMigration\n ? 'renovate.json'\n : migratedConfigData.filename;\n logger.debug('Creating config migration branch');\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n\n return await commitConfigFile({\n config,\n branchName: getMigrationBranchName(config),\n getFiles: () =>\n getMigratedFiles(\n config,\n migratedConfigData,\n configFileName,\n pJsonMigration,\n ),\n message: commitMessageFactory.getCommitMessage(),\n prTitle: commitMessageFactory.getPrTitle(),\n force: true,\n dryRunMessage: 'DRY-RUN: Would commit files to config migration branch',\n });\n}\n\nasync function getMigratedFiles(\n config: Partial<RenovateConfig>,\n migratedConfigData: MigratedData,\n configFileName: string,\n pJsonMigration: boolean,\n): Promise<FileChange[]> {\n await scm.checkoutBranch(config.defaultBranch!);\n const contents =\n await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);\n\n const files: FileChange[] = [\n {\n type: 'addition',\n path: configFileName,\n contents,\n },\n ];\n\n if (pJsonMigration) {\n const pJson = parseJson(\n await readLocalFile('package.json', 'utf8'),\n 'package.json',\n ) as Record<string, unknown>;\n if (pJson?.renovate) {\n delete pJson.renovate;\n }\n const pJsonContent = await applyPrettierFormatting(\n 'package.json',\n JSON.stringify(pJson, undefined, migratedConfigData.indent.indent),\n 'json',\n migratedConfigData.indent,\n );\n files.push({\n type: 'addition',\n path: 'package.json',\n contents: pJsonContent,\n });\n }\n\n return files;\n}\n"],"mappings":";;;;;;;;;AAeA,eAAsB,4BACpB,QACA,oBACwB;CACxB,OAAO,MAAM,+BAA+B;CAC5C,MAAM,iBAAiB,mBAAmB,aAAa;CACvD,MAAM,iBAAiB,iBACnB,kBACA,mBAAmB;CACvB,OAAO,MAAM,kCAAkC;CAE/C,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CAEA,OAAO,MAAM,iBAAiB;EAC5B;EACA,YAAY,uBAAuB,MAAM;EACzC,gBACE,iBACE,QACA,oBACA,gBACA,cACF;EACF,SAAS,qBAAqB,iBAAiB;EAC/C,SAAS,qBAAqB,WAAW;EACzC,OAAO;EACP,eAAe;CACjB,CAAC;AACH;AAEA,eAAe,iBACb,QACA,oBACA,gBACA,gBACuB;CACvB,MAAM,IAAI,eAAe,OAAO,aAAc;CAI9C,MAAM,QAAsB,CAC1B;EACE,MAAM;EACN,MAAM;EACN,UAAA,MANI,oBAAoB,wBAAwB,kBAAkB;CAOpE,CACF;CAEA,IAAI,gBAAgB;EAClB,MAAM,QAAQ,UACZ,MAAM,cAAc,gBAAgB,MAAM,GAC1C,cACF;EACA,IAAI,OAAO,UACT,OAAO,MAAM;EAEf,MAAM,eAAe,MAAM,wBACzB,gBACA,KAAK,UAAU,OAAO,KAAA,GAAW,mBAAmB,OAAO,MAAM,GACjE,QACA,mBAAmB,MACrB;EACA,MAAM,KAAK;GACT,MAAM;GACN,MAAM;GACN,UAAU;EACZ,CAAC;CACH;CAEA,OAAO;AACT"}
@@ -1,9 +1,9 @@
1
- import { GlobalConfig } from "../../../../config/global.js";
2
1
  import { quickStringify } from "../../../../util/stringify.js";
3
2
  import { logger } from "../../../../logger/index.js";
4
3
  import { getFile } from "../../../../util/git/index.js";
5
4
  import { scm } from "../../../../modules/platform/scm.js";
6
5
  import { getMigrationBranchName } from "../common.js";
6
+ import { commitConfigFile } from "../../model/commit-config-file.js";
7
7
  import { ConfigMigrationCommitMessageFactory } from "./commit-message.js";
8
8
  import { MigratedDataFactory } from "./migrated-data.js";
9
9
  import JSON5 from "json5";
@@ -13,32 +13,27 @@ async function rebaseMigrationBranch(config, migratedConfigData) {
13
13
  const baseBranch = config.defaultBranch;
14
14
  const branchName = getMigrationBranchName(config);
15
15
  const configFileName = migratedConfigData.filename;
16
- let contents = migratedConfigData.content;
17
16
  const existingContents = await getFile(configFileName, branchName);
18
- if (jsonStripWhitespaces(contents) === jsonStripWhitespaces(existingContents)) {
17
+ if (jsonStripWhitespaces(migratedConfigData.content) === jsonStripWhitespaces(existingContents)) {
19
18
  logger.debug("Migration branch is up to date");
20
19
  return null;
21
20
  }
22
21
  logger.debug("Rebasing migration branch");
23
- if (GlobalConfig.get("dryRun")) {
24
- logger.info("DRY-RUN: Would rebase files in migration branch");
25
- return null;
26
- }
27
22
  const commitMessageFactory = new ConfigMigrationCommitMessageFactory(config, configFileName);
28
- const commitMessage = commitMessageFactory.getCommitMessage();
29
- await scm.checkoutBranch(baseBranch);
30
- contents = await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);
31
- return scm.commitAndPush({
32
- baseBranch: config.baseBranch,
23
+ return await commitConfigFile({
24
+ config,
33
25
  branchName,
34
- files: [{
35
- type: "addition",
36
- path: configFileName,
37
- contents
38
- }],
39
- message: commitMessage.toString(),
40
- platformCommit: config.platformCommit,
41
- prTitle: commitMessageFactory.getPrTitle()
26
+ getFiles: async () => {
27
+ await scm.checkoutBranch(baseBranch);
28
+ return [{
29
+ type: "addition",
30
+ path: configFileName,
31
+ contents: await MigratedDataFactory.applyPrettierFormatting(migratedConfigData)
32
+ }];
33
+ },
34
+ message: commitMessageFactory.getCommitMessage(),
35
+ prTitle: commitMessageFactory.getPrTitle(),
36
+ dryRunMessage: "DRY-RUN: Would rebase files in migration branch"
42
37
  });
43
38
  }
44
39
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"rebase.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/rebase.ts"],"sourcesContent":["import JSON5 from 'json5';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { quickStringify } from '../../../../util/stringify.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { MigratedDataFactory } from './migrated-data.ts';\n\nexport async function rebaseMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('Checking if migration branch needs rebasing');\n const baseBranch = config.defaultBranch!;\n const branchName = getMigrationBranchName(config);\n const configFileName = migratedConfigData.filename;\n let contents = migratedConfigData.content;\n const existingContents = await getFile(configFileName, branchName);\n if (\n jsonStripWhitespaces(contents) === jsonStripWhitespaces(existingContents)\n ) {\n logger.debug('Migration branch is up to date');\n return null;\n }\n logger.debug('Rebasing migration branch');\n\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would rebase files in migration branch');\n return null;\n }\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n const commitMessage = commitMessageFactory.getCommitMessage();\n\n await scm.checkoutBranch(baseBranch);\n contents =\n await MigratedDataFactory.applyPrettierFormatting(migratedConfigData);\n return scm.commitAndPush({\n baseBranch: config.baseBranch,\n branchName,\n files: [\n {\n type: 'addition',\n path: configFileName,\n contents,\n },\n ],\n message: commitMessage.toString(),\n platformCommit: config.platformCommit,\n // Only needed by Gerrit platform\n prTitle: commitMessageFactory.getPrTitle(),\n });\n}\n\n/**\n * @param json a JSON string\n * @return a minimal json string. i.e. does not contain any formatting/whitespaces\n */\nexport function jsonStripWhitespaces(json: string | null): string | null {\n if (!json) {\n return null;\n }\n /**\n * JSON.stringify(value, replacer, space):\n * If \"space\" is anything other than a string or number —\n * for example, is null or not provided — no white space is used.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#parameters\n */\n // v8 ignore next -- JSON5 output is always serializable back to JSON\n return (\n quickStringify(JSON5.parse(json)) ??\n /* istanbul ignore next: should never happen */ null\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,eAAsB,sBACpB,QACA,oBACwB;CACxB,OAAO,MAAM,6CAA6C;CAC1D,MAAM,aAAa,OAAO;CAC1B,MAAM,aAAa,uBAAuB,MAAM;CAChD,MAAM,iBAAiB,mBAAmB;CAC1C,IAAI,WAAW,mBAAmB;CAClC,MAAM,mBAAmB,MAAM,QAAQ,gBAAgB,UAAU;CACjE,IACE,qBAAqB,QAAQ,MAAM,qBAAqB,gBAAgB,GACxE;EACA,OAAO,MAAM,gCAAgC;EAC7C,OAAO;CACT;CACA,OAAO,MAAM,2BAA2B;CAExC,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,iDAAiD;EAC7D,OAAO;CACT;CAEA,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CACA,MAAM,gBAAgB,qBAAqB,iBAAiB;CAE5D,MAAM,IAAI,eAAe,UAAU;CACnC,WACE,MAAM,oBAAoB,wBAAwB,kBAAkB;CACtE,OAAO,IAAI,cAAc;EACvB,YAAY,OAAO;EACnB;EACA,OAAO,CACL;GACE,MAAM;GACN,MAAM;GACN;EACF,CACF;EACA,SAAS,cAAc,SAAS;EAChC,gBAAgB,OAAO;EAEvB,SAAS,qBAAqB,WAAW;CAC3C,CAAC;AACH;;;;;AAMA,SAAgB,qBAAqB,MAAoC;CACvE,IAAI,CAAC,MACH,OAAO;;;;;;;;;CAUT,OACE,eAAe,MAAM,MAAM,IAAI,CAAC;iDACgB;AAEpD"}
1
+ {"version":3,"file":"rebase.js","names":[],"sources":["../../../../../lib/workers/repository/config-migration/branch/rebase.ts"],"sourcesContent":["import JSON5 from 'json5';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { quickStringify } from '../../../../util/stringify.ts';\nimport { commitConfigFile } from '../../model/commit-config-file.ts';\nimport { getMigrationBranchName } from '../common.ts';\nimport { ConfigMigrationCommitMessageFactory } from './commit-message.ts';\nimport type { MigratedData } from './migrated-data.ts';\nimport { MigratedDataFactory } from './migrated-data.ts';\n\nexport async function rebaseMigrationBranch(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<string | null> {\n logger.debug('Checking if migration branch needs rebasing');\n const baseBranch = config.defaultBranch!;\n const branchName = getMigrationBranchName(config);\n const configFileName = migratedConfigData.filename;\n const existingContents = await getFile(configFileName, branchName);\n if (\n jsonStripWhitespaces(migratedConfigData.content) ===\n jsonStripWhitespaces(existingContents)\n ) {\n logger.debug('Migration branch is up to date');\n return null;\n }\n logger.debug('Rebasing migration branch');\n\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n configFileName,\n );\n\n return await commitConfigFile({\n config,\n branchName,\n getFiles: async () => {\n await scm.checkoutBranch(baseBranch);\n return [\n {\n type: 'addition',\n path: configFileName,\n contents:\n await MigratedDataFactory.applyPrettierFormatting(\n migratedConfigData,\n ),\n },\n ];\n },\n message: commitMessageFactory.getCommitMessage(),\n prTitle: commitMessageFactory.getPrTitle(),\n dryRunMessage: 'DRY-RUN: Would rebase files in migration branch',\n });\n}\n\n/**\n * @param json a JSON string\n * @return a minimal json string. i.e. does not contain any formatting/whitespaces\n */\nexport function jsonStripWhitespaces(json: string | null): string | null {\n if (!json) {\n return null;\n }\n /**\n * JSON.stringify(value, replacer, space):\n * If \"space\" is anything other than a string or number —\n * for example, is null or not provided — no white space is used.\n *\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#parameters\n */\n // v8 ignore next -- JSON5 output is always serializable back to JSON\n return (\n quickStringify(JSON5.parse(json)) ??\n /* istanbul ignore next: should never happen */ null\n );\n}\n"],"mappings":";;;;;;;;;;AAYA,eAAsB,sBACpB,QACA,oBACwB;CACxB,OAAO,MAAM,6CAA6C;CAC1D,MAAM,aAAa,OAAO;CAC1B,MAAM,aAAa,uBAAuB,MAAM;CAChD,MAAM,iBAAiB,mBAAmB;CAC1C,MAAM,mBAAmB,MAAM,QAAQ,gBAAgB,UAAU;CACjE,IACE,qBAAqB,mBAAmB,OAAO,MAC/C,qBAAqB,gBAAgB,GACrC;EACA,OAAO,MAAM,gCAAgC;EAC7C,OAAO;CACT;CACA,OAAO,MAAM,2BAA2B;CAExC,MAAM,uBAAuB,IAAI,oCAC/B,QACA,cACF;CAEA,OAAO,MAAM,iBAAiB;EAC5B;EACA;EACA,UAAU,YAAY;GACpB,MAAM,IAAI,eAAe,UAAU;GACnC,OAAO,CACL;IACE,MAAM;IACN,MAAM;IACN,UACE,MAAM,oBAAoB,wBACxB,kBACF;GACJ,CACF;EACF;EACA,SAAS,qBAAqB,iBAAiB;EAC/C,SAAS,qBAAqB,WAAW;EACzC,eAAe;CACjB,CAAC;AACH;;;;;AAMA,SAAgB,qBAAqB,MAAoC;CACvE,IAAI,CAAC,MACH,OAAO;;;;;;;;;CAUT,OACE,eAAe,MAAM,MAAM,IAAI,CAAC;iDACgB;AAEpD"}