renovate 40.0.0-next.10 → 40.0.0-next.12

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 (56) hide show
  1. package/dist/config/decrypt/legacy.js +0 -1
  2. package/dist/config/decrypt/legacy.js.map +1 -1
  3. package/dist/config/decrypt.js +2 -2
  4. package/dist/config/decrypt.js.map +1 -1
  5. package/dist/config/migrate-validate.js +3 -2
  6. package/dist/config/migrate-validate.js.map +1 -1
  7. package/dist/config/migration.js +2 -1
  8. package/dist/config/migration.js.map +1 -1
  9. package/dist/config/options/index.js +1 -1
  10. package/dist/config/options/index.js.map +1 -1
  11. package/dist/config/parse.js +2 -2
  12. package/dist/config/parse.js.map +1 -1
  13. package/dist/config/presets/gitea/index.js +0 -1
  14. package/dist/config/presets/gitea/index.js.map +1 -1
  15. package/dist/config/presets/github/index.js +0 -1
  16. package/dist/config/presets/github/index.js.map +1 -1
  17. package/dist/config/presets/http/index.js +0 -1
  18. package/dist/config/presets/http/index.js.map +1 -1
  19. package/dist/config/presets/index.js +0 -7
  20. package/dist/config/presets/index.js.map +1 -1
  21. package/dist/config/presets/internal/index.js +1 -3
  22. package/dist/config/presets/internal/index.js.map +1 -1
  23. package/dist/config/validation.js +2 -4
  24. package/dist/config/validation.js.map +1 -1
  25. package/dist/config-validator.js +0 -1
  26. package/dist/config-validator.js.map +1 -1
  27. package/dist/constants/category.js +0 -1
  28. package/dist/constants/category.js.map +1 -1
  29. package/dist/instrumentation/index.js +5 -3
  30. package/dist/instrumentation/index.js.map +1 -1
  31. package/dist/logger/cmd-serializer.js +0 -1
  32. package/dist/logger/cmd-serializer.js.map +1 -1
  33. package/dist/logger/config-serializer.js +0 -1
  34. package/dist/logger/config-serializer.js.map +1 -1
  35. package/dist/logger/index.js +0 -3
  36. package/dist/logger/index.js.map +1 -1
  37. package/dist/logger/once.js +4 -2
  38. package/dist/logger/once.js.map +1 -1
  39. package/dist/logger/pretty-stdout.js +0 -1
  40. package/dist/logger/pretty-stdout.js.map +1 -1
  41. package/dist/logger/renovate-logger.js +1 -1
  42. package/dist/logger/renovate-logger.js.map +1 -1
  43. package/dist/logger/utils.js +5 -10
  44. package/dist/logger/utils.js.map +1 -1
  45. package/dist/proxy.js +2 -1
  46. package/dist/proxy.js.map +1 -1
  47. package/dist/renovate.js +2 -2
  48. package/dist/renovate.js.map +1 -1
  49. package/dist/util/cache/package/redis.js +0 -1
  50. package/dist/util/cache/package/redis.js.map +1 -1
  51. package/dist/util/http/legacy.js +0 -1
  52. package/dist/util/http/legacy.js.map +1 -1
  53. package/dist/workers/repository/cache.js +0 -1
  54. package/dist/workers/repository/cache.js.map +1 -1
  55. package/package.json +2 -2
  56. package/renovate-schema.json +1 -1
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.tryDecryptPublicKeyPKCS1 = tryDecryptPublicKeyPKCS1;
4
4
  exports.tryDecryptPublicKeyDefault = tryDecryptPublicKeyDefault;
5
5
  const tslib_1 = require("tslib");
6
- /** istanbul ignore file */
7
6
  const node_crypto_1 = tslib_1.__importDefault(require("node:crypto"));
8
7
  const logger_1 = require("../../logger");
9
8
  function tryDecryptPublicKeyPKCS1(privateKey, encryptedStr) {
@@ -1 +1 @@
1
- {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../lib/config/decrypt/legacy.ts"],"names":[],"mappings":";;AAIA,4DAmBC;AAED,gEAcC;;AAvCD,2BAA2B;AAC3B,sEAAiC;AACjC,yCAAsC;AAEtC,SAAgB,wBAAwB,CACtC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CACb;YACE,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,qBAAM,CAAC,SAAS,CAAC,iBAAiB;SAC5C,EACD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC;aACA,QAAQ,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,0BAA0B,CACxC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;aAC/D,QAAQ,EAAE,CAAC;QACd,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["/** istanbul ignore file */\nimport crypto from 'node:crypto';\nimport { logger } from '../../logger';\n\nexport function tryDecryptPublicKeyPKCS1(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(\n {\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PADDING,\n },\n Buffer.from(encryptedStr, 'base64'),\n )\n .toString();\n } catch {\n logger.debug('Could not decrypt using PKCS1 padding');\n }\n return decryptedStr;\n}\n\nexport function tryDecryptPublicKeyDefault(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(privateKey, Buffer.from(encryptedStr, 'base64'))\n .toString();\n logger.debug('Decrypted config using default padding');\n } catch {\n logger.debug('Could not decrypt using default padding');\n }\n return decryptedStr;\n}\n"]}
1
+ {"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../lib/config/decrypt/legacy.ts"],"names":[],"mappings":";;AAGA,4DAmBC;AAED,gEAcC;;AAtCD,sEAAiC;AACjC,yCAAsC;AAEtC,SAAgB,wBAAwB,CACtC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CACb;YACE,GAAG,EAAE,UAAU;YACf,OAAO,EAAE,qBAAM,CAAC,SAAS,CAAC,iBAAiB;SAC5C,EACD,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC;aACA,QAAQ,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAgB,0BAA0B,CACxC,UAAkB,EAClB,YAAoB;IAEpB,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,YAAY,GAAG,qBAAM;aAClB,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;aAC/D,QAAQ,EAAE,CAAC;QACd,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC","sourcesContent":["import crypto from 'node:crypto';\nimport { logger } from '../../logger';\n\nexport function tryDecryptPublicKeyPKCS1(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(\n {\n key: privateKey,\n padding: crypto.constants.RSA_PKCS1_PADDING,\n },\n Buffer.from(encryptedStr, 'base64'),\n )\n .toString();\n } catch {\n logger.debug('Could not decrypt using PKCS1 padding');\n }\n return decryptedStr;\n}\n\nexport function tryDecryptPublicKeyDefault(\n privateKey: string,\n encryptedStr: string,\n): string | null {\n let decryptedStr: string | null = null;\n try {\n decryptedStr = crypto\n .privateDecrypt(privateKey, Buffer.from(encryptedStr, 'base64'))\n .toString();\n logger.debug('Decrypted config using default padding');\n } catch {\n logger.debug('Could not decrypt using default padding');\n }\n return decryptedStr;\n}\n"]}
@@ -31,10 +31,11 @@ async function tryDecrypt(privateKey, encryptedStr, repository, keyName) {
31
31
  }
32
32
  else {
33
33
  decryptedStr = (0, legacy_1.tryDecryptPublicKeyPKCS1)(privateKey, encryptedStr);
34
- // istanbul ignore if
34
+ /* v8 ignore start: not testable */
35
35
  if (is_1.default.string(decryptedStr)) {
36
36
  logger_1.logger.warn({ keyName }, 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.');
37
37
  }
38
+ /* v8 ignore stop */
38
39
  }
39
40
  }
40
41
  return decryptedStr;
@@ -42,7 +43,6 @@ async function tryDecrypt(privateKey, encryptedStr, repository, keyName) {
42
43
  function validateDecryptedValue(decryptedObjStr, repository) {
43
44
  try {
44
45
  const decryptedObj = schema_1.DecryptedObject.safeParse(decryptedObjStr);
45
- // istanbul ignore if
46
46
  if (!decryptedObj.success) {
47
47
  const error = new Error('config-validation');
48
48
  error.validationError = `Could not parse decrypted config.`;
@@ -1 +1 @@
1
- {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":";;AAgBA,gCAkCC;AAuED,sCAyFC;;AAlND,kEAAkC;AAClC,gEAAgE;AAChE,sCAAmC;AACnC,yCAAsC;AACtC,+CAA0D;AAC1D,qCAAkD;AAClD,2CAAkD;AAClD,6CAG0B;AAC1B,+CAAsD;AACtD,qCAAwC;AACxC,qCAA2C;AAGpC,KAAK,UAAU,UAAU,CAC9B,UAAkB,EAClB,YAAoB,EACpB,UAAkB,EAClB,OAAe;IAEf,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,UAAU,EAAE,UAAU,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACpE,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,MAAM;YAC3C,CAAC,CAAC,MAAM,IAAA,2BAAiB,EAAC,UAAU,EAAE,YAAY,CAAC;YACnD,CAAC,CAAC,MAAM,IAAA,uBAAe,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACtD,IAAI,eAAe,EAAE,CAAC;YACpB,YAAY,GAAG,sBAAsB,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,IAAA,mCAA0B,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACpE,IAAI,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,eAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,EACX,6FAA6F,CAC9F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,IAAA,iCAAwB,EAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAClE,qBAAqB;YACrB,IAAI,YAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC5B,eAAM,CAAC,IAAI,CACT,EAAE,OAAO,EAAE,EACX,2FAA2F,CAC5F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAC7B,eAAuB,EACvB,UAAkB;IAElB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,wBAAe,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAChE,qBAAqB;QACrB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAe,GAAG,mCAAmC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC;QAExD,IAAI,CAAC,YAAE,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAe,GAAG,+CAA+C,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,CAAC,YAAE,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,KAAK,CAAC,eAAe,GAAG,+CAA+C,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,GAAG;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,yBAAmB,EAAC,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,YAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAChD,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,WAAW,EAAE,CACpC,CAAC;YACF,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC5D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,eAAM,CAAC,KAAK,CACV,EAAE,WAAW,EAAE,EACf,4CAA4C,CAC7C,CAAC;YACF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC1C,KAAK,CAAC,eAAe,GAAG,0DAA0D,WAAW,IAAI,CAAC;YAClG,MAAM,KAAK,CAAC;QACd,CAAC;QAED,4BAA4B;QAC5B,IACE,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAC7B,UAAU,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC/C,EACD,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,EAAE,qCAAqC,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,KAAK,CAAC,eAAe,GAAG,mDAAmD,WAAW,IAAI,CAAC;QAC3F,MAAM,KAAK,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,kCAAkC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,aAAa,CACjC,MAAsB,EACtB,UAAkB;IAElB,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,qBAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,qBAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,KAAK,WAAW,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAExD,MAAM,gBAAgB,GAAG,qBAAY,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;YAC9D,IAAI,YAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAChC,eAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACrC,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC/C,eAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAAC;oBAC1C,IAAI,YAAY,GAAG,MAAM,UAAU,CACjC,UAAU,EACV,IAAI,EACJ,UAAU,EACV,IAAI,CACL,CAAC;oBACF,IAAI,aAAa,IAAI,CAAC,YAAE,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;wBACtD,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;wBACvD,YAAY,GAAG,MAAM,UAAU,CAC7B,aAAa,EACb,IAAI,EACJ,UAAU,EACV,IAAI,CACL,CAAC;oBACJ,CAAC;oBACD,IAAI,CAAC,YAAE,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;wBACrC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;wBAC7C,KAAK,CAAC,eAAe,GAAG,2BAA2B,IAAI,oCAAoC,CAAC;wBAC5F,MAAM,KAAK,CAAC;oBACd,CAAC;oBACD,eAAM,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;oBAClC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;wBACxB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;wBACrD,eAAe,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;wBAC9B,IAAA,iCAAsB,EAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;yBAAM,CAAC;wBACN,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC;wBACrC,IAAA,iCAAsB,EAAC,YAAY,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM,EAAE,CAAC;oBACvD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAiB,CAAC,CAAC;oBAC3C,KAAK,CAAC,gBAAgB,GAAG,QAAQ,CAAC;oBAClC,KAAK,CAAC,eAAe,GAAG,8BAA8B,CAAC;oBACvD,KAAK,CAAC,iBAAiB,GAAG,4DAA4D,GAAG,sJAAsJ,CAAC;oBAChP,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM,EAAE,CAAC;wBACvC,KAAK,CAAC,iBAAiB,GAAG;;;+FAGyD,CAAC;oBACtF,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;YACD,OAAO,eAAe,CAAC,SAAS,CAAC;QACnC,CAAC;aAAM,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;gBACvB,IAAI,YAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,eAAe,CAAC,GAAG,CAAsB,CAAC,IAAI,CAC7C,MAAM,aAAa,CAAC,IAAsB,EAAE,UAAU,CAAC,CACxD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACL,eAAe,CAAC,GAAG,CAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC/C,eAAe,CAAC,GAAG,CAAC,GAAG,MAAM,aAAa,CACxC,GAAqB,EACrB,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC,SAAS,CAAC;IACjC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC7D,OAAO,eAAe,CAAC;AACzB,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash } from '../util/url';\nimport { tryDecryptKbPgp } from './decrypt/kbpgp';\nimport {\n tryDecryptPublicKeyDefault,\n tryDecryptPublicKeyPKCS1,\n} from './decrypt/legacy';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { RenovateConfig } from './types';\n\nexport async function tryDecrypt(\n privateKey: string,\n encryptedStr: string,\n repository: string,\n keyName: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n if (privateKey?.startsWith('-----BEGIN PGP PRIVATE KEY BLOCK-----')) {\n const decryptedObjStr =\n process.env.RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(privateKey, encryptedStr)\n : await tryDecryptKbPgp(privateKey, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n } else {\n decryptedStr = tryDecryptPublicKeyDefault(privateKey, encryptedStr);\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated default padding, please change to using PGP encryption.',\n );\n } else {\n decryptedStr = tryDecryptPublicKeyPKCS1(privateKey, encryptedStr);\n // istanbul ignore if\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.',\n );\n }\n }\n }\n return decryptedStr;\n}\n\nfunction validateDecryptedValue(\n decryptedObjStr: string,\n repository: string,\n): string | null {\n try {\n const decryptedObj = DecryptedObject.safeParse(decryptedObjStr);\n // istanbul ignore if\n if (!decryptedObj.success) {\n const error = new Error('config-validation');\n error.validationError = `Could not parse decrypted config.`;\n throw error;\n }\n\n const { o: org, r: repo, v: value } = decryptedObj.data;\n\n if (!is.nonEmptyString(value)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a value.`;\n throw error;\n }\n\n if (!is.nonEmptyString(org)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a scope.`;\n throw error;\n }\n\n const orgPrefixes = org\n .split(',')\n .map((o) => o.trim())\n .map((o) => o.toUpperCase())\n .map((o) => ensureTrailingSlash(o));\n\n if (is.nonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n if (scopedRepos.some((r) => r === repository.toUpperCase())) {\n return value;\n }\n logger.debug(\n { scopedRepos },\n 'Secret is scoped to a different repository',\n );\n const error = new Error('config-validation');\n const scopeString = scopedRepos.join(',');\n error.validationError = `Encrypted secret is scoped to a different repository: \"${scopeString}\".`;\n throw error;\n }\n\n // no scoped repos, only org\n if (\n orgPrefixes.some((orgPrefix) =>\n repository.toUpperCase().startsWith(orgPrefix),\n )\n ) {\n return value;\n }\n logger.debug({ orgPrefixes }, 'Secret is scoped to a different org');\n const error = new Error('config-validation');\n const scopeString = orgPrefixes.join(',');\n error.validationError = `Encrypted secret is scoped to a different org: \"${scopeString}\".`;\n throw error;\n } catch (err) {\n logger.warn({ err }, 'Could not parse decrypted string');\n }\n return null;\n}\n\nexport async function decryptConfig(\n config: RenovateConfig,\n repository: string,\n): Promise<RenovateConfig> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n const privateKey = GlobalConfig.get('privateKey');\n const privateKeyOld = GlobalConfig.get('privateKeyOld');\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && is.object(val)) {\n logger.debug({ config: val }, 'Found encrypted config');\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (is.string(encryptedWarning)) {\n logger.once.warn(encryptedWarning);\n }\n\n if (privateKey) {\n for (const [eKey, eVal] of Object.entries(val)) {\n logger.debug('Trying to decrypt ' + eKey);\n let decryptedStr = await tryDecrypt(\n privateKey,\n eVal,\n repository,\n eKey,\n );\n if (privateKeyOld && !is.nonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(\n privateKeyOld,\n eVal,\n repository,\n eKey,\n );\n }\n if (!is.nonEmptyString(decryptedStr)) {\n const error = new Error('config-validation');\n error.validationError = `Failed to decrypt field ${eKey}. Please re-encrypt and try again.`;\n throw error;\n }\n logger.debug(`Decrypted ${eKey}`);\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n if (process.env.RENOVATE_X_ENCRYPTED_STRICT === 'true') {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Encrypted config unsupported';\n error.validationMessage = `This config contains an encrypted object at location \\`$.${key}\\` but no privateKey is configured. To support encrypted config, the Renovate administrator must configure a \\`privateKey\\` in Global Configuration.`;\n if (process.env.MEND_HOSTED === 'true') {\n error.validationMessage = `Mend-hosted Renovate Apps no longer support the use of encrypted secrets in Renovate file config (e.g. renovate.json).\nPlease migrate all secrets to the Developer Portal using the web UI available at https://developer.mend.io/\n\nRefer to migration documents here: https://docs.renovatebot.com/mend-hosted/migrating-secrets/`;\n }\n throw error;\n } else {\n logger.error('Found encrypted data but no privateKey');\n }\n }\n delete decryptedConfig.encrypted;\n } else if (is.array(val)) {\n decryptedConfig[key] = [];\n for (const item of val) {\n if (is.object(item) && !is.array(item)) {\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository),\n );\n } else {\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (is.object(val) && key !== 'content') {\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n"]}
1
+ {"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../lib/config/decrypt.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages';\nimport { logger } from '../logger';\nimport { regEx } from '../util/regex';\nimport { addSecretForSanitizing } from '../util/sanitize';\nimport { ensureTrailingSlash } from '../util/url';\nimport { tryDecryptKbPgp } from './decrypt/kbpgp';\nimport {\n tryDecryptPublicKeyDefault,\n tryDecryptPublicKeyPKCS1,\n} from './decrypt/legacy';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp';\nimport { GlobalConfig } from './global';\nimport { DecryptedObject } from './schema';\nimport type { RenovateConfig } from './types';\n\nexport async function tryDecrypt(\n privateKey: string,\n encryptedStr: string,\n repository: string,\n keyName: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n if (privateKey?.startsWith('-----BEGIN PGP PRIVATE KEY BLOCK-----')) {\n const decryptedObjStr =\n process.env.RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(privateKey, encryptedStr)\n : await tryDecryptKbPgp(privateKey, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n } else {\n decryptedStr = tryDecryptPublicKeyDefault(privateKey, encryptedStr);\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated default padding, please change to using PGP encryption.',\n );\n } else {\n decryptedStr = tryDecryptPublicKeyPKCS1(privateKey, encryptedStr);\n /* v8 ignore start: not testable */\n if (is.string(decryptedStr)) {\n logger.warn(\n { keyName },\n 'Encrypted value is using deprecated PKCS1 padding, please change to using PGP encryption.',\n );\n }\n /* v8 ignore stop */\n }\n }\n return decryptedStr;\n}\n\nfunction validateDecryptedValue(\n decryptedObjStr: string,\n repository: string,\n): string | null {\n try {\n const decryptedObj = DecryptedObject.safeParse(decryptedObjStr);\n if (!decryptedObj.success) {\n const error = new Error('config-validation');\n error.validationError = `Could not parse decrypted config.`;\n throw error;\n }\n\n const { o: org, r: repo, v: value } = decryptedObj.data;\n\n if (!is.nonEmptyString(value)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a value.`;\n throw error;\n }\n\n if (!is.nonEmptyString(org)) {\n const error = new Error('config-validation');\n error.validationError = `Encrypted value in config is missing a scope.`;\n throw error;\n }\n\n const orgPrefixes = org\n .split(',')\n .map((o) => o.trim())\n .map((o) => o.toUpperCase())\n .map((o) => ensureTrailingSlash(o));\n\n if (is.nonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n if (scopedRepos.some((r) => r === repository.toUpperCase())) {\n return value;\n }\n logger.debug(\n { scopedRepos },\n 'Secret is scoped to a different repository',\n );\n const error = new Error('config-validation');\n const scopeString = scopedRepos.join(',');\n error.validationError = `Encrypted secret is scoped to a different repository: \"${scopeString}\".`;\n throw error;\n }\n\n // no scoped repos, only org\n if (\n orgPrefixes.some((orgPrefix) =>\n repository.toUpperCase().startsWith(orgPrefix),\n )\n ) {\n return value;\n }\n logger.debug({ orgPrefixes }, 'Secret is scoped to a different org');\n const error = new Error('config-validation');\n const scopeString = orgPrefixes.join(',');\n error.validationError = `Encrypted secret is scoped to a different org: \"${scopeString}\".`;\n throw error;\n } catch (err) {\n logger.warn({ err }, 'Could not parse decrypted string');\n }\n return null;\n}\n\nexport async function decryptConfig(\n config: RenovateConfig,\n repository: string,\n): Promise<RenovateConfig> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n const privateKey = GlobalConfig.get('privateKey');\n const privateKeyOld = GlobalConfig.get('privateKeyOld');\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && is.object(val)) {\n logger.debug({ config: val }, 'Found encrypted config');\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (is.string(encryptedWarning)) {\n logger.once.warn(encryptedWarning);\n }\n\n if (privateKey) {\n for (const [eKey, eVal] of Object.entries(val)) {\n logger.debug('Trying to decrypt ' + eKey);\n let decryptedStr = await tryDecrypt(\n privateKey,\n eVal,\n repository,\n eKey,\n );\n if (privateKeyOld && !is.nonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(\n privateKeyOld,\n eVal,\n repository,\n eKey,\n );\n }\n if (!is.nonEmptyString(decryptedStr)) {\n const error = new Error('config-validation');\n error.validationError = `Failed to decrypt field ${eKey}. Please re-encrypt and try again.`;\n throw error;\n }\n logger.debug(`Decrypted ${eKey}`);\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n if (process.env.RENOVATE_X_ENCRYPTED_STRICT === 'true') {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'config';\n error.validationError = 'Encrypted config unsupported';\n error.validationMessage = `This config contains an encrypted object at location \\`$.${key}\\` but no privateKey is configured. To support encrypted config, the Renovate administrator must configure a \\`privateKey\\` in Global Configuration.`;\n if (process.env.MEND_HOSTED === 'true') {\n error.validationMessage = `Mend-hosted Renovate Apps no longer support the use of encrypted secrets in Renovate file config (e.g. renovate.json).\nPlease migrate all secrets to the Developer Portal using the web UI available at https://developer.mend.io/\n\nRefer to migration documents here: https://docs.renovatebot.com/mend-hosted/migrating-secrets/`;\n }\n throw error;\n } else {\n logger.error('Found encrypted data but no privateKey');\n }\n }\n delete decryptedConfig.encrypted;\n } else if (is.array(val)) {\n decryptedConfig[key] = [];\n for (const item of val) {\n if (is.object(item) && !is.array(item)) {\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository),\n );\n } else {\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (is.object(val) && key !== 'content') {\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n"]}
@@ -24,7 +24,7 @@ async function migrateAndValidate(config, input) {
24
24
  logger_1.logger.debug({ config: massagedConfig }, 'Post-massage config');
25
25
  }
26
26
  const { warnings, errors, } = await configValidation.validateConfig('repo', massagedConfig);
27
- // istanbul ignore if
27
+ /* v8 ignore start: hard to test */
28
28
  if (is_1.default.nonEmptyArray(warnings)) {
29
29
  logger_1.logger.warn({ warnings }, 'Found renovate config warnings');
30
30
  }
@@ -36,8 +36,9 @@ async function migrateAndValidate(config, input) {
36
36
  massagedConfig.warnings = (config.warnings ?? []).concat(warnings);
37
37
  }
38
38
  return massagedConfig;
39
+ /* v8 ignore next 3: TODO: test me */
39
40
  }
40
- catch (err) /* istanbul ignore next */ {
41
+ catch (err) {
41
42
  logger_1.logger.debug({ config: input }, 'migrateAndValidate error');
42
43
  throw err;
43
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migrate-validate.js","sourceRoot":"","sources":["../../lib/config/migrate-validate.ts"],"names":[],"mappings":";;AAQA,gDA2CC;;AAnDD,kEAAkC;AAClC,mCAAgC;AAChC,sCAAmC;AACnC,iEAA2C;AAC3C,qEAA+C;AAE/C,uEAAiD;AAE1C,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,KAAqB;IAErB,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,EAC/C,4BAA4B,CAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnE,2BAA2B;QAC3B,IAAI,CAAC,IAAA,eAAM,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EACJ,QAAQ,EACR,MAAM,GACP,GAGG,MAAM,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClE,qBAAqB;QACrB,IAAI,YAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,cAAc,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport * as configMassage from './massage';\nimport * as configMigration from './migration';\nimport type { RenovateConfig, ValidationMessage } from './types';\nimport * as configValidation from './validation';\n\nexport async function migrateAndValidate(\n config: RenovateConfig,\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('migrateAndValidate()');\n try {\n const { isMigrated, migratedConfig } = configMigration.migrateConfig(input);\n if (isMigrated) {\n logger.debug(\n { oldConfig: input, newConfig: migratedConfig },\n 'Config migration necessary',\n );\n } else {\n logger.debug('No config migration necessary');\n }\n const massagedConfig = configMassage.massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(input, massagedConfig)) {\n logger.debug({ config: massagedConfig }, 'Post-massage config');\n }\n const {\n warnings,\n errors,\n }: {\n warnings: ValidationMessage[];\n errors: ValidationMessage[];\n } = await configValidation.validateConfig('repo', massagedConfig);\n // istanbul ignore if\n if (is.nonEmptyArray(warnings)) {\n logger.warn({ warnings }, 'Found renovate config warnings');\n }\n if (is.nonEmptyArray(errors)) {\n logger.info({ errors }, 'Found renovate config errors');\n }\n massagedConfig.errors = (config.errors ?? []).concat(errors);\n if (!config.repoIsOnboarded) {\n massagedConfig.warnings = (config.warnings ?? []).concat(warnings);\n }\n return massagedConfig;\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ config: input }, 'migrateAndValidate error');\n throw err;\n }\n}\n"]}
1
+ {"version":3,"file":"migrate-validate.js","sourceRoot":"","sources":["../../lib/config/migrate-validate.ts"],"names":[],"mappings":";;AAQA,gDA4CC;;AApDD,kEAAkC;AAClC,mCAAgC;AAChC,sCAAmC;AACnC,iEAA2C;AAC3C,qEAA+C;AAE/C,uEAAiD;AAE1C,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,KAAqB;IAErB,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5E,IAAI,UAAU,EAAE,CAAC;YACf,eAAM,CAAC,KAAK,CACV,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,EAC/C,4BAA4B,CAC7B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,cAAc,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACnE,2BAA2B;QAC3B,IAAI,CAAC,IAAA,eAAM,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,qBAAqB,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,EACJ,QAAQ,EACR,MAAM,GACP,GAGG,MAAM,gBAAgB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClE,mCAAmC;QACnC,IAAI,YAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,YAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC;QAC1D,CAAC;QACD,cAAc,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAC5B,cAAc,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,cAAc,CAAC;QACtB,qCAAqC;IACvC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport * as configMassage from './massage';\nimport * as configMigration from './migration';\nimport type { RenovateConfig, ValidationMessage } from './types';\nimport * as configValidation from './validation';\n\nexport async function migrateAndValidate(\n config: RenovateConfig,\n input: RenovateConfig,\n): Promise<RenovateConfig> {\n logger.debug('migrateAndValidate()');\n try {\n const { isMigrated, migratedConfig } = configMigration.migrateConfig(input);\n if (isMigrated) {\n logger.debug(\n { oldConfig: input, newConfig: migratedConfig },\n 'Config migration necessary',\n );\n } else {\n logger.debug('No config migration necessary');\n }\n const massagedConfig = configMassage.massageConfig(migratedConfig);\n // log only if it's changed\n if (!dequal(input, massagedConfig)) {\n logger.debug({ config: massagedConfig }, 'Post-massage config');\n }\n const {\n warnings,\n errors,\n }: {\n warnings: ValidationMessage[];\n errors: ValidationMessage[];\n } = await configValidation.validateConfig('repo', massagedConfig);\n /* v8 ignore start: hard to test */\n if (is.nonEmptyArray(warnings)) {\n logger.warn({ warnings }, 'Found renovate config warnings');\n }\n if (is.nonEmptyArray(errors)) {\n logger.info({ errors }, 'Found renovate config errors');\n }\n massagedConfig.errors = (config.errors ?? []).concat(errors);\n if (!config.repoIsOnboarded) {\n massagedConfig.warnings = (config.warnings ?? []).concat(warnings);\n }\n return massagedConfig;\n /* v8 ignore next 3: TODO: test me */\n } catch (err) {\n logger.debug({ config: input }, 'migrateAndValidate error');\n throw err;\n }\n}\n"]}
@@ -166,8 +166,9 @@ function migrateConfig(config, parentKey) {
166
166
  };
167
167
  }
168
168
  return { isMigrated, migratedConfig };
169
+ /* v8 ignore next 4: TODO: test me */
169
170
  }
170
- catch (err) /* istanbul ignore next */ {
171
+ catch (err) {
171
172
  logger_1.logger.debug({ config, err }, 'migrateConfig() error');
172
173
  throw err;
173
174
  }
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../lib/config/migration.ts"],"names":[],"mappings":";;AAiBA,sCAEC;AAID,sCAmLC;;AA1MD,kEAAkC;AAClC,mCAAgC;AAChC,sCAAmC;AACnC,yCAAsC;AACtC,yCAAsC;AACtC,6CAAiD;AACjD,uCAAuC;AAQvC,mCAA2C;AAE3C,MAAM,OAAO,GAAG,IAAA,oBAAU,GAAE,CAAC;AAC7B,SAAgB,aAAa,CAAC,KAAa;IACzC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAA,aAAK,EAAC,mBAAmB,CAAC,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,IAAI,WAAoD,CAAC;AACzD,4BAA4B;AAC5B,SAAgB,aAAa,CAC3B,MAAsB,EACtB,SAAkB;IAElB,IAAI,CAAC;QACH,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG,EAAE,CAAC;YACjB,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACzB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;YACzC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,MAAM,SAAS,GAAG,8BAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,cAAc,GAAG,IAAA,aAAK,EAAC,SAAS,CAA2B,CAAC;QAElE,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACnD,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClD,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAC/B,IAAA,aAAK,EAAC,cAAc,CAAC,EACrB,oBAAoB,CACrB,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC5D,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAC/B,IAAA,aAAK,EAAC,iBAAiB,CAAC,EACxB,iBAAiB,CAClB,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC9D,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAC/B,IAAA,aAAK,EAAC,mBAAmB,CAAC,EAC1B,aAAa,CACd,CAAC;YACJ,CAAC;iBAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAClE,cAAc,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAC/B,oBAAoB,EACpB,sHAAsH,CACvH,CAAC;YACJ,CAAC;iBAAM,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,YAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5D,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YACzC,CAAC;iBAAM,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC1C,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,cAAc,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAC7B,CAAC;qBAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;oBAC3B,cAAc,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,IACL,WAAW,CAAC,GAAG,CAAC,KAAK,QAAQ;gBAC7B,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC;gBACb,GAAG,CAAC,MAAM,KAAK,CAAC,EAChB,CAAC;gBACD,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,YAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,IAAI,YAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACpC,MAAM,QAAQ,GAAG,EAAE,CAAC;oBACpB,KAAK,MAAM,IAAI,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;wBACvC,IAAI,YAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;4BACvC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAsB,CAAC,CAAC;4BACzD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;wBAC3C,CAAC;6BAAM,CAAC;4BACN,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtB,CAAC;oBACH,CAAC;oBACD,cAAc,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,IAAI,YAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,UAAU,GAAG,aAAa,CAC9B,cAAc,CAAC,GAAG,CAAmB,EACrC,GAAG,CACJ,CAAC;gBACF,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;oBAC1B,cAAc,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,cAAc,CAAC;gBAClD,CAAC;YACH,CAAC;YAED,MAAM,iBAAiB,GAAG;gBACxB,WAAW,EAAE,gBAAgB;gBAC7B,aAAa,EAAE,UAAU;gBACzB,aAAa,EAAE,UAAU;gBACzB,eAAe,EAAE,UAAU;gBAC3B,eAAe,EAAE,UAAU;gBAC3B,SAAS,EAAE,YAAY;aACxB,CAAC;YACF,IAAI,YAAE,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC3D,cAAc,CAAC,GAAG,CAAC,GAAI,cAAc,CAAC,GAAG,CAAY,CAAC,OAAO,CAC3D,IAAA,aAAK,EAAC,IAAI,EAAE,GAAG,CAAC,EAChB,EAAE,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,SAAS,GAAG;YAChB,QAAQ;YACR,QAAQ;YACR,QAAQ;YACR,MAAM;YACN,IAAI;YACJ,MAAM;YACN,KAAK;YACL,QAAQ;YACR,MAAM;YACN,MAAM;SACP,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,YAAE,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;gBAChD,cAAc,CAAC,YAAY,KAAK,EAAE,CAAC;gBACnC,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAQ,CAAC;gBACvD,MAAM,WAAW,GAAG;oBAClB,eAAe,EAAE,CAAC,QAAQ,CAAC;oBAC3B,GAAG,cAAc;iBAClB,CAAC;gBACF,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBACjD,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,8BAA8B;QAC9B,IAAI,YAAE,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;YAClD,MAAM,aAAa,GAAG,cAAc,CAAC,YAAY,CAAC;YAClD,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;YACjC,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;gBACxC,IAAI,YAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;oBACvC,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC/C,gDAAgD;oBAChD,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;wBAC/C,yBAAyB;wBACzB,MAAM,YAAY,GAAG,IAAA,wBAAgB,EACnC,WAAW,EACX,OAAsB,CACvB,CAAC;wBACF,OAAO,YAAY,CAAC,YAAY,CAAC;wBACjC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjD,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC;QACD,IACE,YAAE,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;YAChD,YAAE,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,EACzD,CAAC;YACD,cAAc,CAAC,aAAa,CAAC,CAAC,SAAS,GAAG,cAAc,CACtD,aAAa,CACd,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC5B,MAAM,KAAK,GAAG,SAAmB,CAAC;gBAClC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,YAAE,CAAC,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,IAAI,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzD,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrD,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9C,CAAC;gBACD,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,aAAa,CAAC,MAAM,CAChE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,aAAa,CACvC,CAAC;YACJ,CAAC;QACH,CAAC;QACD,IAAI,YAAE,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;YACrD,cAAc,CAAC,MAAM,GAAG,IAAA,wBAAgB,EACtC,cAAc,CAAC,MAAM,IAAI,EAAE,EAC3B,cAAc,CAAC,aAAa,CAAC,CAC9B,CAAC;QACJ,CAAC;QACD,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,CAAC,IAAA,eAAM,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACnD,IAAI,UAAU,EAAE,CAAC;YACf,qEAAqE;YACrE,OAAO;gBACL,UAAU;gBACV,cAAc,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC,cAAc;aAC7D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACvD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport { clone } from '../util/clone';\nimport { regEx } from '../util/regex';\nimport { MigrationsService } from './migrations';\nimport { getOptions } from './options';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types';\nimport { mergeChildConfig } from './utils';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (is.string(val) && val.includes('{{baseDir}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (is.string(val) && val.includes('{{lookupName}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (is.string(val) && val.includes('{{depNameShort}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (is.string(val) && val.startsWith('{{semanticPrefix}}')) {\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && is.boolean(val)) {\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n migratedConfig[key] = true;\n } else if (val === 'false') {\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n is.array(val) &&\n val.length === 1\n ) {\n migratedConfig[key] = String(val[0]);\n } else if (is.array(val)) {\n if (is.array(migratedConfig?.[key])) {\n const newArray = [];\n for (const item of migratedConfig[key]) {\n if (is.object(item) && !is.array(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n migratedConfig[key] = newArray;\n }\n } else if (is.object(val)) {\n const subMigrate = migrateConfig(\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n if (is.string(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n if (is.nonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (is.nonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n if (is.array(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n is.nonEmptyObject(migratedConfig['pip-compile']) &&\n is.nonEmptyArray(migratedConfig['pip-compile'].fileMatch)\n ) {\n migratedConfig['pip-compile'].fileMatch = migratedConfig[\n 'pip-compile'\n ].fileMatch.map((fileMatch) => {\n const match = fileMatch as string;\n if (match.endsWith('.in')) {\n return match.replace(/\\.in$/, '.txt');\n }\n return match.replace(/\\.in\\$$/, '.txt$');\n });\n }\n if (is.nonEmptyArray(migratedConfig.matchManagers)) {\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n if (!migratedConfig.matchManagers.includes('gradle')) {\n migratedConfig.matchManagers.push('gradle');\n }\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n if (is.nonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n migratedConfig['gradle-lite'],\n );\n }\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"]}
1
+ {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../lib/config/migration.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { dequal } from 'dequal';\nimport { logger } from '../logger';\nimport { clone } from '../util/clone';\nimport { regEx } from '../util/regex';\nimport { MigrationsService } from './migrations';\nimport { getOptions } from './options';\nimport type {\n MigratedConfig,\n MigratedRenovateConfig,\n PackageRule,\n RenovateConfig,\n RenovateOptions,\n} from './types';\nimport { mergeChildConfig } from './utils';\n\nconst options = getOptions();\nexport function fixShortHours(input: string): string {\n return input.replace(regEx(/( \\d?\\d)((a|p)m)/g), '$1:00$2');\n}\n\nlet optionTypes: Record<string, RenovateOptions['type']>;\n// Returns a migrated config\nexport function migrateConfig(\n config: RenovateConfig,\n parentKey?: string,\n): MigratedConfig {\n try {\n if (!optionTypes) {\n optionTypes = {};\n options.forEach((option) => {\n optionTypes[option.name] = option.type;\n });\n }\n const newConfig = MigrationsService.run(config, parentKey);\n const migratedConfig = clone(newConfig) as MigratedRenovateConfig;\n\n for (const [key, val] of Object.entries(newConfig)) {\n if (is.string(val) && val.includes('{{baseDir}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{baseDir}}/g),\n '{{packageFileDir}}',\n );\n } else if (is.string(val) && val.includes('{{lookupName}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{lookupName}}/g),\n '{{packageName}}',\n );\n } else if (is.string(val) && val.includes('{{depNameShort}}')) {\n migratedConfig[key] = val.replace(\n regEx(/{{depNameShort}}/g),\n '{{depName}}',\n );\n } else if (is.string(val) && val.startsWith('{{semanticPrefix}}')) {\n migratedConfig[key] = val.replace(\n '{{semanticPrefix}}',\n '{{#if semanticCommitType}}{{semanticCommitType}}{{#if semanticCommitScope}}({{semanticCommitScope}}){{/if}}: {{/if}}',\n );\n } else if (optionTypes[key] === 'object' && is.boolean(val)) {\n migratedConfig[key] = { enabled: val };\n } else if (optionTypes[key] === 'boolean') {\n if (val === 'true') {\n migratedConfig[key] = true;\n } else if (val === 'false') {\n migratedConfig[key] = false;\n }\n } else if (\n optionTypes[key] === 'string' &&\n is.array(val) &&\n val.length === 1\n ) {\n migratedConfig[key] = String(val[0]);\n } else if (is.array(val)) {\n if (is.array(migratedConfig?.[key])) {\n const newArray = [];\n for (const item of migratedConfig[key]) {\n if (is.object(item) && !is.array(item)) {\n const arrMigrate = migrateConfig(item as RenovateConfig);\n newArray.push(arrMigrate.migratedConfig);\n } else {\n newArray.push(item);\n }\n }\n migratedConfig[key] = newArray;\n }\n } else if (is.object(val)) {\n const subMigrate = migrateConfig(\n migratedConfig[key] as RenovateConfig,\n key,\n );\n if (subMigrate.isMigrated) {\n migratedConfig[key] = subMigrate.migratedConfig;\n }\n }\n\n const migratedTemplates = {\n fromVersion: 'currentVersion',\n newValueMajor: 'newMajor',\n newValueMinor: 'newMinor',\n newVersionMajor: 'newMajor',\n newVersionMinor: 'newMinor',\n toVersion: 'newVersion',\n };\n if (is.string(migratedConfig[key])) {\n for (const [from, to] of Object.entries(migratedTemplates)) {\n migratedConfig[key] = (migratedConfig[key] as string).replace(\n regEx(from, 'g'),\n to,\n );\n }\n }\n }\n const languages = [\n 'docker',\n 'dotnet',\n 'golang',\n 'java',\n 'js',\n 'node',\n 'php',\n 'python',\n 'ruby',\n 'rust',\n ];\n for (const language of languages) {\n if (is.nonEmptyObject(migratedConfig[language])) {\n migratedConfig.packageRules ??= [];\n const currentContent = migratedConfig[language] as any;\n const packageRule = {\n matchCategories: [language],\n ...currentContent,\n };\n migratedConfig.packageRules.unshift(packageRule);\n delete migratedConfig[language];\n }\n }\n // Migrate nested packageRules\n if (is.nonEmptyArray(migratedConfig.packageRules)) {\n const existingRules = migratedConfig.packageRules;\n migratedConfig.packageRules = [];\n for (const packageRule of existingRules) {\n if (is.array(packageRule.packageRules)) {\n logger.debug('Flattening nested packageRules');\n // merge each subrule and add to the parent list\n for (const subrule of packageRule.packageRules) {\n // TODO: fix types #22198\n const combinedRule = mergeChildConfig(\n packageRule,\n subrule as PackageRule,\n );\n delete combinedRule.packageRules;\n migratedConfig.packageRules.push(combinedRule);\n }\n } else {\n migratedConfig.packageRules.push(packageRule);\n }\n }\n }\n if (\n is.nonEmptyObject(migratedConfig['pip-compile']) &&\n is.nonEmptyArray(migratedConfig['pip-compile'].fileMatch)\n ) {\n migratedConfig['pip-compile'].fileMatch = migratedConfig[\n 'pip-compile'\n ].fileMatch.map((fileMatch) => {\n const match = fileMatch as string;\n if (match.endsWith('.in')) {\n return match.replace(/\\.in$/, '.txt');\n }\n return match.replace(/\\.in\\$$/, '.txt$');\n });\n }\n if (is.nonEmptyArray(migratedConfig.matchManagers)) {\n if (migratedConfig.matchManagers.includes('gradle-lite')) {\n if (!migratedConfig.matchManagers.includes('gradle')) {\n migratedConfig.matchManagers.push('gradle');\n }\n migratedConfig.matchManagers = migratedConfig.matchManagers.filter(\n (manager) => manager !== 'gradle-lite',\n );\n }\n }\n if (is.nonEmptyObject(migratedConfig['gradle-lite'])) {\n migratedConfig.gradle = mergeChildConfig(\n migratedConfig.gradle ?? {},\n migratedConfig['gradle-lite'],\n );\n }\n delete migratedConfig['gradle-lite'];\n const isMigrated = !dequal(config, migratedConfig);\n if (isMigrated) {\n // recursive call in case any migrated configs need further migrating\n return {\n isMigrated,\n migratedConfig: migrateConfig(migratedConfig).migratedConfig,\n };\n }\n return { isMigrated, migratedConfig };\n /* v8 ignore next 4: TODO: test me */\n } catch (err) {\n logger.debug({ config, err }, 'migrateConfig() error');\n throw err;\n }\n}\n"]}
@@ -475,7 +475,7 @@ const options = [
475
475
  name: 'dockerSidecarImage',
476
476
  description: 'Change this value to override the default Renovate sidecar image.',
477
477
  type: 'string',
478
- default: 'ghcr.io/containerbase/sidecar:13.8.0',
478
+ default: 'ghcr.io/containerbase/sidecar:13.8.2',
479
479
  globalOnly: true,
480
480
  },
481
481
  {