renovate 44.198.1 → 44.198.3

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 (61) hide show
  1. package/dist/modules/manager/fingerprint.generated.js +1 -1
  2. package/dist/modules/manager/fingerprint.generated.js.map +1 -1
  3. package/dist/modules/manager/git-submodules/update.js +8 -2
  4. package/dist/modules/manager/git-submodules/update.js.map +1 -1
  5. package/dist/modules/manager/types.d.ts +8 -1
  6. package/dist/modules/platform/azure/index.js +6 -2
  7. package/dist/modules/platform/azure/index.js.map +1 -1
  8. package/dist/util/http/github.d.ts +4 -0
  9. package/dist/util/http/github.js +8 -2
  10. package/dist/util/http/github.js.map +1 -1
  11. package/dist/workers/repository/config-migration/branch/commit-message.js +9 -9
  12. package/dist/workers/repository/config-migration/branch/commit-message.js.map +1 -1
  13. package/dist/workers/repository/config-migration/branch/create.js +13 -16
  14. package/dist/workers/repository/config-migration/branch/create.js.map +1 -1
  15. package/dist/workers/repository/config-migration/branch/rebase.js +15 -20
  16. package/dist/workers/repository/config-migration/branch/rebase.js.map +1 -1
  17. package/dist/workers/repository/config-migration/pr/index.js +13 -58
  18. package/dist/workers/repository/config-migration/pr/index.js.map +1 -1
  19. package/dist/workers/repository/model/commit-body.js +27 -0
  20. package/dist/workers/repository/model/commit-body.js.map +1 -0
  21. package/dist/workers/repository/model/commit-config-file.js +40 -0
  22. package/dist/workers/repository/model/commit-config-file.js.map +1 -0
  23. package/dist/workers/repository/model/commit-message-factory.js.map +1 -1
  24. package/dist/workers/repository/onboarding/branch/commit-message.js +8 -17
  25. package/dist/workers/repository/onboarding/branch/commit-message.js.map +1 -1
  26. package/dist/workers/repository/onboarding/branch/create.js +9 -27
  27. package/dist/workers/repository/onboarding/branch/create.js.map +1 -1
  28. package/dist/workers/repository/onboarding/branch/rebase.js +9 -15
  29. package/dist/workers/repository/onboarding/branch/rebase.js.map +1 -1
  30. package/dist/workers/repository/onboarding/common.js +5 -1
  31. package/dist/workers/repository/onboarding/common.js.map +1 -1
  32. package/dist/workers/repository/onboarding/pr/index.js +16 -65
  33. package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
  34. package/dist/workers/repository/process/lookup/filter-checks.js +1 -1
  35. package/dist/workers/repository/update/branch/automerge.js +2 -2
  36. package/dist/workers/repository/update/branch/automerge.js.map +1 -1
  37. package/dist/workers/repository/update/branch/check-existing.js +61 -1
  38. package/dist/workers/repository/update/branch/check-existing.js.map +1 -1
  39. package/dist/workers/repository/update/branch/errors.js +90 -0
  40. package/dist/workers/repository/update/branch/errors.js.map +1 -0
  41. package/dist/workers/repository/update/branch/get-updated.js +8 -5
  42. package/dist/workers/repository/update/branch/get-updated.js.map +1 -1
  43. package/dist/workers/repository/update/branch/index.js +43 -302
  44. package/dist/workers/repository/update/branch/index.js.map +1 -1
  45. package/dist/workers/repository/update/branch/pr-blocked-by.js +25 -0
  46. package/dist/workers/repository/update/branch/pr-blocked-by.js.map +1 -0
  47. package/dist/workers/repository/update/branch/reuse.js +84 -7
  48. package/dist/workers/repository/update/branch/reuse.js.map +1 -1
  49. package/dist/workers/repository/update/branch/status-checks.js +84 -2
  50. package/dist/workers/repository/update/branch/status-checks.js.map +1 -1
  51. package/dist/workers/repository/update/pr/body/controls.js +6 -2
  52. package/dist/workers/repository/update/pr/body/controls.js.map +1 -1
  53. package/dist/workers/repository/update/pr/body/footer.js.map +1 -1
  54. package/dist/workers/repository/update/pr/body/header.js.map +1 -1
  55. package/dist/workers/repository/update/pr/body/index.js +2 -2
  56. package/dist/workers/repository/update/pr/ensure-config-pr.js +75 -0
  57. package/dist/workers/repository/update/pr/ensure-config-pr.js.map +1 -0
  58. package/dist/workers/repository/update/pr/index.js +6 -5
  59. package/dist/workers/repository/update/pr/index.js.map +1 -1
  60. package/package.json +1 -1
  61. package/renovate-schema.json +2 -2
@@ -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 & ({
@@ -383,14 +383,18 @@ async function updatePr({ number: prNo, prTitle: title, prBody: body, state, pla
383
383
  if (body) objToUpdate.description = max4000Chars(sanitize(body));
384
384
  if (state === "open") await azureApiGit.updatePullRequest({ status: PullRequestStatus.Active }, config.repoId, prNo);
385
385
  else if (state === "closed") objToUpdate.status = PullRequestStatus.Abandoned;
386
- if (platformPrOptions?.autoApprove) {
386
+ if (platformPrOptions?.autoApprove || platformPrOptions?.usePlatformAutomerge) {
387
387
  const pr = await azureApiGit.getPullRequestById(prNo, config.project);
388
- await azureApiGit.createPullRequestReviewer({
388
+ if (platformPrOptions.autoApprove) await azureApiGit.createPullRequestReviewer({
389
389
  reviewerUrl: pr.createdBy.url,
390
390
  vote: AzurePrVote.Approved,
391
391
  isFlagged: false,
392
392
  isRequired: false
393
393
  }, config.repoId, pr.pullRequestId, pr.createdBy.id);
394
+ if (platformPrOptions.usePlatformAutomerge && pr.autoCompleteSetBy?.id && pr.autoCompleteSetBy.id === pr.createdBy?.id && pr.completionOptions?.mergeCommitMessage !== title) objToUpdate.completionOptions = {
395
+ ...pr.completionOptions,
396
+ mergeCommitMessage: title
397
+ };
394
398
  }
395
399
  const updatedPr = await azureApiGit.updatePullRequest(objToUpdate, config.repoId, prNo);
396
400
  if (config.prList) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["azureApi.getAuthenticatedUserId","azureApi.gitApi","hostRules.find","git.initRepo","azureHelper.getMergeMethod","azureHelper.getPolicyEvaluations","azureApi.coreApi","azureHelper.getAllProjectTeams"],"sources":["../../../../lib/modules/platform/azure/index.ts"],"sourcesContent":["import { setTimeout } from 'node:timers/promises';\nimport { isString } from '@sindresorhus/is';\nimport type { IGitApi } from 'azure-devops-node-api/GitApi.js';\nimport type {\n GitItem,\n GitPullRequest,\n GitPullRequestCommentThread,\n GitPullRequestSearchCriteria,\n GitStatus,\n GitVersionDescriptor,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n GitStatusState,\n GitVersionType,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { PolicyEvaluationRecord } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { PolicyEvaluationStatus } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { getConfig } from '../../../config/defaults.ts';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport {\n REPOSITORY_ARCHIVED,\n REPOSITORY_EMPTY,\n REPOSITORY_NOT_FOUND,\n} from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport type { BranchStatus } from '../../../types/index.ts';\nimport { parseJson } from '../../../util/common.ts';\nimport * as git from '../../../util/git/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { sanitize } from '../../../util/sanitize.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\nimport { getPrBodyStruct } from '../pr-body.ts';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformPrOptions,\n PlatformResult,\n Pr,\n ReattemptPlatformAutomergeConfig,\n RepoConfigParams,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types.ts';\nimport { getNewBranchName, repoFingerprint } from '../util.ts';\nimport { smartTruncate } from '../utils/pr-body.ts';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body.ts';\nimport * as azureApi from './azure-got-wrapper.ts';\nimport * as azureHelper from './azure-helper.ts';\nimport { IssueService } from './issue.ts';\nimport type { AzurePr, Config } from './types.ts';\nimport { AzurePrVote } from './types.ts';\nimport {\n getBranchNameWithoutRefsheadsPrefix,\n getGitStatusContextCombinedName,\n getGitStatusContextFromCombinedName,\n getRenovatePRFormat,\n getRepoByName,\n getStorageExtraCloneOpts,\n mapMergeStrategy,\n max4000Chars,\n} from './util.ts';\n\ninterface User {\n id: string;\n name: string;\n isRequired: boolean;\n}\n\ninterface GetRepoPullRequestsOptions {\n gitApi: IGitApi;\n searchCriteria: GitPullRequestSearchCriteria;\n skip: number;\n top: number;\n}\n\nlet config: Config = {} as any;\nlet issueService: IssueService;\nlet renovateUserId: string | undefined;\n\nconst defaults: {\n endpoint?: string;\n hostType: string;\n} = {\n hostType: 'azure',\n};\n\nfunction getRepoPullRequests({\n gitApi,\n searchCriteria,\n skip,\n top,\n}: GetRepoPullRequestsOptions): Promise<GitPullRequest[]> {\n const maxCommentLength = 0;\n return gitApi.getPullRequests(\n config.repoId,\n searchCriteria,\n config.project,\n maxCommentLength,\n skip,\n top,\n );\n}\n\nexport const id = 'azure';\n\nexport function initPlatform({\n endpoint,\n token,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n if (!endpoint) {\n throw new Error('Init: You must configure an Azure DevOps endpoint');\n }\n if (!token && !(username && password)) {\n throw new Error(\n 'Init: You must configure an Azure DevOps token, or a username and password',\n );\n }\n // TODO: Add a connection check that endpoint/token combination are valid (#9593)\n const res = {\n endpoint: ensureTrailingSlash(endpoint),\n };\n defaults.endpoint = res.endpoint;\n azureApi.setEndpoint(res.endpoint);\n const credentials = token\n ? { token }\n : { username: username!, password: password! };\n return azureApi.getAuthenticatedUserId(credentials).then((userId) => {\n renovateUserId = userId;\n return res;\n });\n}\n\nexport async function getRepos(): Promise<string[]> {\n logger.debug('Autodiscovering Azure DevOps repositories');\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n return repos\n .filter((repo) => repo.isDisabled !== true)\n .map((repo) => `${repo.project?.name}/${repo.name}`);\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n try {\n const azureApiGit = await azureApi.gitApi();\n\n let repoId: string | undefined;\n if (repoName) {\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repoName, repos);\n repoId = repo?.id;\n } else {\n repoId = config.repoId;\n }\n\n if (!repoId) {\n logger.debug('No repoId so cannot getRawFile');\n return null;\n }\n\n let item: GitItem | undefined;\n const versionDescriptor: GitVersionDescriptor = {\n version: branchOrTag,\n } satisfies GitVersionDescriptor;\n // Try to get file from repo with tag first, if not found, then try with branch #36835\n for (const versionType of [GitVersionType.Tag, GitVersionType.Branch]) {\n versionDescriptor.versionType = versionType;\n\n item = await azureApiGit.getItem(\n repoId, // repositoryId\n fileName, // path\n undefined, // project\n undefined, // scopePath\n undefined, // recursionLevel\n undefined, // includeContentMetadata\n undefined, // latestProcessedChange\n undefined, // download\n branchOrTag ? versionDescriptor : undefined, // versionDescriptor\n true, // includeContent\n );\n if (item) {\n break; // exit loop if item is found\n } else {\n logger.debug(\n `File: ${fileName} not found in ${repoName} with ${versionType}: ${branchOrTag}`,\n );\n }\n }\n return item?.content ?? null;\n } catch (err) /* v8 ignore next -- Azure API failure modes (service unavailable, malformed items) are not mocked in specs */ {\n if (\n err.message?.includes('<title>Azure DevOps Services Unavailable</title>')\n ) {\n logger.debug(\n 'Azure DevOps is currently unavailable when attempting to fetch file - throwing ExternalHostError',\n );\n throw new ExternalHostError(err, id);\n }\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err, id);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err, id);\n }\n throw err;\n }\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport function applyRepoConfig({ azureWorkItemType }: RepoConfigParams): void {\n if (!azureWorkItemType || azureWorkItemType === config.workItemType) {\n return;\n }\n config.workItemType = azureWorkItemType;\n issueService = new IssueService(config);\n}\n\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n azureWorkItemType,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n config = {\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor'),\n repository,\n } as Config;\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repository, repos);\n if (!repo) {\n logger.error({ repos, repo }, 'Could not find repo in repo list');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ repositoryDetails: repo }, 'Repository details');\n if (repo.isDisabled) {\n logger.debug('Repository is disabled- throwing error to abort renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n /* v8 ignore next -- defensive: Azure omits defaultBranch only for empty repos, which abort earlier in specs */\n if (!repo.defaultBranch) {\n logger.debug('Repo is empty');\n throw new Error(REPOSITORY_EMPTY);\n }\n // TODO #22198\n config.repoId = repo.id!;\n\n config.project = repo.project!.name!;\n config.projectId = repo.project!.id!;\n config.workItemType = azureWorkItemType ?? getConfig().azureWorkItemType!;\n issueService = new IssueService(config);\n config.owner = '?owner?';\n logger.debug(`${repository} owner = ${config.owner}`);\n const defaultBranch = repo.defaultBranch.replace('refs/heads/', '');\n config.defaultBranch = defaultBranch;\n logger.debug(`${repository} default branch = ${defaultBranch}`);\n config.mergeMethods = {};\n config.repoForceRebase = false;\n\n const [projectName, repoName] = repository.split('/');\n const opts = hostRules.find({\n hostType: defaults.hostType,\n url: defaults.endpoint,\n });\n // TODO: types (#22198)\n const manualUrl = `${defaults.endpoint!}${encodeURIComponent(\n projectName,\n )}/_git/${encodeURIComponent(repoName)}`;\n const url = repo.remoteUrl ?? manualUrl;\n await git.initRepo({\n ...config,\n url,\n extraCloneOpts: getStorageExtraCloneOpts(opts),\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch,\n isFork: false,\n repoFingerprint: repoFingerprint(repo.id!, defaults.endpoint),\n };\n return repoConfig;\n}\n\nexport async function getPrList(): Promise<AzurePr[]> {\n logger.debug('getPrList()');\n if (!config.prList) {\n const azureApiGit = await azureApi.gitApi();\n\n let prs: GitPullRequest[] = [];\n let fetchedPrs: GitPullRequest[];\n let skip = 0;\n do {\n fetchedPrs = await getRepoPullRequests({\n gitApi: azureApiGit,\n searchCriteria: {\n status: PullRequestStatus.All,\n // fetch only prs directly created on the repo and not by forks\n sourceRepositoryId: config.repoId,\n ...(!config.ignorePrAuthor &&\n renovateUserId && { creatorId: renovateUserId }),\n },\n skip,\n top: 100,\n });\n prs = prs.concat(fetchedPrs);\n skip += 100;\n } while (fetchedPrs.length > 0);\n\n config.prList = prs.map(getRenovatePRFormat);\n logger.debug(`Retrieved Pull Requests count: ${config.prList.length}`);\n }\n return config.prList;\n}\n\nexport async function getPr(pullRequestId: number): Promise<Pr | null> {\n logger.debug(`getPr(${pullRequestId})`);\n if (!pullRequestId) {\n return null;\n }\n const azurePr = (await getPrList()).find(\n (item) => item.number === pullRequestId,\n );\n\n if (!azurePr) {\n return null;\n }\n\n const azureApiGit = await azureApi.gitApi();\n // the PR list returns descriptions truncated to 400 characters, so read the\n // full one for the body hash\n const { description } = await azureApiGit.getPullRequestById(\n pullRequestId,\n config.project,\n );\n azurePr.bodyStruct = getPrBodyStruct(description);\n\n const labels = await azureApiGit.getPullRequestLabels(\n config.repoId,\n pullRequestId,\n );\n\n azurePr.labels = labels\n .filter((label) => label.active)\n .map((label) => label.name)\n .filter(isString);\n return azurePr;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n targetBranch,\n includeOtherAuthors,\n}: FindPRConfig): Promise<Pr | null> {\n let prsFiltered: Pr[] = [];\n try {\n if (includeOtherAuthors) {\n const azureApiGit = await azureApi.gitApi();\n const [pr] = await getRepoPullRequests({\n gitApi: azureApiGit,\n searchCriteria: {\n sourceRefName: getNewBranchName(branchName),\n sourceRepositoryId: config.repoId,\n status: PullRequestStatus.Active,\n ...(targetBranch && {\n targetRefName: getNewBranchName(targetBranch),\n }),\n },\n skip: 0,\n top: 1,\n });\n return pr ? getRenovatePRFormat(pr) : null;\n }\n\n const prs = await getPrList();\n\n prsFiltered = prs.filter(\n (item) => item.sourceRefName === getNewBranchName(branchName),\n );\n\n if (prTitle) {\n prsFiltered = prsFiltered.filter(\n (item) => item.title.toUpperCase() === prTitle.toUpperCase(),\n );\n }\n\n switch (state) {\n case 'all':\n // no more filter needed, we can go further...\n break;\n case '!open':\n prsFiltered = prsFiltered.filter((item) => item.state !== 'open');\n break;\n default:\n prsFiltered = prsFiltered.filter((item) => item.state === state);\n break;\n }\n } catch (err) {\n logger.error({ err }, 'findPr error');\n }\n if (prsFiltered.length === 0) {\n return null;\n }\n if (targetBranch && prsFiltered.length > 1) {\n const pr = prsFiltered.find((item) => item.targetBranch === targetBranch);\n if (pr) {\n return pr;\n }\n }\n return prsFiltered[0];\n}\n\nexport async function getBranchPr(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName}, ${targetBranch})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n targetBranch,\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatusCheck(branchName: string): Promise<GitStatus[]> {\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n\n // TODO: fix undefined (#22198)\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n // only grab the latest statuses, it will group any by context\n return azureApiGit.getStatuses(\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n undefined,\n undefined,\n undefined,\n true,\n );\n}\n\nconst azureToRenovateStatusMapping: Record<GitStatusState, BranchStatus> = {\n [GitStatusState.Succeeded]: 'green',\n [GitStatusState.NotApplicable]: 'green',\n [GitStatusState.NotSet]: 'yellow',\n [GitStatusState.Pending]: 'yellow',\n [GitStatusState.PartiallySucceeded]: 'yellow',\n [GitStatusState.Error]: 'red',\n [GitStatusState.Failed]: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (getGitStatusContextCombinedName(check.context) === context) {\n // TODO #22198\n return azureToRenovateStatusMapping[check.state!] ?? 'yellow';\n }\n }\n return null;\n}\n\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const statuses = await getStatusCheck(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status) =>\n status.state === GitStatusState.Error ||\n status.state === GitStatusState.Failed,\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status) =>\n status.state === GitStatusState.NotSet ||\n status.state === GitStatusState.Pending,\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === GitStatusState.Succeeded &&\n status.context?.genre === 'renovate',\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nasync function getMergeStrategy(\n targetRefName: string,\n): Promise<GitPullRequestMergeStrategy> {\n return (\n config.mergeMethods[targetRefName] ??\n (config.mergeMethods[targetRefName] = await azureHelper.getMergeMethod(\n config.repoId,\n config.project,\n targetRefName,\n config.defaultBranch,\n ))\n );\n}\n\nasync function getPendingBlockingPolicyEvaluations(\n pullRequestId: number,\n): Promise<PolicyEvaluationRecord[]> {\n const artifactId = `vstfs:///CodeReview/CodeReviewId/${config.projectId}/${pullRequestId}`;\n const policyEvaluations = await azureHelper.getPolicyEvaluations(\n config.project,\n artifactId,\n );\n logger.debug(\n { pullRequestId, artifactId, policyEvaluations },\n 'Retrieved policy evaluations for PR',\n );\n return policyEvaluations.filter(\n (evaluation) =>\n evaluation.configuration?.isBlocking &&\n evaluation.status !== PolicyEvaluationStatus.Approved &&\n evaluation.status !== PolicyEvaluationStatus.NotApplicable,\n );\n}\n\nasync function setPlatformAutomerge(\n azureApiGit: IGitApi,\n pr: GitPullRequest,\n platformPrOptions: PlatformPrOptions,\n): Promise<GitPullRequest> {\n let mergeStrategy: GitPullRequestMergeStrategy;\n if (platformPrOptions.automergeStrategy === 'auto') {\n mergeStrategy = await getMergeStrategy(pr.targetRefName!);\n } else {\n mergeStrategy = mapMergeStrategy(platformPrOptions.automergeStrategy);\n }\n const prOptions: GitPullRequest = {\n autoCompleteSetBy: {\n // TODO #22198\n id: pr.createdBy!.id,\n },\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.debug(\n {\n prOptions,\n repoId: config.repoId,\n pullRequestId: pr.pullRequestId!,\n },\n // TODO #22198\n `Updating PR ${pr.pullRequestId!} to specify platformAutomerge settings`,\n );\n\n return await azureApiGit.updatePullRequest(\n prOptions,\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n );\n}\n\nexport async function reattemptPlatformAutomerge({\n number,\n platformPrOptions,\n}: ReattemptPlatformAutomergeConfig): Promise<void> {\n try {\n const azureApiGit = await azureApi.gitApi();\n const pr = await azureApiGit.getPullRequestById(number, config.project);\n await setPlatformAutomerge(\n azureApiGit,\n pr,\n coerceObject(platformPrOptions),\n );\n\n logger.debug(`PR platform automerge re-attempted...prNo: ${number}`);\n } catch (err) {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n }\n}\n\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: body,\n labels,\n draftPR = false,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n const sourceRefName = getNewBranchName(sourceBranch);\n const targetRefName = getNewBranchName(targetBranch);\n const description = max4000Chars(sanitize(body));\n const azureApiGit = await azureApi.gitApi();\n const workItemRefs = [\n {\n id: platformPrOptions?.azureWorkItemId?.toString(),\n },\n ];\n let pr: GitPullRequest = await azureApiGit.createPullRequest(\n {\n sourceRefName,\n targetRefName,\n title,\n description,\n workItemRefs,\n isDraft: draftPR,\n },\n config.repoId,\n );\n if (platformPrOptions?.usePlatformAutomerge) {\n pr = await setPlatformAutomerge(azureApiGit, pr, platformPrOptions);\n }\n if (platformPrOptions?.autoApprove) {\n const approver = {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n };\n\n logger.debug(\n {\n approver,\n\n repoId: config.repoId,\n // TODO #22198\n pullRequestId: pr.pullRequestId!,\n prCreatedBy: {\n id: pr.createdBy!.id!,\n },\n },\n // TODO #22198\n `Auto-approving PR ${pr.pullRequestId!}`,\n );\n\n await azureApiGit.createPullRequestReviewer(\n approver,\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n await Promise.all(\n labels!.map((label) =>\n azureApiGit.createPullRequestLabel(\n {\n name: label,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n ),\n ),\n );\n\n const result = getRenovatePRFormat(pr);\n if (config.prList) {\n config.prList.push(result);\n }\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: body,\n state,\n platformPrOptions,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n\n const azureApiGit = await azureApi.gitApi();\n const objToUpdate: GitPullRequest = {\n title,\n };\n\n if (targetBranch) {\n objToUpdate.targetRefName = getNewBranchName(targetBranch);\n }\n\n if (body) {\n objToUpdate.description = max4000Chars(sanitize(body));\n }\n\n if (state === 'open') {\n await azureApiGit.updatePullRequest(\n {\n status: PullRequestStatus.Active,\n },\n config.repoId,\n prNo,\n );\n } else if (state === 'closed') {\n objToUpdate.status = PullRequestStatus.Abandoned;\n }\n if (platformPrOptions?.autoApprove) {\n const pr = await azureApiGit.getPullRequestById(prNo, config.project);\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n\n const updatedPr = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n prNo,\n );\n if (config.prList) {\n const prToCache = getRenovatePRFormat(updatedPr);\n // We need to update the cached entry for this PR\n const existingIndex = config.prList.findIndex(\n (item) => item.number === prNo,\n );\n /* v8 ignore next: should not happen */\n if (existingIndex === -1) {\n logger.warn({ prNo }, 'PR not found in cache');\n // Add to cache\n config.prList.push(prToCache);\n } else {\n // overwrite existing PR in cache\n config.prList[existingIndex] = prToCache;\n }\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n logger.debug(`ensureComment(${number}, ${topic!}, content)`);\n const header = topic ? `### ${topic}\\n\\n` : '';\n const body = `${header}${sanitize(massageMarkdown(content))}`;\n const azureApiGit = await azureApi.gitApi();\n\n const threads = await azureApiGit.getThreads(config.repoId, number);\n let threadIdFound: number | undefined;\n let commentIdFound: number | undefined;\n let commentNeedsUpdating = false;\n threads.forEach((thread) => {\n const firstCommentContent = thread.comments?.[0].content;\n if (\n (topic && firstCommentContent?.startsWith(header)) === true ||\n (!topic && firstCommentContent === body)\n ) {\n threadIdFound = thread.id;\n commentIdFound = thread.comments?.[0].id;\n commentNeedsUpdating = firstCommentContent !== body;\n }\n });\n\n if (!threadIdFound) {\n await azureApiGit.createThread(\n {\n comments: [{ content: body, commentType: 1, parentCommentId: 0 }],\n status: 1,\n },\n config.repoId,\n number,\n );\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await azureApiGit.updateComment(\n {\n content: body,\n },\n config.repoId,\n number,\n threadIdFound,\n // TODO #22198\n commentIdFound!,\n );\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment updated',\n );\n } else {\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment is already up-to-date',\n );\n }\n\n return true;\n}\n\nexport async function ensureCommentRemoval(\n removeConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = removeConfig;\n const key =\n removeConfig.type === 'by-topic'\n ? removeConfig.topic\n : removeConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n\n const azureApiGit = await azureApi.gitApi();\n const threads = await azureApiGit.getThreads(config.repoId, issueNo);\n\n let threadIdFound: number | null | undefined = null;\n if (removeConfig.type === 'by-topic') {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n !!thread.comments?.[0].content?.startsWith(\n `### ${removeConfig.topic}\\n\\n`,\n ),\n );\n threadIdFound = thread?.id;\n } else {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n thread.comments?.[0].content?.trim() === removeConfig.content,\n );\n threadIdFound = thread?.id;\n }\n\n if (threadIdFound) {\n await azureApiGit.updateThread(\n {\n status: 4, // close\n },\n config.repoId,\n issueNo,\n threadIdFound,\n );\n }\n}\n\nconst renovateToAzureStatusMapping: Record<BranchStatus, GitStatusState> = {\n ['green']: GitStatusState.Succeeded,\n ['yellow']: GitStatusState.Pending,\n ['red']: GitStatusState.Failed,\n};\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n logger.debug(\n `setBranchStatus(${branchName}, ${context}, ${description}, ${state}, ${targetUrl!})`,\n );\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n const statusToCreate: GitStatus = {\n description,\n context: getGitStatusContextFromCombinedName(context),\n state: renovateToAzureStatusMapping[state],\n targetUrl,\n };\n await azureApiGit.createCommitStatus(\n statusToCreate,\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n );\n logger.trace(`Created commit status of ${state} on branch ${branchName}`);\n}\n\nexport async function mergePr({\n branchName,\n id: pullRequestId,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${pullRequestId}, ${branchName!})`);\n\n const pendingPolicyEvaluations =\n await getPendingBlockingPolicyEvaluations(pullRequestId);\n if (pendingPolicyEvaluations.length) {\n logger.debug(\n {\n pullRequestId,\n pendingPolicies: pendingPolicyEvaluations.map((evaluation) => ({\n name: evaluation.configuration?.type?.displayName,\n status: PolicyEvaluationStatus[evaluation.status!],\n })),\n },\n 'Not completing PR because branch policies have not been satisfied yet',\n );\n return false;\n }\n\n const azureApiGit = await azureApi.gitApi();\n\n let pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n\n const mergeStrategy =\n strategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(strategy);\n const objToUpdate: GitPullRequest = {\n status: PullRequestStatus.Completed,\n lastMergeSourceCommit: pr.lastMergeSourceCommit,\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.trace(\n `Updating PR ${pullRequestId} to status ${PullRequestStatus.Completed} (${\n PullRequestStatus[PullRequestStatus.Completed]\n }) with lastMergeSourceCommit ${\n // TODO: types (#22198)\n pr.lastMergeSourceCommit?.commitId\n } using mergeStrategy ${mergeStrategy} (${\n GitPullRequestMergeStrategy[mergeStrategy]\n })`,\n );\n\n try {\n const response = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n pullRequestId,\n );\n\n let retries = 0;\n let isClosed = response.status === PullRequestStatus.Completed;\n while (!isClosed && retries < 5) {\n retries += 1;\n const sleepMs = retries * 1000;\n logger.trace(\n { pullRequestId, status: pr.status, retries },\n `Updated PR to closed status but change has not taken effect yet. Retrying...`,\n );\n\n await setTimeout(sleepMs);\n pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n isClosed = pr.status === PullRequestStatus.Completed;\n }\n\n if (!isClosed) {\n logger.warn(\n {\n pullRequestId,\n status: pr.status,\n expectedPRStatus: PullRequestStatus[PullRequestStatus.Completed],\n actualPRStatus: PullRequestStatus[pr.status!],\n },\n 'Expected PR to have completed status. However, the PR has a different status',\n );\n }\n return true;\n } catch (err) {\n logger.debug({ err }, 'Failed to set the PR as completed.');\n return false;\n }\n}\n\nexport function massageMarkdown(input: string): string {\n // Remove any HTML we use\n return (\n smartTruncate(readOnlyIssueBody(input), maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'PR is renamed to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '')\n // Replace GitHub-style PR links with Azure DevOps format\n .replace(regEx(/\\]\\(\\.\\.\\/pull\\//g), '](!')\n // Replace GitHub-style PR references (#123) with Azure DevOps format, needed for text linking config migration PR.\n // Only match a standalone reference (preceded by start, whitespace or `(`) so we don't corrupt\n // HTML entities like `&#8203;` or URL anchors like `CHANGELOG.md#4780`.\n .replace(regEx(/(?<lead>^|[\\s(])#(?<num>\\d+)/g), '$<lead>!$<num>')\n );\n}\n\nexport function maxBodyLength(): number {\n return 4000;\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n return await issueService.findIssue(title);\n}\n\nexport async function ensureIssue(\n issueConfig: EnsureIssueConfig,\n): Promise<EnsureIssueResult | null> {\n return await issueService.ensureIssue(issueConfig);\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n return await issueService.ensureIssueClosing(title);\n}\n\nexport async function getIssueList(titleFilter?: string): Promise<Issue[]> {\n return await issueService.getIssueList(titleFilter);\n}\n\nasync function getUserIds(users: string[]): Promise<User[]> {\n const azureApiGit = await azureApi.gitApi();\n const azureApiCore = await azureApi.coreApi();\n const repos = await azureApiGit.getRepositories();\n const repo = repos.find((c) => c.id === config.repoId)!;\n const requiredReviewerPrefix = 'required:';\n const validReviewers = new Set<string>();\n\n // TODO #22198\n const teams = await azureHelper.getAllProjectTeams(repo.project!.id!);\n const members = await Promise.all(\n teams.map(\n async (t) =>\n await azureApiCore.getTeamMembersWithExtendedProperties(\n // TODO #22198\n repo.project!.id!,\n t.id!,\n ),\n ),\n );\n\n const ids: { id: string; name: string; isRequired: boolean }[] = [];\n members.forEach((listMembers) => {\n listMembers.forEach((m) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (\n (reviewer.toLowerCase() === m.identity?.displayName?.toLowerCase() ||\n reviewer.toLowerCase() === m.identity?.uniqueName?.toLowerCase()) &&\n ids.filter((c) => c.id === m.identity?.id).length === 0\n ) {\n // TODO #22198\n ids.push({\n id: m.identity.id!,\n name: reviewer,\n isRequired,\n });\n\n validReviewers.add(reviewer);\n }\n });\n });\n });\n\n teams.forEach((t) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n // v8 ignore else -- TODO: add test #40625\n if (\n reviewer.toLowerCase() === t.name?.toLowerCase() &&\n ids.filter((c) => c.id === t.id).length === 0\n ) {\n // TODO #22198\n ids.push({ id: t.id!, name: reviewer, isRequired });\n\n validReviewers.add(reviewer);\n }\n });\n });\n\n for (const u of users) {\n const reviewer = u.replace(requiredReviewerPrefix, '');\n if (!validReviewers.has(reviewer)) {\n logger.once.info(\n `${reviewer} is neither an Azure DevOps Team nor a user associated with a Team`,\n );\n }\n }\n\n return ids;\n}\n\n/**\n *\n * @param {number} issueNo\n * @param {string[]} assignees\n */\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.trace(`addAssignees(${issueNo}, [${assignees.join(', ')}])`);\n const ids = await getUserIds(assignees);\n await ensureComment({\n number: issueNo,\n topic: 'Add Assignees',\n content: ids.map((a) => `@<${a.id}>`).join(', '),\n });\n}\n\n/**\n *\n * @param {number} prNo\n * @param {string[]} reviewers\n */\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.trace(`addReviewers(${prNo}, [${reviewers.join(', ')}])`);\n const azureApiGit = await azureApi.gitApi();\n\n const ids = await getUserIds(reviewers);\n\n await Promise.all(\n ids.map(async (obj) => {\n await azureApiGit.createPullRequestReviewer(\n {\n isRequired: obj.isRequired,\n },\n config.repoId,\n prNo,\n obj.id,\n );\n logger.debug(`Reviewer added: ${obj.name}`);\n }),\n );\n}\n\nexport async function deleteLabel(\n prNumber: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${prNumber}`);\n const azureApiGit = await azureApi.gitApi();\n await azureApiGit.deletePullRequestLabels(config.repoId, prNumber, label);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["azureApi.getAuthenticatedUserId","azureApi.gitApi","hostRules.find","git.initRepo","azureHelper.getMergeMethod","azureHelper.getPolicyEvaluations","azureApi.coreApi","azureHelper.getAllProjectTeams"],"sources":["../../../../lib/modules/platform/azure/index.ts"],"sourcesContent":["import { setTimeout } from 'node:timers/promises';\nimport { isString } from '@sindresorhus/is';\nimport type { IGitApi } from 'azure-devops-node-api/GitApi.js';\nimport type {\n GitItem,\n GitPullRequest,\n GitPullRequestCommentThread,\n GitPullRequestSearchCriteria,\n GitStatus,\n GitVersionDescriptor,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport {\n GitPullRequestMergeStrategy,\n GitStatusState,\n GitVersionType,\n PullRequestStatus,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { PolicyEvaluationRecord } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { PolicyEvaluationStatus } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { getConfig } from '../../../config/defaults.ts';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport {\n REPOSITORY_ARCHIVED,\n REPOSITORY_EMPTY,\n REPOSITORY_NOT_FOUND,\n} from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { ExternalHostError } from '../../../types/errors/external-host-error.ts';\nimport type { BranchStatus } from '../../../types/index.ts';\nimport { parseJson } from '../../../util/common.ts';\nimport * as git from '../../../util/git/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { coerceObject } from '../../../util/object.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { sanitize } from '../../../util/sanitize.ts';\nimport { ensureTrailingSlash } from '../../../util/url.ts';\nimport { getPrBodyStruct } from '../pr-body.ts';\nimport type {\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformPrOptions,\n PlatformResult,\n Pr,\n ReattemptPlatformAutomergeConfig,\n RepoConfigParams,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types.ts';\nimport { getNewBranchName, repoFingerprint } from '../util.ts';\nimport { smartTruncate } from '../utils/pr-body.ts';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body.ts';\nimport * as azureApi from './azure-got-wrapper.ts';\nimport * as azureHelper from './azure-helper.ts';\nimport { IssueService } from './issue.ts';\nimport type { AzurePr, Config } from './types.ts';\nimport { AzurePrVote } from './types.ts';\nimport {\n getBranchNameWithoutRefsheadsPrefix,\n getGitStatusContextCombinedName,\n getGitStatusContextFromCombinedName,\n getRenovatePRFormat,\n getRepoByName,\n getStorageExtraCloneOpts,\n mapMergeStrategy,\n max4000Chars,\n} from './util.ts';\n\ninterface User {\n id: string;\n name: string;\n isRequired: boolean;\n}\n\ninterface GetRepoPullRequestsOptions {\n gitApi: IGitApi;\n searchCriteria: GitPullRequestSearchCriteria;\n skip: number;\n top: number;\n}\n\nlet config: Config = {} as any;\nlet issueService: IssueService;\nlet renovateUserId: string | undefined;\n\nconst defaults: {\n endpoint?: string;\n hostType: string;\n} = {\n hostType: 'azure',\n};\n\nfunction getRepoPullRequests({\n gitApi,\n searchCriteria,\n skip,\n top,\n}: GetRepoPullRequestsOptions): Promise<GitPullRequest[]> {\n const maxCommentLength = 0;\n return gitApi.getPullRequests(\n config.repoId,\n searchCriteria,\n config.project,\n maxCommentLength,\n skip,\n top,\n );\n}\n\nexport const id = 'azure';\n\nexport function initPlatform({\n endpoint,\n token,\n username,\n password,\n}: PlatformParams): Promise<PlatformResult> {\n if (!endpoint) {\n throw new Error('Init: You must configure an Azure DevOps endpoint');\n }\n if (!token && !(username && password)) {\n throw new Error(\n 'Init: You must configure an Azure DevOps token, or a username and password',\n );\n }\n // TODO: Add a connection check that endpoint/token combination are valid (#9593)\n const res = {\n endpoint: ensureTrailingSlash(endpoint),\n };\n defaults.endpoint = res.endpoint;\n azureApi.setEndpoint(res.endpoint);\n const credentials = token\n ? { token }\n : { username: username!, password: password! };\n return azureApi.getAuthenticatedUserId(credentials).then((userId) => {\n renovateUserId = userId;\n return res;\n });\n}\n\nexport async function getRepos(): Promise<string[]> {\n logger.debug('Autodiscovering Azure DevOps repositories');\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n return repos\n .filter((repo) => repo.isDisabled !== true)\n .map((repo) => `${repo.project?.name}/${repo.name}`);\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n try {\n const azureApiGit = await azureApi.gitApi();\n\n let repoId: string | undefined;\n if (repoName) {\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repoName, repos);\n repoId = repo?.id;\n } else {\n repoId = config.repoId;\n }\n\n if (!repoId) {\n logger.debug('No repoId so cannot getRawFile');\n return null;\n }\n\n let item: GitItem | undefined;\n const versionDescriptor: GitVersionDescriptor = {\n version: branchOrTag,\n } satisfies GitVersionDescriptor;\n // Try to get file from repo with tag first, if not found, then try with branch #36835\n for (const versionType of [GitVersionType.Tag, GitVersionType.Branch]) {\n versionDescriptor.versionType = versionType;\n\n item = await azureApiGit.getItem(\n repoId, // repositoryId\n fileName, // path\n undefined, // project\n undefined, // scopePath\n undefined, // recursionLevel\n undefined, // includeContentMetadata\n undefined, // latestProcessedChange\n undefined, // download\n branchOrTag ? versionDescriptor : undefined, // versionDescriptor\n true, // includeContent\n );\n if (item) {\n break; // exit loop if item is found\n } else {\n logger.debug(\n `File: ${fileName} not found in ${repoName} with ${versionType}: ${branchOrTag}`,\n );\n }\n }\n return item?.content ?? null;\n } catch (err) /* v8 ignore next -- Azure API failure modes (service unavailable, malformed items) are not mocked in specs */ {\n if (\n err.message?.includes('<title>Azure DevOps Services Unavailable</title>')\n ) {\n logger.debug(\n 'Azure DevOps is currently unavailable when attempting to fetch file - throwing ExternalHostError',\n );\n throw new ExternalHostError(err, id);\n }\n if (err.code === 'ECONNRESET' || err.code === 'ETIMEDOUT') {\n throw new ExternalHostError(err, id);\n }\n if (err.statusCode && err.statusCode >= 500 && err.statusCode < 600) {\n throw new ExternalHostError(err, id);\n }\n throw err;\n }\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport function applyRepoConfig({ azureWorkItemType }: RepoConfigParams): void {\n if (!azureWorkItemType || azureWorkItemType === config.workItemType) {\n return;\n }\n config.workItemType = azureWorkItemType;\n issueService = new IssueService(config);\n}\n\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n azureWorkItemType,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n config = {\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor'),\n repository,\n } as Config;\n const azureApiGit = await azureApi.gitApi();\n const repos = await azureApiGit.getRepositories();\n const repo = getRepoByName(repository, repos);\n if (!repo) {\n logger.error({ repos, repo }, 'Could not find repo in repo list');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ repositoryDetails: repo }, 'Repository details');\n if (repo.isDisabled) {\n logger.debug('Repository is disabled- throwing error to abort renovation');\n throw new Error(REPOSITORY_ARCHIVED);\n }\n /* v8 ignore next -- defensive: Azure omits defaultBranch only for empty repos, which abort earlier in specs */\n if (!repo.defaultBranch) {\n logger.debug('Repo is empty');\n throw new Error(REPOSITORY_EMPTY);\n }\n // TODO #22198\n config.repoId = repo.id!;\n\n config.project = repo.project!.name!;\n config.projectId = repo.project!.id!;\n config.workItemType = azureWorkItemType ?? getConfig().azureWorkItemType!;\n issueService = new IssueService(config);\n config.owner = '?owner?';\n logger.debug(`${repository} owner = ${config.owner}`);\n const defaultBranch = repo.defaultBranch.replace('refs/heads/', '');\n config.defaultBranch = defaultBranch;\n logger.debug(`${repository} default branch = ${defaultBranch}`);\n config.mergeMethods = {};\n config.repoForceRebase = false;\n\n const [projectName, repoName] = repository.split('/');\n const opts = hostRules.find({\n hostType: defaults.hostType,\n url: defaults.endpoint,\n });\n // TODO: types (#22198)\n const manualUrl = `${defaults.endpoint!}${encodeURIComponent(\n projectName,\n )}/_git/${encodeURIComponent(repoName)}`;\n const url = repo.remoteUrl ?? manualUrl;\n await git.initRepo({\n ...config,\n url,\n extraCloneOpts: getStorageExtraCloneOpts(opts),\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch,\n isFork: false,\n repoFingerprint: repoFingerprint(repo.id!, defaults.endpoint),\n };\n return repoConfig;\n}\n\nexport async function getPrList(): Promise<AzurePr[]> {\n logger.debug('getPrList()');\n if (!config.prList) {\n const azureApiGit = await azureApi.gitApi();\n\n let prs: GitPullRequest[] = [];\n let fetchedPrs: GitPullRequest[];\n let skip = 0;\n do {\n fetchedPrs = await getRepoPullRequests({\n gitApi: azureApiGit,\n searchCriteria: {\n status: PullRequestStatus.All,\n // fetch only prs directly created on the repo and not by forks\n sourceRepositoryId: config.repoId,\n ...(!config.ignorePrAuthor &&\n renovateUserId && { creatorId: renovateUserId }),\n },\n skip,\n top: 100,\n });\n prs = prs.concat(fetchedPrs);\n skip += 100;\n } while (fetchedPrs.length > 0);\n\n config.prList = prs.map(getRenovatePRFormat);\n logger.debug(`Retrieved Pull Requests count: ${config.prList.length}`);\n }\n return config.prList;\n}\n\nexport async function getPr(pullRequestId: number): Promise<Pr | null> {\n logger.debug(`getPr(${pullRequestId})`);\n if (!pullRequestId) {\n return null;\n }\n const azurePr = (await getPrList()).find(\n (item) => item.number === pullRequestId,\n );\n\n if (!azurePr) {\n return null;\n }\n\n const azureApiGit = await azureApi.gitApi();\n // the PR list returns descriptions truncated to 400 characters, so read the\n // full one for the body hash\n const { description } = await azureApiGit.getPullRequestById(\n pullRequestId,\n config.project,\n );\n azurePr.bodyStruct = getPrBodyStruct(description);\n\n const labels = await azureApiGit.getPullRequestLabels(\n config.repoId,\n pullRequestId,\n );\n\n azurePr.labels = labels\n .filter((label) => label.active)\n .map((label) => label.name)\n .filter(isString);\n return azurePr;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n targetBranch,\n includeOtherAuthors,\n}: FindPRConfig): Promise<Pr | null> {\n let prsFiltered: Pr[] = [];\n try {\n if (includeOtherAuthors) {\n const azureApiGit = await azureApi.gitApi();\n const [pr] = await getRepoPullRequests({\n gitApi: azureApiGit,\n searchCriteria: {\n sourceRefName: getNewBranchName(branchName),\n sourceRepositoryId: config.repoId,\n status: PullRequestStatus.Active,\n ...(targetBranch && {\n targetRefName: getNewBranchName(targetBranch),\n }),\n },\n skip: 0,\n top: 1,\n });\n return pr ? getRenovatePRFormat(pr) : null;\n }\n\n const prs = await getPrList();\n\n prsFiltered = prs.filter(\n (item) => item.sourceRefName === getNewBranchName(branchName),\n );\n\n if (prTitle) {\n prsFiltered = prsFiltered.filter(\n (item) => item.title.toUpperCase() === prTitle.toUpperCase(),\n );\n }\n\n switch (state) {\n case 'all':\n // no more filter needed, we can go further...\n break;\n case '!open':\n prsFiltered = prsFiltered.filter((item) => item.state !== 'open');\n break;\n default:\n prsFiltered = prsFiltered.filter((item) => item.state === state);\n break;\n }\n } catch (err) {\n logger.error({ err }, 'findPr error');\n }\n if (prsFiltered.length === 0) {\n return null;\n }\n if (targetBranch && prsFiltered.length > 1) {\n const pr = prsFiltered.find((item) => item.targetBranch === targetBranch);\n if (pr) {\n return pr;\n }\n }\n return prsFiltered[0];\n}\n\nexport async function getBranchPr(\n branchName: string,\n targetBranch?: string,\n): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName}, ${targetBranch})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n targetBranch,\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatusCheck(branchName: string): Promise<GitStatus[]> {\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n\n // TODO: fix undefined (#22198)\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n // only grab the latest statuses, it will group any by context\n return azureApiGit.getStatuses(\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n undefined,\n undefined,\n undefined,\n true,\n );\n}\n\nconst azureToRenovateStatusMapping: Record<GitStatusState, BranchStatus> = {\n [GitStatusState.Succeeded]: 'green',\n [GitStatusState.NotApplicable]: 'green',\n [GitStatusState.NotSet]: 'yellow',\n [GitStatusState.Pending]: 'yellow',\n [GitStatusState.PartiallySucceeded]: 'yellow',\n [GitStatusState.Error]: 'red',\n [GitStatusState.Failed]: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (getGitStatusContextCombinedName(check.context) === context) {\n // TODO #22198\n return azureToRenovateStatusMapping[check.state!] ?? 'yellow';\n }\n }\n return null;\n}\n\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n const statuses = await getStatusCheck(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status) =>\n status.state === GitStatusState.Error ||\n status.state === GitStatusState.Failed,\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status) =>\n status.state === GitStatusState.NotSet ||\n status.state === GitStatusState.Pending,\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === GitStatusState.Succeeded &&\n status.context?.genre === 'renovate',\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nasync function getMergeStrategy(\n targetRefName: string,\n): Promise<GitPullRequestMergeStrategy> {\n return (\n config.mergeMethods[targetRefName] ??\n (config.mergeMethods[targetRefName] = await azureHelper.getMergeMethod(\n config.repoId,\n config.project,\n targetRefName,\n config.defaultBranch,\n ))\n );\n}\n\nasync function getPendingBlockingPolicyEvaluations(\n pullRequestId: number,\n): Promise<PolicyEvaluationRecord[]> {\n const artifactId = `vstfs:///CodeReview/CodeReviewId/${config.projectId}/${pullRequestId}`;\n const policyEvaluations = await azureHelper.getPolicyEvaluations(\n config.project,\n artifactId,\n );\n logger.debug(\n { pullRequestId, artifactId, policyEvaluations },\n 'Retrieved policy evaluations for PR',\n );\n return policyEvaluations.filter(\n (evaluation) =>\n evaluation.configuration?.isBlocking &&\n evaluation.status !== PolicyEvaluationStatus.Approved &&\n evaluation.status !== PolicyEvaluationStatus.NotApplicable,\n );\n}\n\nasync function setPlatformAutomerge(\n azureApiGit: IGitApi,\n pr: GitPullRequest,\n platformPrOptions: PlatformPrOptions,\n): Promise<GitPullRequest> {\n let mergeStrategy: GitPullRequestMergeStrategy;\n if (platformPrOptions.automergeStrategy === 'auto') {\n mergeStrategy = await getMergeStrategy(pr.targetRefName!);\n } else {\n mergeStrategy = mapMergeStrategy(platformPrOptions.automergeStrategy);\n }\n const prOptions: GitPullRequest = {\n autoCompleteSetBy: {\n // TODO #22198\n id: pr.createdBy!.id,\n },\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.debug(\n {\n prOptions,\n repoId: config.repoId,\n pullRequestId: pr.pullRequestId!,\n },\n // TODO #22198\n `Updating PR ${pr.pullRequestId!} to specify platformAutomerge settings`,\n );\n\n return await azureApiGit.updatePullRequest(\n prOptions,\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n );\n}\n\nexport async function reattemptPlatformAutomerge({\n number,\n platformPrOptions,\n}: ReattemptPlatformAutomergeConfig): Promise<void> {\n try {\n const azureApiGit = await azureApi.gitApi();\n const pr = await azureApiGit.getPullRequestById(number, config.project);\n await setPlatformAutomerge(\n azureApiGit,\n pr,\n coerceObject(platformPrOptions),\n );\n\n logger.debug(`PR platform automerge re-attempted...prNo: ${number}`);\n } catch (err) {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n }\n}\n\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: body,\n labels,\n draftPR = false,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n const sourceRefName = getNewBranchName(sourceBranch);\n const targetRefName = getNewBranchName(targetBranch);\n const description = max4000Chars(sanitize(body));\n const azureApiGit = await azureApi.gitApi();\n const workItemRefs = [\n {\n id: platformPrOptions?.azureWorkItemId?.toString(),\n },\n ];\n let pr: GitPullRequest = await azureApiGit.createPullRequest(\n {\n sourceRefName,\n targetRefName,\n title,\n description,\n workItemRefs,\n isDraft: draftPR,\n },\n config.repoId,\n );\n if (platformPrOptions?.usePlatformAutomerge) {\n pr = await setPlatformAutomerge(azureApiGit, pr, platformPrOptions);\n }\n if (platformPrOptions?.autoApprove) {\n const approver = {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n };\n\n logger.debug(\n {\n approver,\n\n repoId: config.repoId,\n // TODO #22198\n pullRequestId: pr.pullRequestId!,\n prCreatedBy: {\n id: pr.createdBy!.id!,\n },\n },\n // TODO #22198\n `Auto-approving PR ${pr.pullRequestId!}`,\n );\n\n await azureApiGit.createPullRequestReviewer(\n approver,\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n await Promise.all(\n labels!.map((label) =>\n azureApiGit.createPullRequestLabel(\n {\n name: label,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n ),\n ),\n );\n\n const result = getRenovatePRFormat(pr);\n if (config.prList) {\n config.prList.push(result);\n }\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: body,\n state,\n platformPrOptions,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n\n const azureApiGit = await azureApi.gitApi();\n const objToUpdate: GitPullRequest = {\n title,\n };\n\n if (targetBranch) {\n objToUpdate.targetRefName = getNewBranchName(targetBranch);\n }\n\n if (body) {\n objToUpdate.description = max4000Chars(sanitize(body));\n }\n\n if (state === 'open') {\n await azureApiGit.updatePullRequest(\n {\n status: PullRequestStatus.Active,\n },\n config.repoId,\n prNo,\n );\n } else if (state === 'closed') {\n objToUpdate.status = PullRequestStatus.Abandoned;\n }\n if (\n platformPrOptions?.autoApprove ||\n platformPrOptions?.usePlatformAutomerge\n ) {\n const pr = await azureApiGit.getPullRequestById(prNo, config.project);\n if (platformPrOptions.autoApprove) {\n await azureApiGit.createPullRequestReviewer(\n {\n reviewerUrl: pr.createdBy!.url,\n vote: AzurePrVote.Approved,\n isFlagged: false,\n isRequired: false,\n },\n config.repoId,\n // TODO #22198\n pr.pullRequestId!,\n pr.createdBy!.id!,\n );\n }\n // auto-complete keeps the merge commit message it was set with, so keep it in sync with the title\n // only when Renovate set auto-complete, which it does with the PR creator's id\n if (\n platformPrOptions.usePlatformAutomerge &&\n pr.autoCompleteSetBy?.id &&\n pr.autoCompleteSetBy.id === pr.createdBy?.id &&\n pr.completionOptions?.mergeCommitMessage !== title\n ) {\n objToUpdate.completionOptions = {\n ...pr.completionOptions,\n mergeCommitMessage: title,\n };\n }\n }\n\n const updatedPr = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n prNo,\n );\n if (config.prList) {\n const prToCache = getRenovatePRFormat(updatedPr);\n // We need to update the cached entry for this PR\n const existingIndex = config.prList.findIndex(\n (item) => item.number === prNo,\n );\n /* v8 ignore next: should not happen */\n if (existingIndex === -1) {\n logger.warn({ prNo }, 'PR not found in cache');\n // Add to cache\n config.prList.push(prToCache);\n } else {\n // overwrite existing PR in cache\n config.prList[existingIndex] = prToCache;\n }\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n logger.debug(`ensureComment(${number}, ${topic!}, content)`);\n const header = topic ? `### ${topic}\\n\\n` : '';\n const body = `${header}${sanitize(massageMarkdown(content))}`;\n const azureApiGit = await azureApi.gitApi();\n\n const threads = await azureApiGit.getThreads(config.repoId, number);\n let threadIdFound: number | undefined;\n let commentIdFound: number | undefined;\n let commentNeedsUpdating = false;\n threads.forEach((thread) => {\n const firstCommentContent = thread.comments?.[0].content;\n if (\n (topic && firstCommentContent?.startsWith(header)) === true ||\n (!topic && firstCommentContent === body)\n ) {\n threadIdFound = thread.id;\n commentIdFound = thread.comments?.[0].id;\n commentNeedsUpdating = firstCommentContent !== body;\n }\n });\n\n if (!threadIdFound) {\n await azureApiGit.createThread(\n {\n comments: [{ content: body, commentType: 1, parentCommentId: 0 }],\n status: 1,\n },\n config.repoId,\n number,\n );\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await azureApiGit.updateComment(\n {\n content: body,\n },\n config.repoId,\n number,\n threadIdFound,\n // TODO #22198\n commentIdFound!,\n );\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment updated',\n );\n } else {\n logger.debug(\n { repository: config.repository, issueNo: number, topic },\n 'Comment is already up-to-date',\n );\n }\n\n return true;\n}\n\nexport async function ensureCommentRemoval(\n removeConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = removeConfig;\n const key =\n removeConfig.type === 'by-topic'\n ? removeConfig.topic\n : removeConfig.content;\n logger.debug(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n\n const azureApiGit = await azureApi.gitApi();\n const threads = await azureApiGit.getThreads(config.repoId, issueNo);\n\n let threadIdFound: number | null | undefined = null;\n if (removeConfig.type === 'by-topic') {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n !!thread.comments?.[0].content?.startsWith(\n `### ${removeConfig.topic}\\n\\n`,\n ),\n );\n threadIdFound = thread?.id;\n } else {\n const thread = threads.find(\n (thread: GitPullRequestCommentThread): boolean =>\n thread.comments?.[0].content?.trim() === removeConfig.content,\n );\n threadIdFound = thread?.id;\n }\n\n if (threadIdFound) {\n await azureApiGit.updateThread(\n {\n status: 4, // close\n },\n config.repoId,\n issueNo,\n threadIdFound,\n );\n }\n}\n\nconst renovateToAzureStatusMapping: Record<BranchStatus, GitStatusState> = {\n ['green']: GitStatusState.Succeeded,\n ['yellow']: GitStatusState.Pending,\n ['red']: GitStatusState.Failed,\n};\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n logger.debug(\n `setBranchStatus(${branchName}, ${context}, ${description}, ${state}, ${targetUrl!})`,\n );\n const azureApiGit = await azureApi.gitApi();\n const branch = await azureApiGit.getBranch(\n config.repoId,\n getBranchNameWithoutRefsheadsPrefix(branchName)!,\n );\n const statusToCreate: GitStatus = {\n description,\n context: getGitStatusContextFromCombinedName(context),\n state: renovateToAzureStatusMapping[state],\n targetUrl,\n };\n await azureApiGit.createCommitStatus(\n statusToCreate,\n // TODO #22198\n branch.commit!.commitId!,\n config.repoId,\n );\n logger.trace(`Created commit status of ${state} on branch ${branchName}`);\n}\n\nexport async function mergePr({\n branchName,\n id: pullRequestId,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${pullRequestId}, ${branchName!})`);\n\n const pendingPolicyEvaluations =\n await getPendingBlockingPolicyEvaluations(pullRequestId);\n if (pendingPolicyEvaluations.length) {\n logger.debug(\n {\n pullRequestId,\n pendingPolicies: pendingPolicyEvaluations.map((evaluation) => ({\n name: evaluation.configuration?.type?.displayName,\n status: PolicyEvaluationStatus[evaluation.status!],\n })),\n },\n 'Not completing PR because branch policies have not been satisfied yet',\n );\n return false;\n }\n\n const azureApiGit = await azureApi.gitApi();\n\n let pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n\n const mergeStrategy =\n strategy === 'auto'\n ? await getMergeStrategy(pr.targetRefName!)\n : mapMergeStrategy(strategy);\n const objToUpdate: GitPullRequest = {\n status: PullRequestStatus.Completed,\n lastMergeSourceCommit: pr.lastMergeSourceCommit,\n completionOptions: {\n mergeStrategy,\n deleteSourceBranch: true,\n mergeCommitMessage: pr.title,\n },\n };\n\n logger.trace(\n `Updating PR ${pullRequestId} to status ${PullRequestStatus.Completed} (${\n PullRequestStatus[PullRequestStatus.Completed]\n }) with lastMergeSourceCommit ${\n // TODO: types (#22198)\n pr.lastMergeSourceCommit?.commitId\n } using mergeStrategy ${mergeStrategy} (${\n GitPullRequestMergeStrategy[mergeStrategy]\n })`,\n );\n\n try {\n const response = await azureApiGit.updatePullRequest(\n objToUpdate,\n config.repoId,\n pullRequestId,\n );\n\n let retries = 0;\n let isClosed = response.status === PullRequestStatus.Completed;\n while (!isClosed && retries < 5) {\n retries += 1;\n const sleepMs = retries * 1000;\n logger.trace(\n { pullRequestId, status: pr.status, retries },\n `Updated PR to closed status but change has not taken effect yet. Retrying...`,\n );\n\n await setTimeout(sleepMs);\n pr = await azureApiGit.getPullRequestById(pullRequestId, config.project);\n isClosed = pr.status === PullRequestStatus.Completed;\n }\n\n if (!isClosed) {\n logger.warn(\n {\n pullRequestId,\n status: pr.status,\n expectedPRStatus: PullRequestStatus[PullRequestStatus.Completed],\n actualPRStatus: PullRequestStatus[pr.status!],\n },\n 'Expected PR to have completed status. However, the PR has a different status',\n );\n }\n return true;\n } catch (err) {\n logger.debug({ err }, 'Failed to set the PR as completed.');\n return false;\n }\n}\n\nexport function massageMarkdown(input: string): string {\n // Remove any HTML we use\n return (\n smartTruncate(readOnlyIssueBody(input), maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'PR is renamed to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '')\n // Replace GitHub-style PR links with Azure DevOps format\n .replace(regEx(/\\]\\(\\.\\.\\/pull\\//g), '](!')\n // Replace GitHub-style PR references (#123) with Azure DevOps format, needed for text linking config migration PR.\n // Only match a standalone reference (preceded by start, whitespace or `(`) so we don't corrupt\n // HTML entities like `&#8203;` or URL anchors like `CHANGELOG.md#4780`.\n .replace(regEx(/(?<lead>^|[\\s(])#(?<num>\\d+)/g), '$<lead>!$<num>')\n );\n}\n\nexport function maxBodyLength(): number {\n return 4000;\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n return await issueService.findIssue(title);\n}\n\nexport async function ensureIssue(\n issueConfig: EnsureIssueConfig,\n): Promise<EnsureIssueResult | null> {\n return await issueService.ensureIssue(issueConfig);\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n return await issueService.ensureIssueClosing(title);\n}\n\nexport async function getIssueList(titleFilter?: string): Promise<Issue[]> {\n return await issueService.getIssueList(titleFilter);\n}\n\nasync function getUserIds(users: string[]): Promise<User[]> {\n const azureApiGit = await azureApi.gitApi();\n const azureApiCore = await azureApi.coreApi();\n const repos = await azureApiGit.getRepositories();\n const repo = repos.find((c) => c.id === config.repoId)!;\n const requiredReviewerPrefix = 'required:';\n const validReviewers = new Set<string>();\n\n // TODO #22198\n const teams = await azureHelper.getAllProjectTeams(repo.project!.id!);\n const members = await Promise.all(\n teams.map(\n async (t) =>\n await azureApiCore.getTeamMembersWithExtendedProperties(\n // TODO #22198\n repo.project!.id!,\n t.id!,\n ),\n ),\n );\n\n const ids: { id: string; name: string; isRequired: boolean }[] = [];\n members.forEach((listMembers) => {\n listMembers.forEach((m) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n if (\n (reviewer.toLowerCase() === m.identity?.displayName?.toLowerCase() ||\n reviewer.toLowerCase() === m.identity?.uniqueName?.toLowerCase()) &&\n ids.filter((c) => c.id === m.identity?.id).length === 0\n ) {\n // TODO #22198\n ids.push({\n id: m.identity.id!,\n name: reviewer,\n isRequired,\n });\n\n validReviewers.add(reviewer);\n }\n });\n });\n });\n\n teams.forEach((t) => {\n users.forEach((r) => {\n let reviewer = r;\n let isRequired = false;\n if (reviewer.startsWith(requiredReviewerPrefix)) {\n reviewer = reviewer.replace(requiredReviewerPrefix, '');\n isRequired = true;\n }\n // v8 ignore else -- TODO: add test #40625\n if (\n reviewer.toLowerCase() === t.name?.toLowerCase() &&\n ids.filter((c) => c.id === t.id).length === 0\n ) {\n // TODO #22198\n ids.push({ id: t.id!, name: reviewer, isRequired });\n\n validReviewers.add(reviewer);\n }\n });\n });\n\n for (const u of users) {\n const reviewer = u.replace(requiredReviewerPrefix, '');\n if (!validReviewers.has(reviewer)) {\n logger.once.info(\n `${reviewer} is neither an Azure DevOps Team nor a user associated with a Team`,\n );\n }\n }\n\n return ids;\n}\n\n/**\n *\n * @param {number} issueNo\n * @param {string[]} assignees\n */\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.trace(`addAssignees(${issueNo}, [${assignees.join(', ')}])`);\n const ids = await getUserIds(assignees);\n await ensureComment({\n number: issueNo,\n topic: 'Add Assignees',\n content: ids.map((a) => `@<${a.id}>`).join(', '),\n });\n}\n\n/**\n *\n * @param {number} prNo\n * @param {string[]} reviewers\n */\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.trace(`addReviewers(${prNo}, [${reviewers.join(', ')}])`);\n const azureApiGit = await azureApi.gitApi();\n\n const ids = await getUserIds(reviewers);\n\n await Promise.all(\n ids.map(async (obj) => {\n await azureApiGit.createPullRequestReviewer(\n {\n isRequired: obj.isRequired,\n },\n config.repoId,\n prNo,\n obj.id,\n );\n logger.debug(`Reviewer added: ${obj.name}`);\n }),\n );\n}\n\nexport async function deleteLabel(\n prNumber: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${prNumber}`);\n const azureApiGit = await azureApi.gitApi();\n await azureApiGit.deletePullRequestLabels(config.repoId, prNumber, label);\n}\n"],"mappings":"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"}
@@ -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