renovate 43.232.0 → 43.232.1
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.
- package/dist/config/decrypt.js +1 -1
- package/dist/config/decrypt.js.map +1 -1
- package/dist/config/global.js +1 -0
- package/dist/config/global.js.map +1 -1
- package/dist/config/types.d.ts +1 -0
- package/dist/config/types.js.map +1 -1
- package/dist/modules/manager/fingerprint.generated.js +2 -2
- package/dist/modules/manager/fingerprint.generated.js.map +1 -1
- package/dist/modules/manager/flux/extract.js +1 -0
- package/dist/modules/manager/flux/extract.js.map +1 -1
- package/dist/modules/manager/flux/schema.js +2 -1
- package/dist/modules/manager/flux/schema.js.map +1 -1
- package/dist/modules/manager/mix/artifacts.js +2 -1
- package/dist/modules/manager/mix/artifacts.js.map +1 -1
- package/dist/modules/platform/github/index.js +1 -1
- package/dist/modules/platform/github/index.js.map +1 -1
- package/dist/util/http/github.js +2 -1
- package/dist/util/http/github.js.map +1 -1
- package/dist/util/package-rules/merge-confidence.js +2 -1
- package/dist/util/package-rules/merge-confidence.js.map +1 -1
- package/dist/workers/repository/updates/generate.js +4 -0
- package/dist/workers/repository/updates/generate.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
package/dist/config/decrypt.js
CHANGED
|
@@ -108,7 +108,7 @@ async function decryptConfig(config, repository, existingPath = "$") {
|
|
|
108
108
|
if (env.MEND_HOSTED === "true") error.validationMessage = `Mend-hosted Renovate Apps no longer support the use of encrypted secrets in Renovate file config (e.g. renovate.json).
|
|
109
109
|
Please migrate all secrets to the Developer Portal using the web UI available at https://developer.mend.io/
|
|
110
110
|
|
|
111
|
-
Refer to migration documents here:
|
|
111
|
+
Refer to migration documents here: ${GlobalConfig.get("productLinks").documentation}mend-hosted/migrating-secrets/`;
|
|
112
112
|
throw error;
|
|
113
113
|
} else logger.error("Found encrypted data but no privateKey");
|
|
114
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decrypt.js","names":[],"sources":["../../lib/config/decrypt.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages.ts';\nimport { logger } from '../logger/index.ts';\nimport { getEnv } from '../util/env.ts';\nimport { regEx } from '../util/regex.ts';\nimport { addSecretForSanitizing } from '../util/sanitize.ts';\nimport { ensureTrailingSlash, parseUrl, trimSlashes } from '../util/url.ts';\nimport { tryDecryptBcPgp } from './decrypt/bcpgp.ts';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp.ts';\nimport { GlobalConfig } from './global.ts';\nimport { DecryptedObject } from './schema.ts';\nimport type { AllConfig, RenovateConfig } from './types.ts';\n\nlet privateKey: string | undefined;\nlet privateKeyOld: string | undefined;\n\nexport function setPrivateKeys(\n pKey: string | undefined,\n pKeyOld: string | undefined,\n): void {\n privateKey = pKey;\n privateKeyOld = pKeyOld;\n}\n\nexport async function tryDecrypt(\n key: string,\n encryptedStr: string,\n repository: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n const decryptedObjStr =\n getEnv().RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(key, encryptedStr)\n : await tryDecryptBcPgp(key, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n return decryptedStr;\n}\n\nexport function 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 (!isNonEmptyString(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 (!isNonEmptyString(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 repositories = [repository.toUpperCase()];\n\n const azureCollection = getAzureCollection();\n if (isNonEmptyString(azureCollection)) {\n // used for full 'org/project/repo' matching\n repositories.push(`${azureCollection}/${repository}`.toUpperCase());\n // used for org prefix matching without repo\n repositories.push(`${azureCollection}/*/`.toUpperCase());\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 (isNonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n for (const rp of repositories) {\n if (scopedRepos.some((r) => r === rp)) {\n return value;\n }\n }\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 const azcol =\n azureCollection === undefined\n ? undefined\n : ensureTrailingSlash(azureCollection).toUpperCase();\n for (const rp of repositories) {\n if (\n orgPrefixes.some(\n (orgPrefix) => rp.startsWith(orgPrefix) && orgPrefix !== azcol,\n )\n ) {\n return value;\n }\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<T extends RenovateConfig = AllConfig>(\n config: T,\n repository: string,\n existingPath = '$',\n): Promise<T> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && isObject(val)) {\n const path = `${existingPath}.${key}`;\n logger.debug({ config: val }, `Found encrypted config in ${path}`);\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (isString(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} in ${path}`);\n let decryptedStr = await tryDecrypt(privateKey, eVal, repository);\n if (privateKeyOld && !isNonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(privateKeyOld, eVal, repository);\n }\n if (!isNonEmptyString(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} in ${path}`);\n // v8 ignore if -- TODO: add test #40625\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n const env = getEnv();\n if (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 (env.MEND_HOSTED === 'true') {\n // oxlint-disable-next-line renovate/no-hardcoded-docs-url -- no config access during decryption\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 (isArray(val)) {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = [];\n for (const [index, item] of val.entries()) {\n if (isObject(item) && !isArray(item)) {\n const path = `${existingPath}.${key}[${index}]`;\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository, path),\n );\n } else {\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (isObject(val) && key !== 'content') {\n const path = `${existingPath}.${key}`;\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n path,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n\nexport function getAzureCollection(): string | undefined {\n const platform = GlobalConfig.get('platform');\n if (platform !== 'azure') {\n return undefined;\n }\n\n const endpoint = GlobalConfig.get('endpoint');\n const endpointUrl = parseUrl(endpoint);\n if (endpointUrl === null) {\n // should not happen\n logger.warn({ endpoint }, 'Unable to parse endpoint for token decryption');\n return undefined;\n }\n\n const azureCollection = trimSlashes(endpointUrl.pathname);\n if (!isNonEmptyString(azureCollection)) {\n logger.debug({ endpoint }, 'Unable to find azure collection name from URL');\n return undefined;\n }\n\n if (azureCollection.startsWith('tfs/')) {\n // Azure DevOps Server\n return azureCollection.substring(4);\n }\n return azureCollection;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"decrypt.js","names":[],"sources":["../../lib/config/decrypt.ts"],"sourcesContent":["import {\n isArray,\n isNonEmptyString,\n isObject,\n isString,\n} from '@sindresorhus/is';\nimport { CONFIG_VALIDATION } from '../constants/error-messages.ts';\nimport { logger } from '../logger/index.ts';\nimport { getEnv } from '../util/env.ts';\nimport { regEx } from '../util/regex.ts';\nimport { addSecretForSanitizing } from '../util/sanitize.ts';\nimport { ensureTrailingSlash, parseUrl, trimSlashes } from '../util/url.ts';\nimport { tryDecryptBcPgp } from './decrypt/bcpgp.ts';\nimport { tryDecryptOpenPgp } from './decrypt/openpgp.ts';\nimport { GlobalConfig } from './global.ts';\nimport { DecryptedObject } from './schema.ts';\nimport type { AllConfig, RenovateConfig } from './types.ts';\n\nlet privateKey: string | undefined;\nlet privateKeyOld: string | undefined;\n\nexport function setPrivateKeys(\n pKey: string | undefined,\n pKeyOld: string | undefined,\n): void {\n privateKey = pKey;\n privateKeyOld = pKeyOld;\n}\n\nexport async function tryDecrypt(\n key: string,\n encryptedStr: string,\n repository: string,\n): Promise<string | null> {\n let decryptedStr: string | null = null;\n const decryptedObjStr =\n getEnv().RENOVATE_X_USE_OPENPGP === 'true'\n ? await tryDecryptOpenPgp(key, encryptedStr)\n : await tryDecryptBcPgp(key, encryptedStr);\n if (decryptedObjStr) {\n decryptedStr = validateDecryptedValue(decryptedObjStr, repository);\n }\n return decryptedStr;\n}\n\nexport function 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 (!isNonEmptyString(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 (!isNonEmptyString(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 repositories = [repository.toUpperCase()];\n\n const azureCollection = getAzureCollection();\n if (isNonEmptyString(azureCollection)) {\n // used for full 'org/project/repo' matching\n repositories.push(`${azureCollection}/${repository}`.toUpperCase());\n // used for org prefix matching without repo\n repositories.push(`${azureCollection}/*/`.toUpperCase());\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 (isNonEmptyString(repo)) {\n const scopedRepos = orgPrefixes.map((orgPrefix) =>\n `${orgPrefix}${repo}`.toUpperCase(),\n );\n for (const rp of repositories) {\n if (scopedRepos.some((r) => r === rp)) {\n return value;\n }\n }\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 const azcol =\n azureCollection === undefined\n ? undefined\n : ensureTrailingSlash(azureCollection).toUpperCase();\n for (const rp of repositories) {\n if (\n orgPrefixes.some(\n (orgPrefix) => rp.startsWith(orgPrefix) && orgPrefix !== azcol,\n )\n ) {\n return value;\n }\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<T extends RenovateConfig = AllConfig>(\n config: T,\n repository: string,\n existingPath = '$',\n): Promise<T> {\n logger.trace({ config }, 'decryptConfig()');\n const decryptedConfig = { ...config };\n for (const [key, val] of Object.entries(config)) {\n if (key === 'encrypted' && isObject(val)) {\n const path = `${existingPath}.${key}`;\n logger.debug({ config: val }, `Found encrypted config in ${path}`);\n\n const encryptedWarning = GlobalConfig.get('encryptedWarning');\n if (isString(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} in ${path}`);\n let decryptedStr = await tryDecrypt(privateKey, eVal, repository);\n if (privateKeyOld && !isNonEmptyString(decryptedStr)) {\n logger.debug(`Trying to decrypt with old private key`);\n decryptedStr = await tryDecrypt(privateKeyOld, eVal, repository);\n }\n if (!isNonEmptyString(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} in ${path}`);\n // v8 ignore if -- TODO: add test #40625\n if (eKey === 'npmToken') {\n const token = decryptedStr.replace(regEx(/\\n$/), '');\n decryptedConfig[eKey] = token;\n addSecretForSanitizing(token);\n } else {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[eKey] = decryptedStr;\n addSecretForSanitizing(decryptedStr);\n }\n }\n } else {\n const env = getEnv();\n if (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 (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: ${GlobalConfig.get('productLinks').documentation}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 (isArray(val)) {\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = [];\n for (const [index, item] of val.entries()) {\n if (isObject(item) && !isArray(item)) {\n const path = `${existingPath}.${key}[${index}]`;\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as RenovateConfig[]).push(\n await decryptConfig(item as RenovateConfig, repository, path),\n );\n } else {\n // @ts-expect-error -- type can't be narrowed\n (decryptedConfig[key] as unknown[]).push(item);\n }\n }\n } else if (isObject(val) && key !== 'content') {\n const path = `${existingPath}.${key}`;\n // @ts-expect-error -- type can't be narrowed\n decryptedConfig[key] = await decryptConfig(\n val as RenovateConfig,\n repository,\n path,\n );\n }\n }\n delete decryptedConfig.encrypted;\n logger.trace({ config: decryptedConfig }, 'decryptedConfig');\n return decryptedConfig;\n}\n\nexport function getAzureCollection(): string | undefined {\n const platform = GlobalConfig.get('platform');\n if (platform !== 'azure') {\n return undefined;\n }\n\n const endpoint = GlobalConfig.get('endpoint');\n const endpointUrl = parseUrl(endpoint);\n if (endpointUrl === null) {\n // should not happen\n logger.warn({ endpoint }, 'Unable to parse endpoint for token decryption');\n return undefined;\n }\n\n const azureCollection = trimSlashes(endpointUrl.pathname);\n if (!isNonEmptyString(azureCollection)) {\n logger.debug({ endpoint }, 'Unable to find azure collection name from URL');\n return undefined;\n }\n\n if (azureCollection.startsWith('tfs/')) {\n // Azure DevOps Server\n return azureCollection.substring(4);\n }\n return azureCollection;\n}\n"],"mappings":"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"}
|
package/dist/config/global.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.js","names":[],"sources":["../../lib/config/global.ts"],"sourcesContent":["import { globalConfigOptionDefaults } from '../global-config-option-defaults.generated.ts';\nimport type { RenovateConfig, RepoGlobalConfig } from './types.ts';\n\nexport class GlobalConfig {\n // TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603)\n static OPTIONS: readonly (keyof RepoGlobalConfig)[] = [\n 'allowCustomCrateRegistries',\n 'allowPlugins',\n 'allowScripts',\n 'allowShellExecutorForPostUpgradeCommands',\n 'allowedCommands',\n 'allowedEnv',\n 'allowedHeaders',\n 'allowedUnsafeExecutions',\n 'autodiscoverRepoOrder',\n 'autodiscoverRepoSort',\n 'bbUseDevelopmentBranch',\n 'binarySource',\n 'cacheDir',\n 'cacheHardTtlMinutes',\n 'cachePrivatePackages',\n 'cacheTtlOverride',\n 'configFileNames',\n 'containerbaseDir',\n 'customEnvVariables',\n 'dockerChildPrefix',\n 'dockerCliOptions',\n 'dockerMaxPages',\n 'dockerSidecarImage',\n 'dockerUser',\n 'dryRun',\n 'encryptedWarning',\n 'endpoint',\n 'executionTimeout',\n 'exposeAllEnv',\n 'gitTimeout',\n 'githubTokenWarn',\n 'httpCacheTtlDays',\n 'ignorePrAuthor',\n 'includeMirrors',\n 'localDir',\n 'migratePresets',\n 'onboarding',\n 'onboardingAutoCloseAge',\n 'onboardingBranch',\n 'onboardingCommitMessage',\n 'onboardingConfig',\n 'onboardingConfigFileName',\n 'onboardingNoDeps',\n 'onboardingPrTitle',\n 'platform',\n 'prCacheSyncMaxPages',\n 'presetCachePersistence',\n 'repositoryCacheForceLocal',\n 'requireConfig',\n 's3Endpoint',\n 's3PathStyle',\n 'toolSettings',\n 'userAgent',\n ];\n\n private static config: RepoGlobalConfig = {};\n\n static get(): RepoGlobalConfig;\n static get<Key extends keyof RepoGlobalConfig>(\n key: Key,\n ): Required<RepoGlobalConfig>[Key];\n static get<Key extends keyof RepoGlobalConfig>(\n key: Key,\n ): Required<RepoGlobalConfig>[Key];\n static get<Key extends keyof RepoGlobalConfig>(\n key?: Key,\n ): RepoGlobalConfig | Required<RepoGlobalConfig>[Key] {\n const defaultValue = key\n ? (globalConfigOptionDefaults[key] as Required<RepoGlobalConfig>[Key])\n : undefined;\n\n return key\n ? ((GlobalConfig.config[key] ??\n defaultValue) as Required<RepoGlobalConfig>[Key])\n : GlobalConfig.config;\n }\n\n static set(config: RenovateConfig & RepoGlobalConfig): RenovateConfig {\n GlobalConfig.reset();\n\n const result = { ...config };\n for (const option of GlobalConfig.OPTIONS) {\n GlobalConfig.config[option] = config[option] as never;\n delete result[option];\n }\n\n return result;\n }\n\n static reset(): void {\n GlobalConfig.config = {};\n }\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAAa,aAAa;CAExB,OAAO,UAA+C;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,OAAe,SAA2B,CAAC;CAS3C,OAAO,IACL,KACoD;EACpD,MAAM,eAAe,MAChB,2BAA2B,OAC5B,KAAA;EAEJ,OAAO,MACD,aAAa,OAAO,QACpB,eACF,aAAa;CACnB;CAEA,OAAO,IAAI,QAA2D;EACpE,aAAa,MAAM;EAEnB,MAAM,SAAS,EAAE,GAAG,OAAO;EAC3B,KAAK,MAAM,UAAU,aAAa,SAAS;GACzC,aAAa,OAAO,UAAU,OAAO;GACrC,OAAO,OAAO;EAChB;EAEA,OAAO;CACT;CAEA,OAAO,QAAc;EACnB,aAAa,SAAS,CAAC;CACzB;AACF"}
|
|
1
|
+
{"version":3,"file":"global.js","names":[],"sources":["../../lib/config/global.ts"],"sourcesContent":["import { globalConfigOptionDefaults } from '../global-config-option-defaults.generated.ts';\nimport type { RenovateConfig, RepoGlobalConfig } from './types.ts';\n\nexport class GlobalConfig {\n // TODO: once global config work is complete, add a test to make sure this list includes all options with globalOnly=true (#9603)\n static OPTIONS: readonly (keyof RepoGlobalConfig)[] = [\n 'allowCustomCrateRegistries',\n 'allowPlugins',\n 'allowScripts',\n 'allowShellExecutorForPostUpgradeCommands',\n 'allowedCommands',\n 'allowedEnv',\n 'allowedHeaders',\n 'allowedUnsafeExecutions',\n 'autodiscoverRepoOrder',\n 'autodiscoverRepoSort',\n 'bbUseDevelopmentBranch',\n 'binarySource',\n 'cacheDir',\n 'cacheHardTtlMinutes',\n 'cachePrivatePackages',\n 'cacheTtlOverride',\n 'configFileNames',\n 'containerbaseDir',\n 'customEnvVariables',\n 'dockerChildPrefix',\n 'dockerCliOptions',\n 'dockerMaxPages',\n 'dockerSidecarImage',\n 'dockerUser',\n 'dryRun',\n 'encryptedWarning',\n 'endpoint',\n 'executionTimeout',\n 'exposeAllEnv',\n 'gitTimeout',\n 'githubTokenWarn',\n 'httpCacheTtlDays',\n 'ignorePrAuthor',\n 'includeMirrors',\n 'localDir',\n 'migratePresets',\n 'onboarding',\n 'onboardingAutoCloseAge',\n 'onboardingBranch',\n 'onboardingCommitMessage',\n 'onboardingConfig',\n 'onboardingConfigFileName',\n 'onboardingNoDeps',\n 'onboardingPrTitle',\n 'platform',\n 'prCacheSyncMaxPages',\n 'presetCachePersistence',\n 'productLinks',\n 'repositoryCacheForceLocal',\n 'requireConfig',\n 's3Endpoint',\n 's3PathStyle',\n 'toolSettings',\n 'userAgent',\n ];\n\n private static config: RepoGlobalConfig = {};\n\n static get(): RepoGlobalConfig;\n static get<Key extends keyof RepoGlobalConfig>(\n key: Key,\n ): Required<RepoGlobalConfig>[Key];\n static get<Key extends keyof RepoGlobalConfig>(\n key: Key,\n ): Required<RepoGlobalConfig>[Key];\n static get<Key extends keyof RepoGlobalConfig>(\n key?: Key,\n ): RepoGlobalConfig | Required<RepoGlobalConfig>[Key] {\n const defaultValue = key\n ? (globalConfigOptionDefaults[key] as Required<RepoGlobalConfig>[Key])\n : undefined;\n\n return key\n ? ((GlobalConfig.config[key] ??\n defaultValue) as Required<RepoGlobalConfig>[Key])\n : GlobalConfig.config;\n }\n\n static set(config: RenovateConfig & RepoGlobalConfig): RenovateConfig {\n GlobalConfig.reset();\n\n const result = { ...config };\n for (const option of GlobalConfig.OPTIONS) {\n GlobalConfig.config[option] = config[option] as never;\n delete result[option];\n }\n\n return result;\n }\n\n static reset(): void {\n GlobalConfig.config = {};\n }\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAAa,aAAa;CAExB,OAAO,UAA+C;EACpD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CAEA,OAAe,SAA2B,CAAC;CAS3C,OAAO,IACL,KACoD;EACpD,MAAM,eAAe,MAChB,2BAA2B,OAC5B,KAAA;EAEJ,OAAO,MACD,aAAa,OAAO,QACpB,eACF,aAAa;CACnB;CAEA,OAAO,IAAI,QAA2D;EACpE,aAAa,MAAM;EAEnB,MAAM,SAAS,EAAE,GAAG,OAAO;EAC3B,KAAK,MAAM,UAAU,aAAa,SAAS;GACzC,aAAa,OAAO,UAAU,OAAO;GACrC,OAAO,OAAO;EAChB;EAEA,OAAO;CACT;CAEA,OAAO,QAAc;EACnB,aAAa,SAAS,CAAC;CACzB;AACF"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -241,6 +241,7 @@ interface RepoGlobalConfig extends GlobalInheritableConfig {
|
|
|
241
241
|
ignorePrAuthor?: boolean;
|
|
242
242
|
allowedUnsafeExecutions?: AllowedUnsafeExecution[];
|
|
243
243
|
onboardingAutoCloseAge?: number;
|
|
244
|
+
productLinks?: Record<string, string>;
|
|
244
245
|
toolSettings?: ToolSettingsOptions;
|
|
245
246
|
}
|
|
246
247
|
/**
|
package/dist/config/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../lib/config/types.ts"],"sourcesContent":["import type { Category, PlatformId } from '../constants/index.ts';\nimport type { LogLevelRemap } from '../logger/types.ts';\nimport type { ManagerName } from '../manager-list.generated.ts';\nimport type { CustomManager } from '../modules/manager/custom/types.ts';\nimport type {\n GitUrlOption,\n RepoSortMethod,\n SortMethod,\n} from '../modules/platform/types.ts';\nimport type {\n AutoMergeType,\n HostRule,\n Nullish,\n RangeStrategy,\n SkipReason,\n} from '../types/index.ts';\nimport type { StageName } from '../types/skip-reason.ts';\nimport type {\n AdditionalConstraintName,\n ConstraintName,\n ToolName,\n} from '../util/exec/types.ts';\nimport type { GitNoVerifyOption } from '../util/git/types.ts';\nimport type { MergeConfidence } from '../util/merge-confidence/types.ts';\nimport type { Timestamp } from '../util/timestamp.ts';\n\nexport type RenovateConfigStage =\n | 'global'\n | 'inherit'\n | 'repository'\n | 'package'\n | 'branch'\n | 'pr';\n\nexport type RenovateSplit =\n | 'init'\n | 'onboarding'\n | 'extract'\n | 'lookup'\n | 'update';\n\nexport type RepositoryCacheConfig = 'disabled' | 'enabled' | 'reset';\nexport type RepositoryCacheType = 'local' | (string & {});\nexport type DryRunConfig = 'extract' | 'lookup' | 'full';\nexport type RequiredConfig = 'required' | 'optional' | 'ignored';\n\nexport interface GroupConfig extends Record<string, unknown> {\n branchName?: string;\n branchTopic?: string;\n}\n\nexport type RecreateWhen = 'auto' | 'never' | 'always';\nexport type StatusCheckWhen = 'always' | 'never' | 'failed';\nexport type PlatformCommitOptions = 'auto' | 'disabled' | 'enabled';\n\nexport type BinarySource = 'docker' | 'global' | 'install' | 'hermit';\n\n// TODO: Proper typings\n/**\n * Any configuration that could be used either top-level in a repository config (or Global, Inherited or Shareable Preset configuration), or:\n *\n * - in a datasource-specific configuration\n * - in a manager-specific configuration\n * - in a Package Rule\n *\n * @see RenovateConfig for the superset of all configuration allowed in a given repository\n *\n */\nexport interface RenovateSharedConfig {\n $schema?: string;\n abandonmentThreshold?: Nullish<string>;\n addLabels?: string[];\n assignAutomerge?: boolean;\n autoApprove?: boolean;\n autoReplaceGlobalMatch?: boolean;\n automerge?: boolean;\n automergeSchedule?: string[];\n automergeStrategy?: MergeStrategy;\n automergeType?: AutoMergeType;\n azureWorkItemId?: number;\n branchName?: string;\n branchNameStrict?: boolean;\n branchPrefix?: string;\n branchPrefixOld?: string;\n bumpVersions?: BumpVersionConfig[];\n commitBody?: string;\n commitBodyTable?: boolean;\n commitMessage?: string;\n commitMessageAction?: string;\n commitMessageExtra?: string;\n commitMessageLowerCase?: 'auto' | 'never';\n commitMessagePrefix?: string;\n commitMessageTopic?: string;\n confidential?: boolean;\n configValidationError?: boolean;\n changelogUrl?: string;\n dependencyDashboardApproval?: boolean;\n draftPR?: boolean;\n enabled?: boolean;\n enabledManagers?: string[];\n encrypted?: Record<string, string>;\n extends?: string[];\n extractVersion?: string;\n managerFilePatterns?: string[];\n followTag?: string;\n force?: RenovateConfig;\n gitIgnoredAuthors?: string[];\n group?: GroupConfig;\n groupName?: string;\n groupSingleUpdates?: boolean;\n groupSlug?: string;\n hashedBranchLength?: number;\n ignoreDeps?: string[];\n ignorePaths?: string[];\n ignoreTests?: boolean;\n ignoreUnstable?: boolean;\n includePaths?: string[];\n internalChecksAsSuccess?: boolean;\n internalChecksFilter?: 'strict' | 'flexible' | 'none';\n keepUpdatedLabel?: string;\n labels?: string[];\n manager?: string;\n milestone?: number;\n minimumReleaseAge?: Nullish<string>;\n npmrc?: string;\n npmrcMerge?: boolean;\n npmToken?: string;\n\n pinDigests?: boolean;\n platformAutomerge?: boolean;\n platformCommit?: PlatformCommitOptions;\n postUpgradeTasks?: PostUpgradeTasks;\n prBodyColumns?: string[];\n prBodyDefinitions?: Record<string, string>;\n prBodyHeadingDefinitions?: Record<string, string>;\n prBodyNotes?: string[];\n prCreation?: 'immediate' | 'not-pending' | 'status-success' | 'approval';\n prFooter?: string;\n prHeader?: string;\n prPriority?: number;\n prTitle?: string;\n prTitleStrict?: boolean;\n productLinks?: Record<string, string>;\n pruneBranchAfterAutomerge?: boolean;\n rangeStrategy?: RangeStrategy;\n rebaseLabel?: string;\n rebaseWhen?: string;\n recreateClosed?: boolean;\n recreateWhen?: RecreateWhen;\n repository?: string;\n repositoryCache?: RepositoryCacheConfig;\n repositoryCacheType?: RepositoryCacheType;\n respectLatest?: boolean;\n rollbackPrs?: boolean;\n schedule?: string[];\n semanticCommitScope?: string | null;\n semanticCommitType?: string;\n semanticCommits?: 'auto' | 'enabled' | 'disabled';\n separateMajorMinor?: boolean;\n separateMinorPatch?: boolean;\n separateMultipleMajor?: boolean;\n separateMultipleMinor?: boolean;\n skipArtifactsUpdate?: boolean;\n stopUpdatingLabel?: string;\n suppressNotifications?: string[];\n timezone?: string;\n unicodeEmoji?: boolean;\n updateNotScheduled?: boolean;\n versioning?: string;\n versionCompatibility?: string;\n}\n\n/**\n * Contains all options with globalOnly=true && inheritConfigSupport=true\n */\nexport interface GlobalInheritableConfig {\n bbUseDevelopmentBranch?: boolean;\n configFileNames?: string[];\n onboarding?: boolean;\n onboardingAutoCloseAge?: number;\n onboardingBranch?: string;\n onboardingCommitMessage?: string;\n onboardingConfig?: RenovateConfig;\n onboardingConfigFileName?: string;\n onboardingNoDeps?: 'auto' | 'enabled' | 'disabled';\n onboardingPrTitle?: string;\n requireConfig?: RequiredConfig;\n}\n\n// Config options used only within the global worker\n// The below should contain config options where stage=global\n/** @deprecated use `RepoGlobalConfig` instead **/\nexport interface GlobalOnlyConfigLegacy {\n autodiscover?: boolean;\n autodiscoverFilter?: string[] | string;\n autodiscoverNamespaces?: string[];\n autodiscoverProjects?: string[];\n autodiscoverTopics?: string[];\n baseDir?: string;\n cacheDir?: string;\n containerbaseDir?: string;\n detectHostRulesFromEnv?: boolean;\n dockerCliOptions?: string;\n endpoint?: string;\n forceCli?: boolean;\n gitNoVerify?: GitNoVerifyOption[];\n gitPrivateKey?: string;\n gitPrivateKeyPassphrase?: string;\n globalExtends?: string[];\n mergeConfidenceDatasources?: string[];\n mergeConfidenceEndpoint?: string;\n platform?: PlatformId;\n processEnv?: Record<string, string>;\n prCommitsPerRunLimit?: number;\n privateKey?: string;\n privateKeyOld?: string;\n privateKeyPath?: string;\n privateKeyPathOld?: string;\n redisPrefix?: string;\n redisUrl?: string;\n repositories?: RenovateRepository[];\n useCloudMetadataServices?: boolean;\n deleteConfigFile?: boolean;\n deleteAdditionalConfigFile?: boolean;\n}\n\n/**\n * Any global-only configuration set by self-hosted administrators.\n *\n * Used within the repository worker.\n *\n * Should only contain config options where globalOnly=true.\n */\nexport interface RepoGlobalConfig extends GlobalInheritableConfig {\n allowedCommands?: string[];\n allowCustomCrateRegistries?: boolean;\n allowPlugins?: boolean;\n allowScripts?: boolean;\n allowShellExecutorForPostUpgradeCommands?: boolean;\n allowedEnv?: string[];\n allowedHeaders?: string[];\n binarySource?: BinarySource;\n cacheDir?: string;\n cacheHardTtlMinutes?: number;\n cacheTtlOverride?: Record<string, number>;\n containerbaseDir?: string;\n customEnvVariables?: Record<string, string>;\n dockerChildPrefix?: string;\n dockerCliOptions?: string;\n dockerSidecarImage?: string;\n dockerUser?: string;\n dryRun?: DryRunConfig;\n encryptedWarning?: string;\n endpoint?: string;\n executionTimeout?: number;\n exposeAllEnv?: boolean;\n gitTimeout?: number;\n githubTokenWarn?: boolean;\n includeMirrors?: boolean;\n localDir?: string;\n migratePresets?: Record<string, string>;\n platform?: PlatformId;\n prCacheSyncMaxPages?: number;\n presetCachePersistence?: boolean;\n httpCacheTtlDays?: number;\n autodiscoverRepoSort?: RepoSortMethod;\n autodiscoverRepoOrder?: SortMethod;\n userAgent?: string;\n dockerMaxPages?: number;\n s3Endpoint?: string;\n s3PathStyle?: boolean;\n cachePrivatePackages?: boolean;\n repositoryCacheForceLocal?: boolean;\n configFileNames?: string[];\n ignorePrAuthor?: boolean;\n allowedUnsafeExecutions?: AllowedUnsafeExecution[];\n onboardingAutoCloseAge?: number;\n toolSettings?: ToolSettingsOptions;\n}\n\n/**\n * Those options are global only but still passed into the repository worker config.\n *\n * @deprecated https://github.com/renovatebot/renovate/issues/39693\n */\nexport interface LegacyAdminConfig {\n baseDir?: string;\n localDir?: string;\n\n logContext?: string;\n\n onboarding?: boolean;\n onboardingBranch?: string;\n onboardingNoDeps?: 'auto' | 'enabled' | 'disabled';\n onboardingRebaseCheckbox?: boolean;\n onboardingConfig?: RenovateConfig;\n onboardingConfigFileName?: string;\n\n optimizeForDisabled?: boolean;\n\n persistRepoData?: boolean;\n\n prCommitsPerRunLimit?: number;\n\n requireConfig?: RequiredConfig;\n\n useCloudMetadataServices?: boolean;\n\n writeDiscoveredRepos?: string;\n}\n\nexport type ExecutionMode = 'branch' | 'update';\n\nexport interface PostUpgradeTasks {\n commands?: string[];\n workingDirTemplate?: string;\n dataFileTemplate?: string;\n fileFilters?: string[];\n executionMode: ExecutionMode;\n installTools?: Partial<Record<ToolName, Record<never, never>>>;\n}\n\nexport type UpdateConfig<\n T extends RenovateSharedConfig = RenovateSharedConfig,\n> = Partial<Record<UpdateType, T | null>>;\n\nexport type RenovateRepository =\n | string\n | (AllConfig & {\n repository: string;\n });\n\nexport type UseBaseBranchConfigType = 'merge' | 'none';\nexport type ConstraintsFilter = 'strict' | 'none';\nexport type MinimumReleaseAgeBehaviour =\n | 'timestamp-required'\n | 'timestamp-optional';\n\nexport const allowedStatusCheckStrings = [\n 'minimumReleaseAge',\n 'mergeConfidence',\n 'configValidation',\n 'artifactError',\n] as const;\nexport type StatusCheckKey = (typeof allowedStatusCheckStrings)[number];\ntype UserEnv = Record<string, string>;\n\n/**\n * Computed properties, for internal use only\n */\nexport interface RenovateInternalConfig {\n /** computed base branch from patterns - for internal use only */\n baseBranches?: string[];\n currentCompatibility?: string;\n datasource?: string;\n hasBaseBranches?: boolean;\n isFork?: boolean;\n isVulnerabilityAlert?: boolean;\n\n /** What is this used for? */\n remediations?: unknown;\n /** What is this used for? */\n vulnerabilityAlertsOnly?: boolean;\n}\n\n// TODO: Proper typings\n/**\n * Configuration that could be used either top-level in a repository config (or Global, Inherited or Shareable Preset configuration).\n *\n * This is a superset of any configuration that a Renovate user (not self-hosted administrator) can set.\n */\nexport interface RenovateConfig\n extends\n LegacyAdminConfig,\n RenovateSharedConfig,\n UpdateConfig<PackageRule>,\n AssigneesAndReviewersConfig,\n ConfigMigration,\n RenovateInternalConfig {\n s3Endpoint?: string;\n s3PathStyle?: boolean;\n reportFormatting?: boolean;\n reportPath?: string;\n reportType?: 'logging' | 'file' | 's3' | null;\n depName?: string;\n /** user configurable base branch patterns*/\n baseBranchPatterns?: string[];\n useBaseBranchConfig?: UseBaseBranchConfigType;\n baseBranch?: string;\n defaultBranch?: string;\n branchList?: string[];\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n description?: string | string[];\n detectGlobalManagerConfig?: boolean;\n errors?: ValidationMessage[];\n forkModeDisallowMaintainerEdits?: boolean;\n forkProcessing?: 'auto' | 'enabled' | 'disabled';\n forkToken?: string;\n\n gitAuthor?: string;\n\n hostRules?: HostRule[];\n\n inheritConfig?: boolean;\n inheritConfigFileName?: string;\n inheritConfigRepoName?: string;\n inheritConfigStrict?: boolean;\n\n ignorePresets?: string[];\n\n fileList?: string[];\n configWarningReuseIssue?: boolean;\n dependencyDashboard?: boolean;\n dependencyDashboardAutoclose?: boolean;\n dependencyDashboardChecks?: Record<string, string>;\n dependencyDashboardIssue?: number;\n dependencyDashboardTitle?: string;\n dependencyDashboardHeader?: string;\n dependencyDashboardFooter?: string;\n dependencyDashboardLabels?: string[];\n dependencyDashboardOSVVulnerabilitySummary?: 'none' | 'all' | 'unresolved';\n dependencyDashboardReportAbandonment?: boolean;\n mode?: 'silent' | 'full';\n packageFile?: string;\n packageRules?: PackageRule[];\n postUpdateOptions?: string[];\n branchConcurrentLimit?: number | null;\n parentOrg?: string;\n prConcurrentLimit?: number;\n commitHourlyLimit?: number;\n prHourlyLimit?: number;\n\n printConfig?: boolean;\n\n pruneStaleBranches?: boolean;\n\n defaultRegistryUrls?: string[];\n registryUrls?: string[] | null;\n registryAliases?: Record<string, string>;\n\n /**\n * What is this used for?\n * @deprecated\n */\n renovateJsonPresent?: boolean;\n\n repoIsOnboarded?: boolean;\n repoIsActivated?: boolean;\n\n topLevelOrg?: string;\n updateInternalDeps?: boolean;\n updateType?: UpdateType;\n\n warnings?: ValidationMessage[];\n vulnerabilityAlerts?: RenovateSharedConfig;\n osvVulnerabilityAlerts?: boolean;\n vulnerabilitySeverity?: string;\n customManagers?: CustomManager[];\n customDatasources?: Record<string, CustomDatasourceConfig>;\n\n fetchChangeLogs?: FetchChangeLogsOptions;\n secrets?: Record<string, string>;\n variables?: Record<string, string>;\n\n constraints?: Partial<Record<ConstraintName, string>>;\n /**\n * Any specific overrides for the versioning for the `AdditionalConstraintName`s.\n */\n constraintsVersioning?: Partial<Record<AdditionalConstraintName, string>>;\n skipInstalls?: boolean | null;\n\n constraintsFiltering?: ConstraintsFilter;\n\n checkedBranches?: string[];\n customizeDashboard?: Record<string, string>;\n\n statusCheckNames?: Record<StatusCheckKey, string | null>;\n statusCheckWhen?: Partial<Record<StatusCheckKey, StatusCheckWhen>>;\n /**\n * User configured environment variables that Renovate uses when executing package manager commands\n */\n env?: UserEnv;\n logLevelRemap?: LogLevelRemap[];\n\n branchTopic?: string;\n additionalBranchPrefix?: string;\n sharedVariableName?: string;\n minimumGroupSize?: number;\n configFileNames?: string[];\n minimumReleaseAgeBehaviour?: MinimumReleaseAgeBehaviour;\n toolSettings?: ToolSettingsOptions;\n}\n\nconst CustomDatasourceFormats = [\n 'html',\n 'json',\n 'plain',\n 'toml',\n 'yaml',\n] as const;\nexport type CustomDatasourceFormats = (typeof CustomDatasourceFormats)[number];\n\nexport interface CustomDatasourceConfig {\n defaultRegistryUrlTemplate?: string;\n format?: CustomDatasourceFormats;\n transformTemplates?: string[];\n}\n\n/**\n * The superset of all configuration that a self-hosted administrator can set, alongside all repository-level configuration.\n *\n */\nexport interface AllConfig\n extends RenovateConfig, GlobalOnlyConfigLegacy, RepoGlobalConfig {\n gitUrl?: GitUrlOption;\n password?: string;\n token?: string;\n username?: string;\n}\n\nexport interface AssigneesAndReviewersConfig {\n assigneesFromCodeOwners?: boolean;\n expandCodeOwnersGroups?: boolean;\n assignees?: string[];\n assigneesSampleSize?: number;\n ignoreReviewers?: string[];\n reviewersFromCodeOwners?: boolean;\n reviewers?: string[];\n reviewersSampleSize?: number;\n additionalReviewers?: string[];\n filterUnavailableUsers?: boolean;\n}\n\nexport type UpdateType =\n | 'major'\n | 'minor'\n | 'patch'\n | 'pin'\n | 'digest'\n | 'pinDigest'\n | 'lockFileMaintenance'\n | 'lockfileUpdate'\n | 'rollback'\n | 'bump'\n | 'replacement';\n\n// These are the update types which can have configuration\nexport const UpdateTypesOptions = [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'digest',\n 'pinDigest',\n 'lockFileMaintenance',\n 'rollback',\n 'replacement',\n] as const;\n\nexport type UpdateTypeOptions = (typeof UpdateTypesOptions)[number];\n\nexport type FetchChangeLogsOptions = 'off' | 'branch' | 'pr';\n\nexport type MatchStringsStrategy = 'any' | 'recursive' | 'combination';\n\nexport type MergeStrategy =\n | 'auto'\n | 'fast-forward'\n | 'merge-commit'\n | 'rebase'\n | 'rebase-merge'\n | 'squash';\n\n// This list should be added to as any new unsafe execution commands should be permitted\nexport type AllowedUnsafeExecution =\n | 'bazelModDeps'\n | 'goGenerate'\n | 'gradleWrapper'\n | 'mise';\n\n// TODO: Proper typings\nexport interface PackageRule\n extends RenovateSharedConfig, RenovateInternalConfig, UpdateConfig {\n allowedVersions?: string;\n description?: string | string[];\n matchBaseBranches?: string[];\n matchCategories?: string[];\n matchConfidence?: MergeConfidence[];\n matchCurrentAge?: string;\n matchCurrentValue?: string;\n matchCurrentVersion?: string;\n matchDatasources?: string[];\n matchDepNames?: string[];\n matchDepTypes?: string[];\n matchFileNames?: string[];\n matchManagers?: string[];\n matchNewValue?: string;\n matchPackageNames?: string[];\n matchRepositories?: string[];\n matchSourceUrls?: string[];\n matchRegistryUrls?: string[];\n matchUpdateTypes?: UpdateType[];\n matchJsonata?: string[];\n overrideDatasource?: string;\n overrideDepName?: string;\n overridePackageName?: string;\n registryUrls?: string[] | null;\n replacementName?: string;\n replacementVersion?: string;\n sourceUrl?: string;\n sourceDirectory?: string;\n vulnerabilitySeverity?: string;\n vulnerabilityFixVersion?: string;\n}\n\nexport interface ValidationMessage {\n topic: string;\n message: string;\n}\n\nexport type AllowedParents =\n | '.'\n | 'bumpVersions'\n | 'customDatasources'\n | 'customManagers'\n | 'hostRules'\n | 'logLevelRemap'\n | 'packageRules'\n | 'postUpgradeTasks'\n | 'vulnerabilityAlerts'\n | 'toolSettings'\n | ManagerName\n | UpdateTypeOptions;\nexport interface RenovateOptionBase {\n /**\n * If true, the option can only be configured by people with access to the Renovate instance.\n * Furthermore, the option should be documented in docs/usage/self-hosted-configuration.md.\n */\n globalOnly?: boolean;\n\n inheritConfigSupport?: boolean;\n\n allowedValues?: string[];\n\n allowString?: boolean;\n\n cli?: boolean;\n\n description: string;\n\n env?: false | string;\n\n /**\n * Do not validate object children\n */\n freeChoice?: boolean;\n\n mergeable?: boolean;\n\n autogenerated?: boolean;\n\n name: string;\n\n parents?: AllowedParents[];\n\n stage?: RenovateConfigStage;\n\n experimental?: boolean;\n\n experimentalDescription?: string;\n\n experimentalIssues?: number[];\n\n advancedUse?: boolean;\n\n /**\n * This is used to add a deprecation message in the docs\n */\n deprecationMsg?: string;\n\n /**\n * For internal use only: add it to any config option that supports regex or glob matching\n */\n patternMatch?: boolean;\n\n /**\n * For internal use only: add it to any config option of type integer that supports negative integers\n */\n allowNegative?: boolean;\n\n /**\n * Managers which support this option, leave undefined if all managers support it.\n */\n supportedManagers?: string[];\n\n /**\n * Platforms which support this option, leave undefined if all platforms support it.\n */\n supportedPlatforms?: PlatformId[];\n\n /**\n * Conditions that must be met for this option to be required.\n */\n requiredIf?: RenovateRequiredOption[];\n\n /**\n * If true, the option's value supports Renovate templating.\n * @see https://docs.renovatebot.com/templates/\n */\n supportsTemplating?: boolean;\n}\n\nexport interface RenovateRequiredOption {\n siblingProperties: { property: string; value: string }[];\n}\n\nexport interface RenovateArrayOption<\n T extends string | number | Record<string, unknown> = Record<string, unknown>,\n> extends RenovateOptionBase {\n default?: T[] | null;\n mergeable?: boolean;\n type: 'array';\n subType?: 'string' | 'object' | 'number';\n}\n\nexport interface RenovateStringArrayOption extends RenovateArrayOption<string> {\n format?: 'regex';\n subType: 'string';\n}\n\nexport interface RenovateNumberArrayOption extends RenovateArrayOption<number> {\n subType: 'number';\n}\n\nexport interface RenovateBooleanOption extends RenovateOptionBase {\n default?: boolean | null;\n type: 'boolean';\n}\n\nexport interface RenovateIntegerOption extends RenovateOptionBase {\n default?: number | null;\n type: 'integer';\n}\n\nexport interface RenovateStringOption extends RenovateOptionBase {\n default?: string | null;\n format?: 'regex';\n\n // Not used\n replaceLineReturns?: boolean;\n type: 'string';\n}\n\nexport interface RenovateObjectOption extends RenovateOptionBase {\n default?: any;\n additionalProperties?: Record<string, unknown> | boolean;\n mergeable?: boolean;\n type: 'object';\n}\n\nexport type RenovateOptions =\n | RenovateStringOption\n | RenovateNumberArrayOption\n | RenovateStringArrayOption\n | RenovateIntegerOption\n | RenovateBooleanOption\n | RenovateArrayOption\n | RenovateObjectOption;\n\nexport interface PackageRuleInputConfig extends RenovateConfig {\n versioning?: string;\n packageFile?: string;\n lockFiles?: string[];\n depType?: string;\n depTypes?: string[];\n depName?: string;\n packageName?: string | null;\n newValue?: string | null;\n currentValue?: string | null;\n currentVersion?: string;\n lockedVersion?: string;\n updateType?: UpdateType;\n mergeConfidenceLevel?: MergeConfidence | undefined;\n isBump?: boolean;\n sourceUrl?: string | null;\n categories?: string[];\n baseBranch?: string;\n manager?: string;\n datasource?: string;\n packageRules?: (PackageRule & PackageRuleInputConfig)[];\n releaseTimestamp?: Timestamp | null;\n repository?: string;\n currentVersionAgeInDays?: number;\n currentVersionTimestamp?: string;\n enabled?: boolean;\n skipReason?: SkipReason;\n skipStage?: StageName;\n}\n\nexport interface ConfigMigration {\n configMigration?: boolean;\n}\n\nexport interface MigratedConfig {\n /**\n * Indicates whether there was a migration applied to the configuration.\n *\n * @returns\n * `false` if the configuration does not need migrating, and `migratedConfig` can be ignored\n * `true` if the configuration was migrated, and if so, `migratedConfig` should be used instead of the provided config\n */\n isMigrated: boolean;\n migratedConfig: RenovateConfig;\n}\n\nexport interface MigratedRenovateConfig extends RenovateConfig {\n endpoints?: HostRule[];\n pathRules: PackageRule[];\n packages: PackageRule[];\n\n node?: RenovateConfig;\n travis?: RenovateConfig;\n gradle?: RenovateConfig;\n}\n\nexport interface ManagerConfig extends RenovateConfig {\n manager: string;\n categories?: Category[];\n}\n\nexport interface ValidationResult {\n errors: ValidationMessage[];\n warnings: ValidationMessage[];\n}\n\nexport interface BumpVersionConfig {\n bumpType?: string;\n filePatterns: string[];\n matchStrings: string[];\n name?: string;\n}\n\nexport interface ToolSettingsOptions {\n jvmMaxMemory?: number;\n jvmMemory?: number;\n nodeMaxMemory?: number;\n}\n"],"mappings":";AAkVA,MAAa,4BAA4B;CACvC;CACA;CACA;CACA;AACF;AA6MA,MAAa,qBAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../lib/config/types.ts"],"sourcesContent":["import type { Category, PlatformId } from '../constants/index.ts';\nimport type { LogLevelRemap } from '../logger/types.ts';\nimport type { ManagerName } from '../manager-list.generated.ts';\nimport type { CustomManager } from '../modules/manager/custom/types.ts';\nimport type {\n GitUrlOption,\n RepoSortMethod,\n SortMethod,\n} from '../modules/platform/types.ts';\nimport type {\n AutoMergeType,\n HostRule,\n Nullish,\n RangeStrategy,\n SkipReason,\n} from '../types/index.ts';\nimport type { StageName } from '../types/skip-reason.ts';\nimport type {\n AdditionalConstraintName,\n ConstraintName,\n ToolName,\n} from '../util/exec/types.ts';\nimport type { GitNoVerifyOption } from '../util/git/types.ts';\nimport type { MergeConfidence } from '../util/merge-confidence/types.ts';\nimport type { Timestamp } from '../util/timestamp.ts';\n\nexport type RenovateConfigStage =\n | 'global'\n | 'inherit'\n | 'repository'\n | 'package'\n | 'branch'\n | 'pr';\n\nexport type RenovateSplit =\n | 'init'\n | 'onboarding'\n | 'extract'\n | 'lookup'\n | 'update';\n\nexport type RepositoryCacheConfig = 'disabled' | 'enabled' | 'reset';\nexport type RepositoryCacheType = 'local' | (string & {});\nexport type DryRunConfig = 'extract' | 'lookup' | 'full';\nexport type RequiredConfig = 'required' | 'optional' | 'ignored';\n\nexport interface GroupConfig extends Record<string, unknown> {\n branchName?: string;\n branchTopic?: string;\n}\n\nexport type RecreateWhen = 'auto' | 'never' | 'always';\nexport type StatusCheckWhen = 'always' | 'never' | 'failed';\nexport type PlatformCommitOptions = 'auto' | 'disabled' | 'enabled';\n\nexport type BinarySource = 'docker' | 'global' | 'install' | 'hermit';\n\n// TODO: Proper typings\n/**\n * Any configuration that could be used either top-level in a repository config (or Global, Inherited or Shareable Preset configuration), or:\n *\n * - in a datasource-specific configuration\n * - in a manager-specific configuration\n * - in a Package Rule\n *\n * @see RenovateConfig for the superset of all configuration allowed in a given repository\n *\n */\nexport interface RenovateSharedConfig {\n $schema?: string;\n abandonmentThreshold?: Nullish<string>;\n addLabels?: string[];\n assignAutomerge?: boolean;\n autoApprove?: boolean;\n autoReplaceGlobalMatch?: boolean;\n automerge?: boolean;\n automergeSchedule?: string[];\n automergeStrategy?: MergeStrategy;\n automergeType?: AutoMergeType;\n azureWorkItemId?: number;\n branchName?: string;\n branchNameStrict?: boolean;\n branchPrefix?: string;\n branchPrefixOld?: string;\n bumpVersions?: BumpVersionConfig[];\n commitBody?: string;\n commitBodyTable?: boolean;\n commitMessage?: string;\n commitMessageAction?: string;\n commitMessageExtra?: string;\n commitMessageLowerCase?: 'auto' | 'never';\n commitMessagePrefix?: string;\n commitMessageTopic?: string;\n confidential?: boolean;\n configValidationError?: boolean;\n changelogUrl?: string;\n dependencyDashboardApproval?: boolean;\n draftPR?: boolean;\n enabled?: boolean;\n enabledManagers?: string[];\n encrypted?: Record<string, string>;\n extends?: string[];\n extractVersion?: string;\n managerFilePatterns?: string[];\n followTag?: string;\n force?: RenovateConfig;\n gitIgnoredAuthors?: string[];\n group?: GroupConfig;\n groupName?: string;\n groupSingleUpdates?: boolean;\n groupSlug?: string;\n hashedBranchLength?: number;\n ignoreDeps?: string[];\n ignorePaths?: string[];\n ignoreTests?: boolean;\n ignoreUnstable?: boolean;\n includePaths?: string[];\n internalChecksAsSuccess?: boolean;\n internalChecksFilter?: 'strict' | 'flexible' | 'none';\n keepUpdatedLabel?: string;\n labels?: string[];\n manager?: string;\n milestone?: number;\n minimumReleaseAge?: Nullish<string>;\n npmrc?: string;\n npmrcMerge?: boolean;\n npmToken?: string;\n\n pinDigests?: boolean;\n platformAutomerge?: boolean;\n platformCommit?: PlatformCommitOptions;\n postUpgradeTasks?: PostUpgradeTasks;\n prBodyColumns?: string[];\n prBodyDefinitions?: Record<string, string>;\n prBodyHeadingDefinitions?: Record<string, string>;\n prBodyNotes?: string[];\n prCreation?: 'immediate' | 'not-pending' | 'status-success' | 'approval';\n prFooter?: string;\n prHeader?: string;\n prPriority?: number;\n prTitle?: string;\n prTitleStrict?: boolean;\n productLinks?: Record<string, string>;\n pruneBranchAfterAutomerge?: boolean;\n rangeStrategy?: RangeStrategy;\n rebaseLabel?: string;\n rebaseWhen?: string;\n recreateClosed?: boolean;\n recreateWhen?: RecreateWhen;\n repository?: string;\n repositoryCache?: RepositoryCacheConfig;\n repositoryCacheType?: RepositoryCacheType;\n respectLatest?: boolean;\n rollbackPrs?: boolean;\n schedule?: string[];\n semanticCommitScope?: string | null;\n semanticCommitType?: string;\n semanticCommits?: 'auto' | 'enabled' | 'disabled';\n separateMajorMinor?: boolean;\n separateMinorPatch?: boolean;\n separateMultipleMajor?: boolean;\n separateMultipleMinor?: boolean;\n skipArtifactsUpdate?: boolean;\n stopUpdatingLabel?: string;\n suppressNotifications?: string[];\n timezone?: string;\n unicodeEmoji?: boolean;\n updateNotScheduled?: boolean;\n versioning?: string;\n versionCompatibility?: string;\n}\n\n/**\n * Contains all options with globalOnly=true && inheritConfigSupport=true\n */\nexport interface GlobalInheritableConfig {\n bbUseDevelopmentBranch?: boolean;\n configFileNames?: string[];\n onboarding?: boolean;\n onboardingAutoCloseAge?: number;\n onboardingBranch?: string;\n onboardingCommitMessage?: string;\n onboardingConfig?: RenovateConfig;\n onboardingConfigFileName?: string;\n onboardingNoDeps?: 'auto' | 'enabled' | 'disabled';\n onboardingPrTitle?: string;\n requireConfig?: RequiredConfig;\n}\n\n// Config options used only within the global worker\n// The below should contain config options where stage=global\n/** @deprecated use `RepoGlobalConfig` instead **/\nexport interface GlobalOnlyConfigLegacy {\n autodiscover?: boolean;\n autodiscoverFilter?: string[] | string;\n autodiscoverNamespaces?: string[];\n autodiscoverProjects?: string[];\n autodiscoverTopics?: string[];\n baseDir?: string;\n cacheDir?: string;\n containerbaseDir?: string;\n detectHostRulesFromEnv?: boolean;\n dockerCliOptions?: string;\n endpoint?: string;\n forceCli?: boolean;\n gitNoVerify?: GitNoVerifyOption[];\n gitPrivateKey?: string;\n gitPrivateKeyPassphrase?: string;\n globalExtends?: string[];\n mergeConfidenceDatasources?: string[];\n mergeConfidenceEndpoint?: string;\n platform?: PlatformId;\n processEnv?: Record<string, string>;\n prCommitsPerRunLimit?: number;\n privateKey?: string;\n privateKeyOld?: string;\n privateKeyPath?: string;\n privateKeyPathOld?: string;\n redisPrefix?: string;\n redisUrl?: string;\n repositories?: RenovateRepository[];\n useCloudMetadataServices?: boolean;\n deleteConfigFile?: boolean;\n deleteAdditionalConfigFile?: boolean;\n}\n\n/**\n * Any global-only configuration set by self-hosted administrators.\n *\n * Used within the repository worker.\n *\n * Should only contain config options where globalOnly=true.\n */\nexport interface RepoGlobalConfig extends GlobalInheritableConfig {\n allowedCommands?: string[];\n allowCustomCrateRegistries?: boolean;\n allowPlugins?: boolean;\n allowScripts?: boolean;\n allowShellExecutorForPostUpgradeCommands?: boolean;\n allowedEnv?: string[];\n allowedHeaders?: string[];\n binarySource?: BinarySource;\n cacheDir?: string;\n cacheHardTtlMinutes?: number;\n cacheTtlOverride?: Record<string, number>;\n containerbaseDir?: string;\n customEnvVariables?: Record<string, string>;\n dockerChildPrefix?: string;\n dockerCliOptions?: string;\n dockerSidecarImage?: string;\n dockerUser?: string;\n dryRun?: DryRunConfig;\n encryptedWarning?: string;\n endpoint?: string;\n executionTimeout?: number;\n exposeAllEnv?: boolean;\n gitTimeout?: number;\n githubTokenWarn?: boolean;\n includeMirrors?: boolean;\n localDir?: string;\n migratePresets?: Record<string, string>;\n platform?: PlatformId;\n prCacheSyncMaxPages?: number;\n presetCachePersistence?: boolean;\n httpCacheTtlDays?: number;\n autodiscoverRepoSort?: RepoSortMethod;\n autodiscoverRepoOrder?: SortMethod;\n userAgent?: string;\n dockerMaxPages?: number;\n s3Endpoint?: string;\n s3PathStyle?: boolean;\n cachePrivatePackages?: boolean;\n repositoryCacheForceLocal?: boolean;\n configFileNames?: string[];\n ignorePrAuthor?: boolean;\n allowedUnsafeExecutions?: AllowedUnsafeExecution[];\n onboardingAutoCloseAge?: number;\n productLinks?: Record<string, string>;\n toolSettings?: ToolSettingsOptions;\n}\n\n/**\n * Those options are global only but still passed into the repository worker config.\n *\n * @deprecated https://github.com/renovatebot/renovate/issues/39693\n */\nexport interface LegacyAdminConfig {\n baseDir?: string;\n localDir?: string;\n\n logContext?: string;\n\n onboarding?: boolean;\n onboardingBranch?: string;\n onboardingNoDeps?: 'auto' | 'enabled' | 'disabled';\n onboardingRebaseCheckbox?: boolean;\n onboardingConfig?: RenovateConfig;\n onboardingConfigFileName?: string;\n\n optimizeForDisabled?: boolean;\n\n persistRepoData?: boolean;\n\n prCommitsPerRunLimit?: number;\n\n requireConfig?: RequiredConfig;\n\n useCloudMetadataServices?: boolean;\n\n writeDiscoveredRepos?: string;\n}\n\nexport type ExecutionMode = 'branch' | 'update';\n\nexport interface PostUpgradeTasks {\n commands?: string[];\n workingDirTemplate?: string;\n dataFileTemplate?: string;\n fileFilters?: string[];\n executionMode: ExecutionMode;\n installTools?: Partial<Record<ToolName, Record<never, never>>>;\n}\n\nexport type UpdateConfig<\n T extends RenovateSharedConfig = RenovateSharedConfig,\n> = Partial<Record<UpdateType, T | null>>;\n\nexport type RenovateRepository =\n | string\n | (AllConfig & {\n repository: string;\n });\n\nexport type UseBaseBranchConfigType = 'merge' | 'none';\nexport type ConstraintsFilter = 'strict' | 'none';\nexport type MinimumReleaseAgeBehaviour =\n | 'timestamp-required'\n | 'timestamp-optional';\n\nexport const allowedStatusCheckStrings = [\n 'minimumReleaseAge',\n 'mergeConfidence',\n 'configValidation',\n 'artifactError',\n] as const;\nexport type StatusCheckKey = (typeof allowedStatusCheckStrings)[number];\ntype UserEnv = Record<string, string>;\n\n/**\n * Computed properties, for internal use only\n */\nexport interface RenovateInternalConfig {\n /** computed base branch from patterns - for internal use only */\n baseBranches?: string[];\n currentCompatibility?: string;\n datasource?: string;\n hasBaseBranches?: boolean;\n isFork?: boolean;\n isVulnerabilityAlert?: boolean;\n\n /** What is this used for? */\n remediations?: unknown;\n /** What is this used for? */\n vulnerabilityAlertsOnly?: boolean;\n}\n\n// TODO: Proper typings\n/**\n * Configuration that could be used either top-level in a repository config (or Global, Inherited or Shareable Preset configuration).\n *\n * This is a superset of any configuration that a Renovate user (not self-hosted administrator) can set.\n */\nexport interface RenovateConfig\n extends\n LegacyAdminConfig,\n RenovateSharedConfig,\n UpdateConfig<PackageRule>,\n AssigneesAndReviewersConfig,\n ConfigMigration,\n RenovateInternalConfig {\n s3Endpoint?: string;\n s3PathStyle?: boolean;\n reportFormatting?: boolean;\n reportPath?: string;\n reportType?: 'logging' | 'file' | 's3' | null;\n depName?: string;\n /** user configurable base branch patterns*/\n baseBranchPatterns?: string[];\n useBaseBranchConfig?: UseBaseBranchConfigType;\n baseBranch?: string;\n defaultBranch?: string;\n branchList?: string[];\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n description?: string | string[];\n detectGlobalManagerConfig?: boolean;\n errors?: ValidationMessage[];\n forkModeDisallowMaintainerEdits?: boolean;\n forkProcessing?: 'auto' | 'enabled' | 'disabled';\n forkToken?: string;\n\n gitAuthor?: string;\n\n hostRules?: HostRule[];\n\n inheritConfig?: boolean;\n inheritConfigFileName?: string;\n inheritConfigRepoName?: string;\n inheritConfigStrict?: boolean;\n\n ignorePresets?: string[];\n\n fileList?: string[];\n configWarningReuseIssue?: boolean;\n dependencyDashboard?: boolean;\n dependencyDashboardAutoclose?: boolean;\n dependencyDashboardChecks?: Record<string, string>;\n dependencyDashboardIssue?: number;\n dependencyDashboardTitle?: string;\n dependencyDashboardHeader?: string;\n dependencyDashboardFooter?: string;\n dependencyDashboardLabels?: string[];\n dependencyDashboardOSVVulnerabilitySummary?: 'none' | 'all' | 'unresolved';\n dependencyDashboardReportAbandonment?: boolean;\n mode?: 'silent' | 'full';\n packageFile?: string;\n packageRules?: PackageRule[];\n postUpdateOptions?: string[];\n branchConcurrentLimit?: number | null;\n parentOrg?: string;\n prConcurrentLimit?: number;\n commitHourlyLimit?: number;\n prHourlyLimit?: number;\n\n printConfig?: boolean;\n\n pruneStaleBranches?: boolean;\n\n defaultRegistryUrls?: string[];\n registryUrls?: string[] | null;\n registryAliases?: Record<string, string>;\n\n /**\n * What is this used for?\n * @deprecated\n */\n renovateJsonPresent?: boolean;\n\n repoIsOnboarded?: boolean;\n repoIsActivated?: boolean;\n\n topLevelOrg?: string;\n updateInternalDeps?: boolean;\n updateType?: UpdateType;\n\n warnings?: ValidationMessage[];\n vulnerabilityAlerts?: RenovateSharedConfig;\n osvVulnerabilityAlerts?: boolean;\n vulnerabilitySeverity?: string;\n customManagers?: CustomManager[];\n customDatasources?: Record<string, CustomDatasourceConfig>;\n\n fetchChangeLogs?: FetchChangeLogsOptions;\n secrets?: Record<string, string>;\n variables?: Record<string, string>;\n\n constraints?: Partial<Record<ConstraintName, string>>;\n /**\n * Any specific overrides for the versioning for the `AdditionalConstraintName`s.\n */\n constraintsVersioning?: Partial<Record<AdditionalConstraintName, string>>;\n skipInstalls?: boolean | null;\n\n constraintsFiltering?: ConstraintsFilter;\n\n checkedBranches?: string[];\n customizeDashboard?: Record<string, string>;\n\n statusCheckNames?: Record<StatusCheckKey, string | null>;\n statusCheckWhen?: Partial<Record<StatusCheckKey, StatusCheckWhen>>;\n /**\n * User configured environment variables that Renovate uses when executing package manager commands\n */\n env?: UserEnv;\n logLevelRemap?: LogLevelRemap[];\n\n branchTopic?: string;\n additionalBranchPrefix?: string;\n sharedVariableName?: string;\n minimumGroupSize?: number;\n configFileNames?: string[];\n minimumReleaseAgeBehaviour?: MinimumReleaseAgeBehaviour;\n toolSettings?: ToolSettingsOptions;\n}\n\nconst CustomDatasourceFormats = [\n 'html',\n 'json',\n 'plain',\n 'toml',\n 'yaml',\n] as const;\nexport type CustomDatasourceFormats = (typeof CustomDatasourceFormats)[number];\n\nexport interface CustomDatasourceConfig {\n defaultRegistryUrlTemplate?: string;\n format?: CustomDatasourceFormats;\n transformTemplates?: string[];\n}\n\n/**\n * The superset of all configuration that a self-hosted administrator can set, alongside all repository-level configuration.\n *\n */\nexport interface AllConfig\n extends RenovateConfig, GlobalOnlyConfigLegacy, RepoGlobalConfig {\n gitUrl?: GitUrlOption;\n password?: string;\n token?: string;\n username?: string;\n}\n\nexport interface AssigneesAndReviewersConfig {\n assigneesFromCodeOwners?: boolean;\n expandCodeOwnersGroups?: boolean;\n assignees?: string[];\n assigneesSampleSize?: number;\n ignoreReviewers?: string[];\n reviewersFromCodeOwners?: boolean;\n reviewers?: string[];\n reviewersSampleSize?: number;\n additionalReviewers?: string[];\n filterUnavailableUsers?: boolean;\n}\n\nexport type UpdateType =\n | 'major'\n | 'minor'\n | 'patch'\n | 'pin'\n | 'digest'\n | 'pinDigest'\n | 'lockFileMaintenance'\n | 'lockfileUpdate'\n | 'rollback'\n | 'bump'\n | 'replacement';\n\n// These are the update types which can have configuration\nexport const UpdateTypesOptions = [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'digest',\n 'pinDigest',\n 'lockFileMaintenance',\n 'rollback',\n 'replacement',\n] as const;\n\nexport type UpdateTypeOptions = (typeof UpdateTypesOptions)[number];\n\nexport type FetchChangeLogsOptions = 'off' | 'branch' | 'pr';\n\nexport type MatchStringsStrategy = 'any' | 'recursive' | 'combination';\n\nexport type MergeStrategy =\n | 'auto'\n | 'fast-forward'\n | 'merge-commit'\n | 'rebase'\n | 'rebase-merge'\n | 'squash';\n\n// This list should be added to as any new unsafe execution commands should be permitted\nexport type AllowedUnsafeExecution =\n | 'bazelModDeps'\n | 'goGenerate'\n | 'gradleWrapper'\n | 'mise';\n\n// TODO: Proper typings\nexport interface PackageRule\n extends RenovateSharedConfig, RenovateInternalConfig, UpdateConfig {\n allowedVersions?: string;\n description?: string | string[];\n matchBaseBranches?: string[];\n matchCategories?: string[];\n matchConfidence?: MergeConfidence[];\n matchCurrentAge?: string;\n matchCurrentValue?: string;\n matchCurrentVersion?: string;\n matchDatasources?: string[];\n matchDepNames?: string[];\n matchDepTypes?: string[];\n matchFileNames?: string[];\n matchManagers?: string[];\n matchNewValue?: string;\n matchPackageNames?: string[];\n matchRepositories?: string[];\n matchSourceUrls?: string[];\n matchRegistryUrls?: string[];\n matchUpdateTypes?: UpdateType[];\n matchJsonata?: string[];\n overrideDatasource?: string;\n overrideDepName?: string;\n overridePackageName?: string;\n registryUrls?: string[] | null;\n replacementName?: string;\n replacementVersion?: string;\n sourceUrl?: string;\n sourceDirectory?: string;\n vulnerabilitySeverity?: string;\n vulnerabilityFixVersion?: string;\n}\n\nexport interface ValidationMessage {\n topic: string;\n message: string;\n}\n\nexport type AllowedParents =\n | '.'\n | 'bumpVersions'\n | 'customDatasources'\n | 'customManagers'\n | 'hostRules'\n | 'logLevelRemap'\n | 'packageRules'\n | 'postUpgradeTasks'\n | 'vulnerabilityAlerts'\n | 'toolSettings'\n | ManagerName\n | UpdateTypeOptions;\nexport interface RenovateOptionBase {\n /**\n * If true, the option can only be configured by people with access to the Renovate instance.\n * Furthermore, the option should be documented in docs/usage/self-hosted-configuration.md.\n */\n globalOnly?: boolean;\n\n inheritConfigSupport?: boolean;\n\n allowedValues?: string[];\n\n allowString?: boolean;\n\n cli?: boolean;\n\n description: string;\n\n env?: false | string;\n\n /**\n * Do not validate object children\n */\n freeChoice?: boolean;\n\n mergeable?: boolean;\n\n autogenerated?: boolean;\n\n name: string;\n\n parents?: AllowedParents[];\n\n stage?: RenovateConfigStage;\n\n experimental?: boolean;\n\n experimentalDescription?: string;\n\n experimentalIssues?: number[];\n\n advancedUse?: boolean;\n\n /**\n * This is used to add a deprecation message in the docs\n */\n deprecationMsg?: string;\n\n /**\n * For internal use only: add it to any config option that supports regex or glob matching\n */\n patternMatch?: boolean;\n\n /**\n * For internal use only: add it to any config option of type integer that supports negative integers\n */\n allowNegative?: boolean;\n\n /**\n * Managers which support this option, leave undefined if all managers support it.\n */\n supportedManagers?: string[];\n\n /**\n * Platforms which support this option, leave undefined if all platforms support it.\n */\n supportedPlatforms?: PlatformId[];\n\n /**\n * Conditions that must be met for this option to be required.\n */\n requiredIf?: RenovateRequiredOption[];\n\n /**\n * If true, the option's value supports Renovate templating.\n * @see https://docs.renovatebot.com/templates/\n */\n supportsTemplating?: boolean;\n}\n\nexport interface RenovateRequiredOption {\n siblingProperties: { property: string; value: string }[];\n}\n\nexport interface RenovateArrayOption<\n T extends string | number | Record<string, unknown> = Record<string, unknown>,\n> extends RenovateOptionBase {\n default?: T[] | null;\n mergeable?: boolean;\n type: 'array';\n subType?: 'string' | 'object' | 'number';\n}\n\nexport interface RenovateStringArrayOption extends RenovateArrayOption<string> {\n format?: 'regex';\n subType: 'string';\n}\n\nexport interface RenovateNumberArrayOption extends RenovateArrayOption<number> {\n subType: 'number';\n}\n\nexport interface RenovateBooleanOption extends RenovateOptionBase {\n default?: boolean | null;\n type: 'boolean';\n}\n\nexport interface RenovateIntegerOption extends RenovateOptionBase {\n default?: number | null;\n type: 'integer';\n}\n\nexport interface RenovateStringOption extends RenovateOptionBase {\n default?: string | null;\n format?: 'regex';\n\n // Not used\n replaceLineReturns?: boolean;\n type: 'string';\n}\n\nexport interface RenovateObjectOption extends RenovateOptionBase {\n default?: any;\n additionalProperties?: Record<string, unknown> | boolean;\n mergeable?: boolean;\n type: 'object';\n}\n\nexport type RenovateOptions =\n | RenovateStringOption\n | RenovateNumberArrayOption\n | RenovateStringArrayOption\n | RenovateIntegerOption\n | RenovateBooleanOption\n | RenovateArrayOption\n | RenovateObjectOption;\n\nexport interface PackageRuleInputConfig extends RenovateConfig {\n versioning?: string;\n packageFile?: string;\n lockFiles?: string[];\n depType?: string;\n depTypes?: string[];\n depName?: string;\n packageName?: string | null;\n newValue?: string | null;\n currentValue?: string | null;\n currentVersion?: string;\n lockedVersion?: string;\n updateType?: UpdateType;\n mergeConfidenceLevel?: MergeConfidence | undefined;\n isBump?: boolean;\n sourceUrl?: string | null;\n categories?: string[];\n baseBranch?: string;\n manager?: string;\n datasource?: string;\n packageRules?: (PackageRule & PackageRuleInputConfig)[];\n releaseTimestamp?: Timestamp | null;\n repository?: string;\n currentVersionAgeInDays?: number;\n currentVersionTimestamp?: string;\n enabled?: boolean;\n skipReason?: SkipReason;\n skipStage?: StageName;\n}\n\nexport interface ConfigMigration {\n configMigration?: boolean;\n}\n\nexport interface MigratedConfig {\n /**\n * Indicates whether there was a migration applied to the configuration.\n *\n * @returns\n * `false` if the configuration does not need migrating, and `migratedConfig` can be ignored\n * `true` if the configuration was migrated, and if so, `migratedConfig` should be used instead of the provided config\n */\n isMigrated: boolean;\n migratedConfig: RenovateConfig;\n}\n\nexport interface MigratedRenovateConfig extends RenovateConfig {\n endpoints?: HostRule[];\n pathRules: PackageRule[];\n packages: PackageRule[];\n\n node?: RenovateConfig;\n travis?: RenovateConfig;\n gradle?: RenovateConfig;\n}\n\nexport interface ManagerConfig extends RenovateConfig {\n manager: string;\n categories?: Category[];\n}\n\nexport interface ValidationResult {\n errors: ValidationMessage[];\n warnings: ValidationMessage[];\n}\n\nexport interface BumpVersionConfig {\n bumpType?: string;\n filePatterns: string[];\n matchStrings: string[];\n name?: string;\n}\n\nexport interface ToolSettingsOptions {\n jvmMaxMemory?: number;\n jvmMemory?: number;\n nodeMaxMemory?: number;\n}\n"],"mappings":";AAmVA,MAAa,4BAA4B;CACvC;CACA;CACA;CACA;AACF;AA6MA,MAAa,qBAAqB;CAChC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF"}
|
|
@@ -39,7 +39,7 @@ hashMap.set("docker-compose", "5441af5b5abf8d347e46002d47f02f85743401bda28232f49
|
|
|
39
39
|
hashMap.set("dockerfile", "322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08");
|
|
40
40
|
hashMap.set("droneci", "237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee");
|
|
41
41
|
hashMap.set("fleet", "d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e");
|
|
42
|
-
hashMap.set("flux", "
|
|
42
|
+
hashMap.set("flux", "22de4afb277e579dcbc7ec765eca2ddc5e4b1bb39d49e762e8af026fa062c53f");
|
|
43
43
|
hashMap.set("fvm", "9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90");
|
|
44
44
|
hashMap.set("git-submodules", "475d08a1a75e5732dd6003f63bd98c91ce09e42229cdcd9d2d060c60ce474e49");
|
|
45
45
|
hashMap.set("github-actions", "ba8bc59c9586d1945940e8e525f7c7630499739799c0928914828cb2b46963e3");
|
|
@@ -71,7 +71,7 @@ hashMap.set("maven-wrapper", "976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d
|
|
|
71
71
|
hashMap.set("meteor", "4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4");
|
|
72
72
|
hashMap.set("mint", "b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e");
|
|
73
73
|
hashMap.set("mise", "95aed9ad0d45ea411ad16acd4889aec411f3e6ad4c5a0d706fa61ccd4e2bca48");
|
|
74
|
-
hashMap.set("mix", "
|
|
74
|
+
hashMap.set("mix", "039e7de16ca7ca6d27f07dca3a108f55563335e7d264c7fe9df68578286b5d05");
|
|
75
75
|
hashMap.set("nix", "95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1");
|
|
76
76
|
hashMap.set("nodenv", "ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8");
|
|
77
77
|
hashMap.set("npm", "ed42cfca3a06a992979412296043880e291c69095437d073681cc2116d479845");
|
|
@@ -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','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','a599d9834f33a92e7c25753f933621f0b1b076ba8a068628a3f64e1dc545b739');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','8d5314f630038df8a974a285ab5066a0b4d69bc4dcd0a4fa2e9e6c6747073229');\nhashMap.set('bazelisk','49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','2df1756b14b3d690e5ad1295bc1e78d8a8d7b967a552fd7b8e3274866a5acf3e');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','cf7b07339eec46097c479fc5d9aa1c699d74b11954aea156eef7b893251b070d');\nhashMap.set('cake','65ad4f28c318675b9edb49dbd11d677f42c762b01b3f5a25dd3b2f345ecd387e');\nhashMap.set('cargo','23fcc425ccd3a50559210e0ab8c84c1d47cf5c617cd5d58afdcf258ab862bafa');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','08310c39254947632d42058f74f755e9d3f3019c2edeeaf52b5142917085e2df');\nhashMap.set('composer','e7d1bf044d838d1a294929a1fa730d80f159252405652cf87793c34a009aa02a');\nhashMap.set('conan','b846e8812d65d4201dc0bf7c1d5c344e3a1edaaff6441010875171028be2f0fb');\nhashMap.set('copier','b26904512023c7785e86ee57744f16b336a380ae80d2b85924bf7c30e3c6f1c5');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','4c9fd606dd598a4e0bd5cb4b679738ff67e75ba269ca021d90b4f661429cb2ac');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','ac472ae4897dc1df85326dbd89a8c3488579ae2b180014ffcf085ce422e19dbd');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','15b54f31a20133f2f8ce63c4f7ca5b71df9e9bd231a7888bbf068a8db139bc83');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','475d08a1a75e5732dd6003f63bd98c91ce09e42229cdcd9d2d060c60ce474e49');\nhashMap.set('github-actions','ba8bc59c9586d1945940e8e525f7c7630499739799c0928914828cb2b46963e3');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','e7ee3392d1f900fc1299308c8e930db9288790c6d0b6c35f1a62e55683090d34');\nhashMap.set('gomod','f675e8c7bf83c00101d9725814927c69d04e5e347dc6b0346a7100892b1ea4c9');\nhashMap.set('gradle','1108234b4fcfebf95c453111f652ab75f5c6cc6c4472efb60b7bc29cbe683612');\nhashMap.set('gradle-wrapper','f85031e7feb4e811aa5f29c589a30f8076a078e5bbf366fb65fb28b5a47d2c44');\nhashMap.set('haskell-cabal','a4f01c22bdd453dd4610473d92946f7764ceb27624547325f5e21d294214811b');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','5bbc18bf059640191e2237408ca3b442556834e5c1c05d3317e82e7e097ae1f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','86799a6d3fba17b1f4c8017d308cba44a1efcf6d6290371263b8cf14be9e16ae');\nhashMap.set('hermit','f30ba5fe8ee46997c1f3d15235e6ff64c96d7ce5e439ee99f8008580348fe0da');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','f918a7f378dc207cadf291e7481006008c69623f690902ed921e1e33db270b78');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','c6ee547378d5c5619a0fe94be35f9838e0f006b4807a896e9caefefa20efacf7');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','2bf7b65d51718daf3eec4f30c0fc7f2f045f4f8f24862bebe17c2174abb606b9');\nhashMap.set('maven-wrapper','976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d0deb49647d10e3');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','95aed9ad0d45ea411ad16acd4889aec411f3e6ad4c5a0d706fa61ccd4e2bca48');\nhashMap.set('mix','a82c3d73372c2da723b467c29f0ad0bb1f85acb8cfb313a0aa734cc7ec2d46bf');\nhashMap.set('nix','95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','ed42cfca3a06a992979412296043880e291c69095437d073681cc2116d479845');\nhashMap.set('nuget','da72ddc95788d80b81c0b539b1b54001ef0c782f790efdc6e73aafb235d1e5f8');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','fffd093eaf6de3cab7b2f6b57e57715aa240fcd958954f31fbc47f18e1730a4d');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','c750b18e58134ca1f22e3338e331c8a53890763cb3d6bf5277a5c8a43adffd11');\nhashMap.set('pip_requirements','5ef648e398281294c79ec5dc56a868af904efddc536c9ce8d693a8425afd9677');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','1d0af710667f6dce377feae9aa238b21fe5e0e75e75758a70f5e9758c6cb6678');\nhashMap.set('pixi','7d183aaae4370a0c62496bbff60ad12fd4dd46822630541f712f437dcea021e1');\nhashMap.set('poetry','0211739556f8193c70fa69cbf66c60e688042fd7dc7a2fe08f9f328b35ad1f82');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','82a922bad525bc8d878226918cbe711427fe7bb32cc3d655210dd0dbaf894637');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config','2a4e4fb671aed5d0c900b8d54c31bfef46ca36d0f4e16b00ff73377b9c09fb69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','065ab64215fbeb4859e7e65f3268543ea37b7c384dd27c7a1e9acc4d0d44d8be');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','56cdc6fe4cd00519f953459f94323c71677f6bde007537eef891154fb8696db1');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','ab8e39dd081ba22b10cfd08246efd7a14f1fc8cff8503c254b23a98e835ddd74');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','142c3f0549c4152297615b5bbf3a78ba8f7ce6a0cebcea63b81e9815dca40494');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','dfd7b905577b362093ce72e6ee597308f97c83678ddb15d6455a1627969b8b7d');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"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','1fbc76f78daa14a8c9ab1142e9d1e05c746c0419a9f1455e4279f476590d0c04');\nhashMap.set('ansible-galaxy','8226d47128f2018825d4d6f84794e3183eb79c706045fa7e88491edd5e64106f');\nhashMap.set('ant','2df5943cf0ed19a21b94df13729dbb925655548130caf37e3e22bebaed518e17');\nhashMap.set('argocd','5d35b1992e53130bf83b0e59a0f90ccd3a78919974c69044f306dc5d162f48ce');\nhashMap.set('asdf','a599d9834f33a92e7c25753f933621f0b1b076ba8a068628a3f64e1dc545b739');\nhashMap.set('azure-pipelines','4f635b0ecd388ee266d992e8281fd40e3db2f5867d86fc1cbce72dc33a66e796');\nhashMap.set('batect','fad98996bea8626525ab925f83a6ae0ce9262c53770e7aa7cb448a1e0f1ddf21');\nhashMap.set('batect-wrapper','d999355511ea7f4053325a18b8cfc8d2b586c61e6760c35e557d383a673e3939');\nhashMap.set('bazel','c6e0ad88ea468664c3a33263baf7452d83d2d37ff09ba920e18f64ee81fd0acb');\nhashMap.set('bazel-module','8d5314f630038df8a974a285ab5066a0b4d69bc4dcd0a4fa2e9e6c6747073229');\nhashMap.set('bazelisk','49e6bd1fc8f03facd06e517dc64596833b90ee0a079a45cff78f0eeb3c3566f8');\nhashMap.set('bicep','7246e0bfc06e0e28cbb03ac088c5591f648956b086e106aeb251fe5d628329db');\nhashMap.set('bitbucket-pipelines','59c0503494ab1442b127914503c01b97ac17b6742b19c632292d5aa24de115cd');\nhashMap.set('bitrise','478dfd316221fad7c29e177c70d1018d832fb2626b53308a5d0f1f0380e69f42');\nhashMap.set('buildkite','a93effb1f1c5d65b3277c3b4709924eacde282e8efd028a8e3d8c1ce3ef69407');\nhashMap.set('buildpacks','6bef3cb04d66b5cfbb195adb4829bcbccae6408518706744d291bacf0610421f');\nhashMap.set('bun','2df1756b14b3d690e5ad1295bc1e78d8a8d7b967a552fd7b8e3274866a5acf3e');\nhashMap.set('bun-version','df3ae8e4a5de1fa1b4544f3d7fc8117e80adb1e151c46d1ede54a4dbea6521e4');\nhashMap.set('bundler','cf7b07339eec46097c479fc5d9aa1c699d74b11954aea156eef7b893251b070d');\nhashMap.set('cake','65ad4f28c318675b9edb49dbd11d677f42c762b01b3f5a25dd3b2f345ecd387e');\nhashMap.set('cargo','23fcc425ccd3a50559210e0ab8c84c1d47cf5c617cd5d58afdcf258ab862bafa');\nhashMap.set('cdnurl','d3edf6cdc38e92eb43ff5a2b4e8df6a6a13154cf83244725c39e28d7e6ea9177');\nhashMap.set('circleci','91cbeb33ea20f9838e2c81a1195eb806f0b38fa282bc3679f62552f20575ca85');\nhashMap.set('cloudbuild','8c0c739f7e4082bbfe8e3fdffebaf43e26f70a1314d95b306e9b93e4f4297886');\nhashMap.set('cocoapods','08310c39254947632d42058f74f755e9d3f3019c2edeeaf52b5142917085e2df');\nhashMap.set('composer','e7d1bf044d838d1a294929a1fa730d80f159252405652cf87793c34a009aa02a');\nhashMap.set('conan','b846e8812d65d4201dc0bf7c1d5c344e3a1edaaff6441010875171028be2f0fb');\nhashMap.set('copier','b26904512023c7785e86ee57744f16b336a380ae80d2b85924bf7c30e3c6f1c5');\nhashMap.set('cpanfile','6a1d67d9c8751123deaf0c7f3ac38a07024e960c140f8228fcbcb93954fdca01');\nhashMap.set('crossplane','5c26b1201a1a51454ffb94d829e223a76a781569bf79cdb1e47087c30233ec40');\nhashMap.set('crow','eb9a5f9f95041855dded67bcce3dd54724f690995ed6268d272e8a666ff28fd0');\nhashMap.set('deno','4c9fd606dd598a4e0bd5cb4b679738ff67e75ba269ca021d90b4f661429cb2ac');\nhashMap.set('deps-edn','c87dd5e88587147ad1a78f047b814f3c4aa60d6de30d0c49d849391eeaf1b64c');\nhashMap.set('devbox','ac472ae4897dc1df85326dbd89a8c3488579ae2b180014ffcf085ce422e19dbd');\nhashMap.set('devcontainer','24320ed1cb6191d04cb8b2707214d82c08c682597aed1d84f250aa00ad1632ec');\nhashMap.set('docker-compose','5441af5b5abf8d347e46002d47f02f85743401bda28232f49fb7b3bbb772a4fb');\nhashMap.set('dockerfile','322b95f7e55dd78d7fe71306a6f649479eca61c60d75bb10b23604a230dbdd08');\nhashMap.set('droneci','237c8de87b9bf653fb943b56e84e99c45f6d86ae27d86e599b3f3f99c35ba8ee');\nhashMap.set('fleet','d73d5d35f10df0599a561d9c8d25f3935350407d0e3bd3a1d1545295f278912e');\nhashMap.set('flux','22de4afb277e579dcbc7ec765eca2ddc5e4b1bb39d49e762e8af026fa062c53f');\nhashMap.set('fvm','9b161df0f14bc6e536368952adf373e343630097121a913cea60ee284027fb90');\nhashMap.set('git-submodules','475d08a1a75e5732dd6003f63bd98c91ce09e42229cdcd9d2d060c60ce474e49');\nhashMap.set('github-actions','ba8bc59c9586d1945940e8e525f7c7630499739799c0928914828cb2b46963e3');\nhashMap.set('gitlabci','0dec44dd398bfc5b3c19d0929bea2fef7f386c94acfd1b1d7bc2a31d81d96fd6');\nhashMap.set('gitlabci-include','354cfc4ea327c6d5cd5bee1f17763832efc7f5402e9fd22c579239fccb9c6dab');\nhashMap.set('glasskube','253d6db30bdec75ed5ab5d26f31d69bc07813ba10089a28da12c6a29eff4ec70');\nhashMap.set('gleam','e7ee3392d1f900fc1299308c8e930db9288790c6d0b6c35f1a62e55683090d34');\nhashMap.set('gomod','f675e8c7bf83c00101d9725814927c69d04e5e347dc6b0346a7100892b1ea4c9');\nhashMap.set('gradle','1108234b4fcfebf95c453111f652ab75f5c6cc6c4472efb60b7bc29cbe683612');\nhashMap.set('gradle-wrapper','f85031e7feb4e811aa5f29c589a30f8076a078e5bbf366fb65fb28b5a47d2c44');\nhashMap.set('haskell-cabal','a4f01c22bdd453dd4610473d92946f7764ceb27624547325f5e21d294214811b');\nhashMap.set('helm-requirements','4d90e5e18a380876ad48e21e1ad88ea62e25d973a1ddaa3763447fc0a9f9915b');\nhashMap.set('helm-values','b5c52c6a27d805557418c585c5d3030c95ee641d53057021f3fe060f81b6e1af');\nhashMap.set('helmfile','5bbc18bf059640191e2237408ca3b442556834e5c1c05d3317e82e7e097ae1f2');\nhashMap.set('helmsman','ef9680c612f702c7f07aea9b6e5d811e91214dcfa5755c9f3803e9528090935e');\nhashMap.set('helmv3','86799a6d3fba17b1f4c8017d308cba44a1efcf6d6290371263b8cf14be9e16ae');\nhashMap.set('hermit','f30ba5fe8ee46997c1f3d15235e6ff64c96d7ce5e439ee99f8008580348fe0da');\nhashMap.set('homeassistant-manifest','05043c6db870cffbb6f8f3e351c025e3de227eaae0b24134b796aec46f84b65f');\nhashMap.set('homebrew','56ef90301143874355fd2ed25dff7c646875f701f97422d02e01d45608a88f31');\nhashMap.set('html','67c5f3c5c58e96f5dd257ba5987d900cf7fef81d667c3640e96c847b37de35a8');\nhashMap.set('jenkins','268ebfc8a1caf3edeb2192c2b1b2fa4bf18a78a3e731ba20a6c104940a5539f3');\nhashMap.set('jsonnet-bundler','f918a7f378dc207cadf291e7481006008c69623f690902ed921e1e33db270b78');\nhashMap.set('kotlin-script','99ef296792a0ca575ed31d3defb514b05a58083dc01c52ea0890c69d867ba1dd');\nhashMap.set('kubernetes','321e7d77fb3600dd4c00a86eaa1294927e7f92300b74fa2977d813dcaa3bb4de');\nhashMap.set('kustomize','c6ee547378d5c5619a0fe94be35f9838e0f006b4807a896e9caefefa20efacf7');\nhashMap.set('leiningen','133fca2c3423f53f2ccc22518153ddbcafbf0f4812376c77e952eb3d24d81f85');\nhashMap.set('maven','2bf7b65d51718daf3eec4f30c0fc7f2f045f4f8f24862bebe17c2174abb606b9');\nhashMap.set('maven-wrapper','976ed8a59cf43b0c765b1a49ebc5669478e78278cf48f4ce3d0deb49647d10e3');\nhashMap.set('meteor','4a93a326b27bedfe52118e27e06f39fecd7c55bd4cd7fccec4cb120cac14cec4');\nhashMap.set('mint','b816a49c8525716454d0a2bc9127916d5b27e5cca7b2aa2030312f218942af3e');\nhashMap.set('mise','95aed9ad0d45ea411ad16acd4889aec411f3e6ad4c5a0d706fa61ccd4e2bca48');\nhashMap.set('mix','039e7de16ca7ca6d27f07dca3a108f55563335e7d264c7fe9df68578286b5d05');\nhashMap.set('nix','95f0827f7ec9a3bfd5119534f129aad6cf26b28e99d55aec0945f08bbfff9fb1');\nhashMap.set('nodenv','ac652c28481b001f7471f4183eac07b45d98ecbe83efc275830b0a1b2e0459b8');\nhashMap.set('npm','ed42cfca3a06a992979412296043880e291c69095437d073681cc2116d479845');\nhashMap.set('nuget','da72ddc95788d80b81c0b539b1b54001ef0c782f790efdc6e73aafb235d1e5f8');\nhashMap.set('nvm','3eb77c7b0acf6d64753de78fad2499b352719853aa6872878c40675d14152322');\nhashMap.set('ocb','032b216684c14b0954e0bb019513a2aca3faaee5748587acb668d377d7c891ca');\nhashMap.set('osgi','32233a1a8a2725699d7448ba438e3d0b78141f7799cd2b588de278d41e26ed10');\nhashMap.set('pep621','fffd093eaf6de3cab7b2f6b57e57715aa240fcd958954f31fbc47f18e1730a4d');\nhashMap.set('pep723','b96683163de63ed93207ec0538066705b1e58a1cd5b8bd11c63fc28b26bddba1');\nhashMap.set('pip-compile','c750b18e58134ca1f22e3338e331c8a53890763cb3d6bf5277a5c8a43adffd11');\nhashMap.set('pip_requirements','5ef648e398281294c79ec5dc56a868af904efddc536c9ce8d693a8425afd9677');\nhashMap.set('pip_setup','0175fe550c19d9bd31c978bd83fdc088cb40fcacd5d6751f640164274ae64e61');\nhashMap.set('pipenv','1d0af710667f6dce377feae9aa238b21fe5e0e75e75758a70f5e9758c6cb6678');\nhashMap.set('pixi','7d183aaae4370a0c62496bbff60ad12fd4dd46822630541f712f437dcea021e1');\nhashMap.set('poetry','0211739556f8193c70fa69cbf66c60e688042fd7dc7a2fe08f9f328b35ad1f82');\nhashMap.set('pre-commit','a6a6e847fdb0f56650e66ef7d69e68de752b390913f79ac31d1a7ec5955d03da');\nhashMap.set('proto','412053d4550026b4ace490b46e970915b87ec1abf0b0a0c6c8c58ccf1fc16843');\nhashMap.set('pub','82a922bad525bc8d878226918cbe711427fe7bb32cc3d655210dd0dbaf894637');\nhashMap.set('puppet','ba58ab689e44acc8f61c3569ab8b40fde01b8a9d3aad712708e2a419e57d8b45');\nhashMap.set('pyenv','9ede8becc97774f9040b40f4472d3e933534b596e04c360bfe0f3c6f95f25182');\nhashMap.set('quadlet','e355e13e104351a8b3516a8e272fc5f7e625c9f39b0c492ba27283a36227c2d4');\nhashMap.set('renovate-config','2a4e4fb671aed5d0c900b8d54c31bfef46ca36d0f4e16b00ff73377b9c09fb69');\nhashMap.set('ruby-version','2db2140d9eee8c555e729a4de0396fa2d78846d3149890ee12fa515bd654be97');\nhashMap.set('runtime-version','b582b168c0cc595e39010feb10f4b97a82683eb269e9598216fbb11cc186e160');\nhashMap.set('rust-toolchain','065ab64215fbeb4859e7e65f3268543ea37b7c384dd27c7a1e9acc4d0d44d8be');\nhashMap.set('sbt','74125bd9c76a5724092258cd1dee1ea99fc0d735b463a2b64fedc5d950efde2a');\nhashMap.set('scalafmt','9d36159b56835e96498af026a1fb0543200db0581681ef95ec54988f411e180f');\nhashMap.set('setup-cfg','7dea08c5708625e753bd56918bc214df7fb4d8543a26e936926a21ab43b5f785');\nhashMap.set('sveltos','05b3158e88771ed4629e171592cf4f1bf0ff342f8aeae89be0b340c630cc6d8e');\nhashMap.set('swift','56cdc6fe4cd00519f953459f94323c71677f6bde007537eef891154fb8696db1');\nhashMap.set('tekton','fdc5b9b5edec2a90cda2f858f3ebc532aa8efb1187d1e0b7c89b07796e9cb6cd');\nhashMap.set('terraform','ab8e39dd081ba22b10cfd08246efd7a14f1fc8cff8503c254b23a98e835ddd74');\nhashMap.set('terraform-version','ec8f786b9731d47f2c2fe0307caf64d7ddd83046fe7ff1f7d8423239f8b0f2aa');\nhashMap.set('terragrunt','142c3f0549c4152297615b5bbf3a78ba8f7ce6a0cebcea63b81e9815dca40494');\nhashMap.set('terragrunt-version','eea6087b33717d22ede2fc68c2f64df8390b75abe82110ed831a180648feb51d');\nhashMap.set('tflint-plugin','4a975f0cc1aa22cd258aa835de3dc98d7a5c0d1cee0a1092324338968e08a827');\nhashMap.set('travis','bb482a0195cd009ec3896a6227bb95617f5c84bedb518c7d971e50c62235d9ca');\nhashMap.set('typst','d080a79fbd961c6e21fcc505d544b7e0ff2126142acb1dcabdf6abbcd9339248');\nhashMap.set('unity3d','f13e25e115e3443f4e16cf31578acffa78fb1a5e23339680a92d8d6de6052920');\nhashMap.set('velaci','fda00ddb7cc23e9a37e0a8a253151df0a6930b4276d3e4f78cc54b9ac09af7de');\nhashMap.set('vendir','dfd7b905577b362093ce72e6ee597308f97c83678ddb15d6455a1627969b8b7d');\nhashMap.set('woodpecker','6110d3bec33aaeb3511d4bbfa896cec3c8e02fb04a6cff50c9ba81061c851045');\nhashMap.set('xcodegen','dad511d88a9ce1dbdde8b9731f3da7f2bdaa4ca8a083294ee58d56da62ab1683');\nhashMap.set('jsonata','3b5f465b586993f92c8490e70885e7eecce9b6556bcc376dd9c11db8ee9e6960');\nhashMap.set('regex','dbe6889ea021a05127fed06226d73366fdada2ae577147a5c027996fd325416e');"],"mappings":"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"}
|
|
@@ -214,6 +214,7 @@ function resolveResourceManifest(manifest, helmRepositories, registryAliases, co
|
|
|
214
214
|
dep.packageName = gitUrl;
|
|
215
215
|
dep.replaceString = resource.spec.ref.commit;
|
|
216
216
|
if (isHttpUrl(gitUrl)) dep.sourceUrl = gitUrl.replace(/\.git$/, "");
|
|
217
|
+
if (resource.spec.ref?.branch) dep.currentValue = resource.spec.ref.branch;
|
|
217
218
|
} else if (resource.spec.ref?.tag) {
|
|
218
219
|
dep.currentValue = resource.spec.ref.tag;
|
|
219
220
|
resolveGitRepositoryPerSourceTag(dep, resource.spec.url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/flux/extract.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport {\n type Document,\n type Scalar,\n type YAMLMap,\n isMap,\n isPair,\n isScalar,\n parseAllDocuments,\n} from 'yaml';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport { findDependencies } from '../helm-values/extract.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport { extractImage } from '../kustomize/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport {\n collectHelmRepos,\n isSystemManifest,\n systemManifestHeaderRegex,\n} from './common.ts';\nimport { FluxResource, type HelmRepository } from './schema.ts';\nimport type {\n FluxManagerData,\n FluxManifest,\n ResourceFluxManifest,\n SystemFluxManifest,\n} from './types.ts';\n\nfunction readManifest(\n content: string,\n packageFile: string,\n): FluxManifest | null {\n if (isSystemManifest(packageFile)) {\n const versionMatch = regEx(systemManifestHeaderRegex).exec(content);\n if (!versionMatch) {\n return null;\n }\n return {\n kind: 'system',\n file: packageFile,\n content,\n version: versionMatch[1],\n components: versionMatch[2],\n };\n }\n\n return {\n kind: 'resource',\n file: packageFile,\n content,\n resources: parseYaml(content, {\n customSchema: FluxResource,\n failureBehaviour: 'filter',\n }),\n };\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitRepositoryPerSourceTag(\n dep: PackageDependency,\n gitUrl: string,\n): void {\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n}\n\nfunction resolveHelmRepository(\n dep: PackageDependency,\n matchingRepositories: HelmRepository[],\n registryAliases: Record<string, string> | undefined,\n sourceRefName?: string,\n): void {\n if (matchingRepositories.length) {\n dep.registryUrls = matchingRepositories\n .map((repo) => {\n if (repo.spec.type === 'oci' || isOCIRegistry(repo.spec.url)) {\n // Change datasource to Docker\n dep.datasource = DockerDatasource.id;\n // Ensure the URL is a valid OCI path\n dep.packageName = getDep(\n `${removeOCIPrefix(repo.spec.url)}/${dep.depName}`,\n false,\n registryAliases,\n ).packageName;\n return null;\n } else {\n return repo.spec.url;\n }\n })\n .filter(isString);\n\n // if registryUrls is empty, delete it from dep\n if (!dep.registryUrls?.length) {\n delete dep.registryUrls;\n }\n return;\n }\n\n if (sourceRefName && registryAliases) {\n const aliasUrl = registryAliases[sourceRefName];\n if (aliasUrl) {\n if (isOCIRegistry(aliasUrl)) {\n // Treat alias value as an OCI registry URL\n dep.datasource = DockerDatasource.id;\n dep.packageName = getDep(\n `${removeOCIPrefix(aliasUrl)}/${dep.depName}`,\n false,\n registryAliases,\n ).packageName;\n } else {\n dep.registryUrls = [aliasUrl];\n }\n return;\n }\n }\n\n dep.skipReason = 'unknown-registry';\n}\n\nfunction resolveSystemManifest(\n manifest: SystemFluxManifest,\n): PackageDependency<FluxManagerData>[] {\n return [\n {\n depName: 'fluxcd/flux2',\n datasource: GithubReleasesDatasource.id,\n currentValue: manifest.version,\n managerData: {\n components: manifest.components,\n },\n },\n ];\n}\n\n/**\n * Returns all `spec.ref` map nodes for OCIRepository resources matching `resourceName`.\n */\nfunction findOCIRefNodes(\n docs: Document.Parsed[],\n resourceName: string,\n): YAMLMap[] {\n const refNodes: YAMLMap[] = [];\n for (const doc of docs) {\n const docContents = doc.contents;\n if (!isMap(docContents)) {\n continue;\n }\n const kindNode = docContents.get('kind', true);\n if (\n !isScalar(kindNode) ||\n (kindNode.value as unknown) !== 'OCIRepository'\n ) {\n continue;\n }\n const nameNode = docContents.getIn(['metadata', 'name'], true);\n if (!isScalar(nameNode) || nameNode.value !== resourceName) {\n continue;\n }\n const specNode = docContents.get('spec');\n if (!isMap(specNode)) {\n continue;\n }\n const refNode = specNode.get('ref');\n if (isMap(refNode)) {\n refNodes.push(refNode);\n }\n }\n\n return refNodes;\n}\n\nfunction extractOCIRefTagAndDigestRange(\n docs: Document.Parsed[],\n content: string,\n resourceName: string,\n): { replaceString: string; tagFirst: boolean } | null {\n for (const refNode of findOCIRefNodes(docs, resourceName)) {\n let tagKey: Scalar | undefined;\n let tagValue: Scalar | undefined;\n let digestKey: Scalar | undefined;\n let digestValue: Scalar | undefined;\n\n for (const item of refNode.items) {\n if (!isPair(item) || !isScalar(item.key)) {\n continue;\n }\n if (item.key.value === 'tag' && isScalar(item.value)) {\n tagKey = item.key;\n tagValue = item.value;\n } else if (item.key.value === 'digest' && isScalar(item.value)) {\n digestKey = item.key;\n digestValue = item.value;\n }\n }\n\n if (\n !tagKey?.range ||\n !tagValue?.range ||\n !digestKey?.range ||\n !digestValue?.range\n ) {\n continue;\n }\n\n const tagFirst = tagKey.range[0] < digestKey.range[0];\n const start = tagFirst ? tagKey.range[0] : digestKey.range[0];\n const end = tagFirst ? digestValue.range[1] : tagValue.range[1];\n\n return { replaceString: content.slice(start, end), tagFirst };\n }\n\n return null;\n}\n\nfunction extractOCIRefTagRange(\n docs: Document.Parsed[],\n content: string,\n resourceName: string,\n): { replaceString: string; indentation: string } | null {\n for (const refNode of findOCIRefNodes(docs, resourceName)) {\n for (const item of refNode.items) {\n if (\n isPair(item) &&\n isScalar(item.key) &&\n item.key.value === 'tag' &&\n isScalar(item.value) &&\n item.key.range &&\n item.value.range\n ) {\n const keyStart = item.key.range[0];\n const valueEnd = item.value.range[1];\n const lineStart = content.lastIndexOf('\\n', keyStart - 1) + 1;\n return {\n replaceString: content.slice(keyStart, valueEnd),\n indentation: content.slice(lineStart, keyStart),\n };\n }\n }\n }\n\n return null;\n}\n\nfunction resolveResourceManifest(\n manifest: ResourceFluxManifest,\n helmRepositories: HelmRepository[],\n registryAliases: Record<string, string> | undefined,\n content: string,\n): PackageDependency[] {\n let docs: Document.Parsed[] | undefined;\n const deps: PackageDependency[] = [];\n for (const resource of manifest.resources) {\n switch (resource.kind) {\n case 'HelmRelease': {\n if (resource.spec.chartRef) {\n logger.trace(\n 'HelmRelease using chartRef was found, skipping as version will be handled via referenced resource directly',\n );\n } else if (resource.spec.chart) {\n const chartSpec = resource.spec.chart.spec;\n const depName = chartSpec.chart;\n const dep: PackageDependency = {\n depName,\n currentValue: resource.spec.chart.spec.version,\n datasource: HelmDatasource.id,\n };\n\n if (depName.startsWith('./')) {\n dep.skipReason = 'local-chart';\n delete dep.datasource;\n } else {\n const sourceRef = chartSpec.sourceRef;\n const matchingRepositories = helmRepositories.filter(\n (rep) =>\n rep.kind === sourceRef?.kind &&\n rep.metadata.name === sourceRef.name &&\n rep.metadata.namespace ===\n (sourceRef?.namespace ?? resource.metadata?.namespace),\n );\n resolveHelmRepository(\n dep,\n matchingRepositories,\n registryAliases,\n sourceRef?.name,\n );\n }\n deps.push(dep);\n } else {\n logger.debug(\n `invalid or incomplete ${resource.metadata.name} HelmRelease spec, skipping`,\n );\n }\n\n if (resource.spec.values) {\n logger.trace('detecting dependencies in HelmRelease values');\n deps.push(...findDependencies(resource.spec.values, registryAliases));\n }\n break;\n }\n\n case 'HelmChart': {\n if (resource.spec.sourceRef.kind === 'GitRepository') {\n logger.trace(\n 'HelmChart using GitRepository was found, skipping as version will be handled via referenced resource directly',\n );\n continue;\n }\n\n const dep: PackageDependency = {\n depName: resource.spec.chart,\n };\n\n if (resource.spec.sourceRef.kind === 'HelmRepository') {\n dep.currentValue = resource.spec.version;\n dep.datasource = HelmDatasource.id;\n\n const sourceRef = resource.spec.sourceRef;\n const matchingRepositories = helmRepositories.filter(\n (rep) =>\n rep.kind === sourceRef?.kind &&\n rep.metadata.name === sourceRef.name &&\n rep.metadata.namespace === resource.metadata?.namespace,\n );\n resolveHelmRepository(\n dep,\n matchingRepositories,\n registryAliases,\n sourceRef?.name,\n );\n } else {\n dep.skipReason = 'unsupported-datasource';\n }\n deps.push(dep);\n break;\n }\n\n case 'GitRepository': {\n const dep: PackageDependency = {\n depName: resource.metadata.name,\n };\n\n if (resource.spec.ref?.commit) {\n const gitUrl = resource.spec.url;\n dep.currentDigest = resource.spec.ref.commit;\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n dep.replaceString = resource.spec.ref.commit;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n } else if (resource.spec.ref?.tag) {\n dep.currentValue = resource.spec.ref.tag;\n resolveGitRepositoryPerSourceTag(dep, resource.spec.url);\n } else {\n dep.skipReason = 'unversioned-reference';\n }\n deps.push(dep);\n break;\n }\n case 'OCIRepository': {\n const container = removeOCIPrefix(resource.spec.url);\n if (resource.spec.ref?.digest && resource.spec.ref?.tag) {\n const combinedDep = getDep(\n `${container}@${resource.spec.ref.digest}`,\n false,\n registryAliases,\n );\n // Set currentValue to the tag so the docker datasource can look up the image's new digest\n combinedDep.currentValue = resource.spec.ref.tag;\n\n const refRange = extractOCIRefTagAndDigestRange(\n (docs ??= parseAllDocuments(content, { strict: false })),\n content,\n resource.metadata.name,\n );\n if (refRange) {\n combinedDep.replaceString = refRange.replaceString;\n if (refRange.tagFirst) {\n combinedDep.autoReplaceStringTemplate = refRange.replaceString\n .replace(resource.spec.ref.tag, '{{newValue}}')\n .replace(resource.spec.ref.digest, '{{newDigest}}');\n } else {\n combinedDep.autoReplaceStringTemplate = refRange.replaceString\n .replace(resource.spec.ref.digest, '{{newDigest}}')\n .replace(resource.spec.ref.tag, '{{newValue}}');\n }\n } else {\n logger.debug(\n { file: manifest.file, name: resource.metadata.name },\n 'Could not find tag/digest nodes in content, skipping replacement',\n );\n combinedDep.skipReason = 'invalid-value';\n }\n\n deps.push(combinedDep);\n } else if (resource.spec.ref?.digest) {\n const dep = getDep(\n `${container}@${resource.spec.ref.digest}`,\n false,\n registryAliases,\n );\n deps.push(dep);\n } else if (resource.spec.ref?.tag) {\n const dep = getDep(\n `${container}:${resource.spec.ref.tag}`,\n false,\n registryAliases,\n );\n const refTagRange = extractOCIRefTagRange(\n (docs ??= parseAllDocuments(content, { strict: false })),\n content,\n resource.metadata.name,\n );\n if (refTagRange) {\n dep.replaceString = refTagRange.replaceString;\n const newline = content.includes('\\r\\n') ? '\\r\\n' : '\\n';\n dep.autoReplaceStringTemplate = `${refTagRange.replaceString.replace(\n resource.spec.ref.tag,\n '{{newValue}}',\n )}{{#if newDigest}}${newline}${refTagRange.indentation}digest: {{newDigest}}{{/if}}`;\n } else {\n logger.debug(\n { file: manifest.file, name: resource.metadata.name },\n 'Unable to locate tag node for replacement (may be YAML alias or alias reference), digest pinning will not be possible',\n );\n dep.replaceString = resource.spec.ref.tag;\n dep.autoReplaceStringTemplate = '{{newValue}}';\n }\n deps.push(dep);\n } else {\n const dep = getDep(container, false, registryAliases);\n dep.skipReason = 'unversioned-reference';\n deps.push(dep);\n }\n break;\n }\n\n case 'Kustomization': {\n for (const image of coerceArray(resource.spec.images)) {\n const dep = extractImage(image, registryAliases);\n if (dep) {\n deps.push(dep);\n }\n }\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config?: ExtractConfig,\n): PackageFileContent<FluxManagerData> | null {\n const manifest = readManifest(content, packageFile);\n if (!manifest) {\n return null;\n }\n const helmRepositories = collectHelmRepos([manifest]);\n let deps: PackageDependency[] | null = null;\n switch (manifest.kind) {\n case 'system':\n deps = resolveSystemManifest(manifest);\n break;\n case 'resource': {\n deps = resolveResourceManifest(\n manifest,\n helmRepositories,\n config?.registryAliases,\n content,\n );\n break;\n }\n }\n return deps?.length ? { deps } : null;\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile<FluxManagerData>[] | null> {\n const manifests: FluxManifest[] = [];\n const results: PackageFile<FluxManagerData>[] = [];\n\n for (const file of packageFiles) {\n const content = await readLocalFile(file, 'utf8');\n if (content) {\n const manifest = readManifest(content, file);\n if (manifest) {\n manifests.push(manifest);\n }\n }\n }\n\n const helmRepositories = collectHelmRepos(manifests);\n\n for (const manifest of manifests) {\n let deps: PackageDependency[] | null = null;\n switch (manifest.kind) {\n case 'system':\n deps = resolveSystemManifest(manifest);\n break;\n case 'resource': {\n deps = resolveResourceManifest(\n manifest,\n helmRepositories,\n config.registryAliases,\n manifest.content,\n );\n break;\n }\n }\n if (deps?.length) {\n results.push({\n packageFile: manifest.file,\n deps,\n });\n }\n }\n\n return results.length ? results : null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"extract.js","names":[],"sources":["../../../../lib/modules/manager/flux/extract.ts"],"sourcesContent":["import { isString } from '@sindresorhus/is';\nimport {\n type Document,\n type Scalar,\n type YAMLMap,\n isMap,\n isPair,\n isScalar,\n parseAllDocuments,\n} from 'yaml';\nimport { logger } from '../../../logger/index.ts';\nimport { coerceArray } from '../../../util/array.ts';\nimport { readLocalFile } from '../../../util/fs/index.ts';\nimport { regEx } from '../../../util/regex.ts';\nimport { isHttpUrl } from '../../../util/url.ts';\nimport { parseYaml } from '../../../util/yaml.ts';\nimport { BitbucketTagsDatasource } from '../../datasource/bitbucket-tags/index.ts';\nimport { DockerDatasource } from '../../datasource/docker/index.ts';\nimport { GitRefsDatasource } from '../../datasource/git-refs/index.ts';\nimport { GitTagsDatasource } from '../../datasource/git-tags/index.ts';\nimport { GithubReleasesDatasource } from '../../datasource/github-releases/index.ts';\nimport { GithubTagsDatasource } from '../../datasource/github-tags/index.ts';\nimport { GitlabTagsDatasource } from '../../datasource/gitlab-tags/index.ts';\nimport { HelmDatasource } from '../../datasource/helm/index.ts';\nimport { getDep } from '../dockerfile/extract.ts';\nimport { findDependencies } from '../helm-values/extract.ts';\nimport { isOCIRegistry, removeOCIPrefix } from '../helmv3/oci.ts';\nimport { extractImage } from '../kustomize/extract.ts';\nimport type {\n ExtractConfig,\n PackageDependency,\n PackageFile,\n PackageFileContent,\n} from '../types.ts';\nimport {\n collectHelmRepos,\n isSystemManifest,\n systemManifestHeaderRegex,\n} from './common.ts';\nimport { FluxResource, type HelmRepository } from './schema.ts';\nimport type {\n FluxManagerData,\n FluxManifest,\n ResourceFluxManifest,\n SystemFluxManifest,\n} from './types.ts';\n\nfunction readManifest(\n content: string,\n packageFile: string,\n): FluxManifest | null {\n if (isSystemManifest(packageFile)) {\n const versionMatch = regEx(systemManifestHeaderRegex).exec(content);\n if (!versionMatch) {\n return null;\n }\n return {\n kind: 'system',\n file: packageFile,\n content,\n version: versionMatch[1],\n components: versionMatch[2],\n };\n }\n\n return {\n kind: 'resource',\n file: packageFile,\n content,\n resources: parseYaml(content, {\n customSchema: FluxResource,\n failureBehaviour: 'filter',\n }),\n };\n}\n\nconst githubUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)github\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst gitlabUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)gitlab\\.com[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\nconst bitbucketUrlRegex = regEx(\n /^(?:https:\\/\\/|git@)bitbucket\\.org[/:](?<packageName>[^/]+\\/[^/]+?)(?:\\.git)?$/,\n);\n\nfunction resolveGitRepositoryPerSourceTag(\n dep: PackageDependency,\n gitUrl: string,\n): void {\n const githubMatchGroups = githubUrlRegex.exec(gitUrl)?.groups;\n if (githubMatchGroups) {\n dep.datasource = GithubTagsDatasource.id;\n dep.packageName = githubMatchGroups.packageName;\n dep.sourceUrl = `https://github.com/${dep.packageName}`;\n return;\n }\n\n const gitlabMatchGroups = gitlabUrlRegex.exec(gitUrl)?.groups;\n if (gitlabMatchGroups) {\n dep.datasource = GitlabTagsDatasource.id;\n dep.packageName = gitlabMatchGroups.packageName;\n dep.sourceUrl = `https://gitlab.com/${dep.packageName}`;\n return;\n }\n\n const bitbucketMatchGroups = bitbucketUrlRegex.exec(gitUrl)?.groups;\n if (bitbucketMatchGroups) {\n dep.datasource = BitbucketTagsDatasource.id;\n dep.packageName = bitbucketMatchGroups.packageName;\n dep.sourceUrl = `https://bitbucket.org/${dep.packageName}`;\n return;\n }\n\n dep.datasource = GitTagsDatasource.id;\n dep.packageName = gitUrl;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n}\n\nfunction resolveHelmRepository(\n dep: PackageDependency,\n matchingRepositories: HelmRepository[],\n registryAliases: Record<string, string> | undefined,\n sourceRefName?: string,\n): void {\n if (matchingRepositories.length) {\n dep.registryUrls = matchingRepositories\n .map((repo) => {\n if (repo.spec.type === 'oci' || isOCIRegistry(repo.spec.url)) {\n // Change datasource to Docker\n dep.datasource = DockerDatasource.id;\n // Ensure the URL is a valid OCI path\n dep.packageName = getDep(\n `${removeOCIPrefix(repo.spec.url)}/${dep.depName}`,\n false,\n registryAliases,\n ).packageName;\n return null;\n } else {\n return repo.spec.url;\n }\n })\n .filter(isString);\n\n // if registryUrls is empty, delete it from dep\n if (!dep.registryUrls?.length) {\n delete dep.registryUrls;\n }\n return;\n }\n\n if (sourceRefName && registryAliases) {\n const aliasUrl = registryAliases[sourceRefName];\n if (aliasUrl) {\n if (isOCIRegistry(aliasUrl)) {\n // Treat alias value as an OCI registry URL\n dep.datasource = DockerDatasource.id;\n dep.packageName = getDep(\n `${removeOCIPrefix(aliasUrl)}/${dep.depName}`,\n false,\n registryAliases,\n ).packageName;\n } else {\n dep.registryUrls = [aliasUrl];\n }\n return;\n }\n }\n\n dep.skipReason = 'unknown-registry';\n}\n\nfunction resolveSystemManifest(\n manifest: SystemFluxManifest,\n): PackageDependency<FluxManagerData>[] {\n return [\n {\n depName: 'fluxcd/flux2',\n datasource: GithubReleasesDatasource.id,\n currentValue: manifest.version,\n managerData: {\n components: manifest.components,\n },\n },\n ];\n}\n\n/**\n * Returns all `spec.ref` map nodes for OCIRepository resources matching `resourceName`.\n */\nfunction findOCIRefNodes(\n docs: Document.Parsed[],\n resourceName: string,\n): YAMLMap[] {\n const refNodes: YAMLMap[] = [];\n for (const doc of docs) {\n const docContents = doc.contents;\n if (!isMap(docContents)) {\n continue;\n }\n const kindNode = docContents.get('kind', true);\n if (\n !isScalar(kindNode) ||\n (kindNode.value as unknown) !== 'OCIRepository'\n ) {\n continue;\n }\n const nameNode = docContents.getIn(['metadata', 'name'], true);\n if (!isScalar(nameNode) || nameNode.value !== resourceName) {\n continue;\n }\n const specNode = docContents.get('spec');\n if (!isMap(specNode)) {\n continue;\n }\n const refNode = specNode.get('ref');\n if (isMap(refNode)) {\n refNodes.push(refNode);\n }\n }\n\n return refNodes;\n}\n\nfunction extractOCIRefTagAndDigestRange(\n docs: Document.Parsed[],\n content: string,\n resourceName: string,\n): { replaceString: string; tagFirst: boolean } | null {\n for (const refNode of findOCIRefNodes(docs, resourceName)) {\n let tagKey: Scalar | undefined;\n let tagValue: Scalar | undefined;\n let digestKey: Scalar | undefined;\n let digestValue: Scalar | undefined;\n\n for (const item of refNode.items) {\n if (!isPair(item) || !isScalar(item.key)) {\n continue;\n }\n if (item.key.value === 'tag' && isScalar(item.value)) {\n tagKey = item.key;\n tagValue = item.value;\n } else if (item.key.value === 'digest' && isScalar(item.value)) {\n digestKey = item.key;\n digestValue = item.value;\n }\n }\n\n if (\n !tagKey?.range ||\n !tagValue?.range ||\n !digestKey?.range ||\n !digestValue?.range\n ) {\n continue;\n }\n\n const tagFirst = tagKey.range[0] < digestKey.range[0];\n const start = tagFirst ? tagKey.range[0] : digestKey.range[0];\n const end = tagFirst ? digestValue.range[1] : tagValue.range[1];\n\n return { replaceString: content.slice(start, end), tagFirst };\n }\n\n return null;\n}\n\nfunction extractOCIRefTagRange(\n docs: Document.Parsed[],\n content: string,\n resourceName: string,\n): { replaceString: string; indentation: string } | null {\n for (const refNode of findOCIRefNodes(docs, resourceName)) {\n for (const item of refNode.items) {\n if (\n isPair(item) &&\n isScalar(item.key) &&\n item.key.value === 'tag' &&\n isScalar(item.value) &&\n item.key.range &&\n item.value.range\n ) {\n const keyStart = item.key.range[0];\n const valueEnd = item.value.range[1];\n const lineStart = content.lastIndexOf('\\n', keyStart - 1) + 1;\n return {\n replaceString: content.slice(keyStart, valueEnd),\n indentation: content.slice(lineStart, keyStart),\n };\n }\n }\n }\n\n return null;\n}\n\nfunction resolveResourceManifest(\n manifest: ResourceFluxManifest,\n helmRepositories: HelmRepository[],\n registryAliases: Record<string, string> | undefined,\n content: string,\n): PackageDependency[] {\n let docs: Document.Parsed[] | undefined;\n const deps: PackageDependency[] = [];\n for (const resource of manifest.resources) {\n switch (resource.kind) {\n case 'HelmRelease': {\n if (resource.spec.chartRef) {\n logger.trace(\n 'HelmRelease using chartRef was found, skipping as version will be handled via referenced resource directly',\n );\n } else if (resource.spec.chart) {\n const chartSpec = resource.spec.chart.spec;\n const depName = chartSpec.chart;\n const dep: PackageDependency = {\n depName,\n currentValue: resource.spec.chart.spec.version,\n datasource: HelmDatasource.id,\n };\n\n if (depName.startsWith('./')) {\n dep.skipReason = 'local-chart';\n delete dep.datasource;\n } else {\n const sourceRef = chartSpec.sourceRef;\n const matchingRepositories = helmRepositories.filter(\n (rep) =>\n rep.kind === sourceRef?.kind &&\n rep.metadata.name === sourceRef.name &&\n rep.metadata.namespace ===\n (sourceRef?.namespace ?? resource.metadata?.namespace),\n );\n resolveHelmRepository(\n dep,\n matchingRepositories,\n registryAliases,\n sourceRef?.name,\n );\n }\n deps.push(dep);\n } else {\n logger.debug(\n `invalid or incomplete ${resource.metadata.name} HelmRelease spec, skipping`,\n );\n }\n\n if (resource.spec.values) {\n logger.trace('detecting dependencies in HelmRelease values');\n deps.push(...findDependencies(resource.spec.values, registryAliases));\n }\n break;\n }\n\n case 'HelmChart': {\n if (resource.spec.sourceRef.kind === 'GitRepository') {\n logger.trace(\n 'HelmChart using GitRepository was found, skipping as version will be handled via referenced resource directly',\n );\n continue;\n }\n\n const dep: PackageDependency = {\n depName: resource.spec.chart,\n };\n\n if (resource.spec.sourceRef.kind === 'HelmRepository') {\n dep.currentValue = resource.spec.version;\n dep.datasource = HelmDatasource.id;\n\n const sourceRef = resource.spec.sourceRef;\n const matchingRepositories = helmRepositories.filter(\n (rep) =>\n rep.kind === sourceRef?.kind &&\n rep.metadata.name === sourceRef.name &&\n rep.metadata.namespace === resource.metadata?.namespace,\n );\n resolveHelmRepository(\n dep,\n matchingRepositories,\n registryAliases,\n sourceRef?.name,\n );\n } else {\n dep.skipReason = 'unsupported-datasource';\n }\n deps.push(dep);\n break;\n }\n\n case 'GitRepository': {\n const dep: PackageDependency = {\n depName: resource.metadata.name,\n };\n\n if (resource.spec.ref?.commit) {\n const gitUrl = resource.spec.url;\n dep.currentDigest = resource.spec.ref.commit;\n dep.datasource = GitRefsDatasource.id;\n dep.packageName = gitUrl;\n dep.replaceString = resource.spec.ref.commit;\n if (isHttpUrl(gitUrl)) {\n dep.sourceUrl = gitUrl.replace(/\\.git$/, '');\n }\n if (resource.spec.ref?.branch) {\n dep.currentValue = resource.spec.ref.branch;\n }\n } else if (resource.spec.ref?.tag) {\n dep.currentValue = resource.spec.ref.tag;\n resolveGitRepositoryPerSourceTag(dep, resource.spec.url);\n } else {\n dep.skipReason = 'unversioned-reference';\n }\n deps.push(dep);\n break;\n }\n case 'OCIRepository': {\n const container = removeOCIPrefix(resource.spec.url);\n if (resource.spec.ref?.digest && resource.spec.ref?.tag) {\n const combinedDep = getDep(\n `${container}@${resource.spec.ref.digest}`,\n false,\n registryAliases,\n );\n // Set currentValue to the tag so the docker datasource can look up the image's new digest\n combinedDep.currentValue = resource.spec.ref.tag;\n\n const refRange = extractOCIRefTagAndDigestRange(\n (docs ??= parseAllDocuments(content, { strict: false })),\n content,\n resource.metadata.name,\n );\n if (refRange) {\n combinedDep.replaceString = refRange.replaceString;\n if (refRange.tagFirst) {\n combinedDep.autoReplaceStringTemplate = refRange.replaceString\n .replace(resource.spec.ref.tag, '{{newValue}}')\n .replace(resource.spec.ref.digest, '{{newDigest}}');\n } else {\n combinedDep.autoReplaceStringTemplate = refRange.replaceString\n .replace(resource.spec.ref.digest, '{{newDigest}}')\n .replace(resource.spec.ref.tag, '{{newValue}}');\n }\n } else {\n logger.debug(\n { file: manifest.file, name: resource.metadata.name },\n 'Could not find tag/digest nodes in content, skipping replacement',\n );\n combinedDep.skipReason = 'invalid-value';\n }\n\n deps.push(combinedDep);\n } else if (resource.spec.ref?.digest) {\n const dep = getDep(\n `${container}@${resource.spec.ref.digest}`,\n false,\n registryAliases,\n );\n deps.push(dep);\n } else if (resource.spec.ref?.tag) {\n const dep = getDep(\n `${container}:${resource.spec.ref.tag}`,\n false,\n registryAliases,\n );\n const refTagRange = extractOCIRefTagRange(\n (docs ??= parseAllDocuments(content, { strict: false })),\n content,\n resource.metadata.name,\n );\n if (refTagRange) {\n dep.replaceString = refTagRange.replaceString;\n const newline = content.includes('\\r\\n') ? '\\r\\n' : '\\n';\n dep.autoReplaceStringTemplate = `${refTagRange.replaceString.replace(\n resource.spec.ref.tag,\n '{{newValue}}',\n )}{{#if newDigest}}${newline}${refTagRange.indentation}digest: {{newDigest}}{{/if}}`;\n } else {\n logger.debug(\n { file: manifest.file, name: resource.metadata.name },\n 'Unable to locate tag node for replacement (may be YAML alias or alias reference), digest pinning will not be possible',\n );\n dep.replaceString = resource.spec.ref.tag;\n dep.autoReplaceStringTemplate = '{{newValue}}';\n }\n deps.push(dep);\n } else {\n const dep = getDep(container, false, registryAliases);\n dep.skipReason = 'unversioned-reference';\n deps.push(dep);\n }\n break;\n }\n\n case 'Kustomization': {\n for (const image of coerceArray(resource.spec.images)) {\n const dep = extractImage(image, registryAliases);\n if (dep) {\n deps.push(dep);\n }\n }\n }\n }\n }\n return deps;\n}\n\nexport function extractPackageFile(\n content: string,\n packageFile: string,\n config?: ExtractConfig,\n): PackageFileContent<FluxManagerData> | null {\n const manifest = readManifest(content, packageFile);\n if (!manifest) {\n return null;\n }\n const helmRepositories = collectHelmRepos([manifest]);\n let deps: PackageDependency[] | null = null;\n switch (manifest.kind) {\n case 'system':\n deps = resolveSystemManifest(manifest);\n break;\n case 'resource': {\n deps = resolveResourceManifest(\n manifest,\n helmRepositories,\n config?.registryAliases,\n content,\n );\n break;\n }\n }\n return deps?.length ? { deps } : null;\n}\n\nexport async function extractAllPackageFiles(\n config: ExtractConfig,\n packageFiles: string[],\n): Promise<PackageFile<FluxManagerData>[] | null> {\n const manifests: FluxManifest[] = [];\n const results: PackageFile<FluxManagerData>[] = [];\n\n for (const file of packageFiles) {\n const content = await readLocalFile(file, 'utf8');\n if (content) {\n const manifest = readManifest(content, file);\n if (manifest) {\n manifests.push(manifest);\n }\n }\n }\n\n const helmRepositories = collectHelmRepos(manifests);\n\n for (const manifest of manifests) {\n let deps: PackageDependency[] | null = null;\n switch (manifest.kind) {\n case 'system':\n deps = resolveSystemManifest(manifest);\n break;\n case 'resource': {\n deps = resolveResourceManifest(\n manifest,\n helmRepositories,\n config.registryAliases,\n manifest.content,\n );\n break;\n }\n }\n if (deps?.length) {\n results.push({\n packageFile: manifest.file,\n deps,\n });\n }\n }\n\n return results.length ? results : null;\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/flux/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { KubernetesResource } from '../kubernetes/schema.ts';\n\nexport const HelmRelease = KubernetesResource.extend({\n apiVersion: z.string().startsWith('helm.toolkit.fluxcd.io/'),\n kind: z.literal('HelmRelease'),\n spec: z.object({\n chart: z\n .object({\n spec: z.object({\n chart: z.string(),\n version: z.string().optional(),\n sourceRef: z\n .object({\n kind: z.string().optional(),\n name: z.string().optional(),\n namespace: z.string().optional(),\n })\n .optional(),\n }),\n })\n .optional(),\n chartRef: z\n .object({\n kind: z.string().optional(),\n name: z.string().optional(),\n namespace: z.string().optional(),\n })\n .optional(),\n values: z.record(z.string(), z.unknown()).optional(),\n }),\n});\nexport type HelmRelease = z.infer<typeof HelmRelease>;\n\nexport const HelmRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('HelmRepository'),\n spec: z.object({\n url: z.string(),\n type: z.enum(['oci', 'default']).optional(),\n }),\n});\nexport type HelmRepository = z.infer<typeof HelmRepository>;\n\nexport const HelmChart = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('HelmChart'),\n spec: z.object({\n chart: z.string(),\n version: z.string().optional(),\n sourceRef: z.object({\n kind: z.string().optional(),\n name: z.string().optional(),\n }),\n }),\n});\nexport type HelmChart = z.infer<typeof HelmChart>;\n\nexport const GitRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('GitRepository'),\n spec: z.object({\n url: z.string(),\n ref: z\n .object({\n tag: z.string().optional(),\n commit: z.string().optional(),\n })\n .optional(),\n }),\n});\n\nexport const OCIRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('OCIRepository'),\n spec: z.object({\n url: z.string(),\n ref: z\n .object({\n tag: z.string().optional(),\n digest: z.string().optional(),\n })\n .optional(),\n }),\n});\n\nexport const Kustomization = KubernetesResource.extend({\n apiVersion: z.string().startsWith('kustomize.toolkit.fluxcd.io/'),\n kind: z.literal('Kustomization'),\n spec: z.object({\n images: z\n .array(\n z.object({\n name: z.string(),\n newName: z.string().optional(),\n newTag: z.string().optional(),\n digest: z.string().optional(),\n }),\n )\n .optional(),\n }),\n});\n\nexport const FluxResource = HelmRelease.or(HelmRepository)\n .or(HelmChart)\n .or(GitRepository)\n .or(OCIRepository)\n .or(Kustomization);\nexport type FluxResource = z.infer<typeof FluxResource>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","names":[],"sources":["../../../../lib/modules/manager/flux/schema.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { KubernetesResource } from '../kubernetes/schema.ts';\n\nexport const HelmRelease = KubernetesResource.extend({\n apiVersion: z.string().startsWith('helm.toolkit.fluxcd.io/'),\n kind: z.literal('HelmRelease'),\n spec: z.object({\n chart: z\n .object({\n spec: z.object({\n chart: z.string(),\n version: z.string().optional(),\n sourceRef: z\n .object({\n kind: z.string().optional(),\n name: z.string().optional(),\n namespace: z.string().optional(),\n })\n .optional(),\n }),\n })\n .optional(),\n chartRef: z\n .object({\n kind: z.string().optional(),\n name: z.string().optional(),\n namespace: z.string().optional(),\n })\n .optional(),\n values: z.record(z.string(), z.unknown()).optional(),\n }),\n});\nexport type HelmRelease = z.infer<typeof HelmRelease>;\n\nexport const HelmRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('HelmRepository'),\n spec: z.object({\n url: z.string(),\n type: z.enum(['oci', 'default']).optional(),\n }),\n});\nexport type HelmRepository = z.infer<typeof HelmRepository>;\n\nexport const HelmChart = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('HelmChart'),\n spec: z.object({\n chart: z.string(),\n version: z.string().optional(),\n sourceRef: z.object({\n kind: z.string().optional(),\n name: z.string().optional(),\n }),\n }),\n});\nexport type HelmChart = z.infer<typeof HelmChart>;\n\nexport const GitRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('GitRepository'),\n spec: z.object({\n url: z.string(),\n ref: z\n .object({\n tag: z.string().optional(),\n commit: z.string().optional(),\n branch: z.string().optional(),\n })\n .optional(),\n }),\n});\n\nexport const OCIRepository = KubernetesResource.extend({\n apiVersion: z.string().startsWith('source.toolkit.fluxcd.io/'),\n kind: z.literal('OCIRepository'),\n spec: z.object({\n url: z.string(),\n ref: z\n .object({\n tag: z.string().optional(),\n digest: z.string().optional(),\n })\n .optional(),\n }),\n});\n\nexport const Kustomization = KubernetesResource.extend({\n apiVersion: z.string().startsWith('kustomize.toolkit.fluxcd.io/'),\n kind: z.literal('Kustomization'),\n spec: z.object({\n images: z\n .array(\n z.object({\n name: z.string(),\n newName: z.string().optional(),\n newTag: z.string().optional(),\n digest: z.string().optional(),\n }),\n )\n .optional(),\n }),\n});\n\nexport const FluxResource = HelmRelease.or(HelmRepository)\n .or(HelmChart)\n .or(GitRepository)\n .or(OCIRepository)\n .or(Kustomization);\nexport type FluxResource = z.infer<typeof FluxResource>;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import "../../../constants/error-messages.js";
|
|
2
2
|
import { regEx } from "../../../util/regex.js";
|
|
3
|
+
import { GlobalConfig } from "../../../config/global.js";
|
|
3
4
|
import { logger } from "../../../logger/index.js";
|
|
4
5
|
import { find, getAll } from "../../../util/host-rules.js";
|
|
5
6
|
import { deleteLocalFile, ensureCacheDir, findLocalSiblingOrParent, getSiblingFileName, localPathExists, readLocalFile, writeLocalFile } from "../../../util/fs/index.js";
|
|
@@ -33,7 +34,7 @@ async function updateArtifacts({ packageFileName, updatedDeps, newPackageFileCon
|
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
36
|
if (isLockFileMaintenance && isUmbrella) {
|
|
36
|
-
logger.debug(
|
|
37
|
+
logger.debug(`Cannot use lockFileMaintenance in an umbrella project, see ${GlobalConfig.get("productLinks").documentation}modules/manager/mix/#lockFileMaintenance`);
|
|
37
38
|
return null;
|
|
38
39
|
}
|
|
39
40
|
if (isLockFileMaintenance && !existingLockFileContent) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.js","names":["hostRules\n .getAll","hostRules.find"],"sources":["../../../../lib/modules/manager/mix/artifacts.ts"],"sourcesContent":["import { isEmptyArray, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n findLocalSiblingOrParent,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { regEx } from '../../../util/regex.ts';\n\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\n\nconst hexRepoUrl = 'https://hex.pm/';\nconst hexRepoOrgUrlRegex = regEx(\n `^https://hex\\\\.pm/api/repos/(?<organization>[a-z0-9_]+)/$`,\n);\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`mix.getArtifacts(${packageFileName})`);\n const { isLockFileMaintenance } = config;\n\n if (isEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated mix deps');\n return null;\n }\n\n let lockFileName = getSiblingFileName(packageFileName, 'mix.lock');\n let isUmbrella = false;\n\n let existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n const lockFileError = await checkLockFileReadError(lockFileName);\n if (lockFileError) {\n return lockFileError;\n }\n\n const parentLockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'mix.lock',\n );\n existingLockFileContent =\n parentLockFileName && (await readLocalFile(parentLockFileName, 'utf8'));\n\n if (parentLockFileName && existingLockFileContent) {\n lockFileName = parentLockFileName;\n isUmbrella = true;\n } else if (parentLockFileName) {\n const lockFileError = await checkLockFileReadError(parentLockFileName);\n if (lockFileError) {\n return lockFileError;\n }\n }\n }\n\n if (isLockFileMaintenance && isUmbrella) {\n logger.debug(\n
|
|
1
|
+
{"version":3,"file":"artifacts.js","names":["hostRules\n .getAll","hostRules.find"],"sources":["../../../../lib/modules/manager/mix/artifacts.ts"],"sourcesContent":["import { isEmptyArray, isString } from '@sindresorhus/is';\nimport { quote } from 'shlex';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport { TEMPORARY_ERROR } from '../../../constants/error-messages.ts';\nimport { logger } from '../../../logger/index.ts';\nimport { exec } from '../../../util/exec/index.ts';\nimport type { ExecOptions } from '../../../util/exec/types.ts';\nimport {\n deleteLocalFile,\n ensureCacheDir,\n findLocalSiblingOrParent,\n getSiblingFileName,\n localPathExists,\n readLocalFile,\n writeLocalFile,\n} from '../../../util/fs/index.ts';\nimport * as hostRules from '../../../util/host-rules.ts';\nimport { regEx } from '../../../util/regex.ts';\n\nimport type { UpdateArtifact, UpdateArtifactsResult } from '../types.ts';\n\nconst hexRepoUrl = 'https://hex.pm/';\nconst hexRepoOrgUrlRegex = regEx(\n `^https://hex\\\\.pm/api/repos/(?<organization>[a-z0-9_]+)/$`,\n);\n\nexport async function updateArtifacts({\n packageFileName,\n updatedDeps,\n newPackageFileContent,\n config,\n}: UpdateArtifact): Promise<UpdateArtifactsResult[] | null> {\n logger.debug(`mix.getArtifacts(${packageFileName})`);\n const { isLockFileMaintenance } = config;\n\n if (isEmptyArray(updatedDeps) && !isLockFileMaintenance) {\n logger.debug('No updated mix deps');\n return null;\n }\n\n let lockFileName = getSiblingFileName(packageFileName, 'mix.lock');\n let isUmbrella = false;\n\n let existingLockFileContent = await readLocalFile(lockFileName, 'utf8');\n if (!existingLockFileContent) {\n const lockFileError = await checkLockFileReadError(lockFileName);\n if (lockFileError) {\n return lockFileError;\n }\n\n const parentLockFileName = await findLocalSiblingOrParent(\n packageFileName,\n 'mix.lock',\n );\n existingLockFileContent =\n parentLockFileName && (await readLocalFile(parentLockFileName, 'utf8'));\n\n if (parentLockFileName && existingLockFileContent) {\n lockFileName = parentLockFileName;\n isUmbrella = true;\n } else if (parentLockFileName) {\n const lockFileError = await checkLockFileReadError(parentLockFileName);\n if (lockFileError) {\n return lockFileError;\n }\n }\n }\n\n if (isLockFileMaintenance && isUmbrella) {\n logger.debug(\n `Cannot use lockFileMaintenance in an umbrella project, see ${GlobalConfig.get('productLinks').documentation}modules/manager/mix/#lockFileMaintenance`,\n );\n return null;\n }\n\n if (isLockFileMaintenance && !existingLockFileContent) {\n logger.debug(\n 'Cannot use lockFileMaintenance when no mix.lock file is present',\n );\n return null;\n }\n\n try {\n await writeLocalFile(packageFileName, newPackageFileContent);\n if (isLockFileMaintenance) {\n await deleteLocalFile(lockFileName);\n }\n } catch (err) {\n logger.warn({ err }, 'mix.exs could not be written');\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n\n if (!existingLockFileContent) {\n logger.debug('No mix.lock found');\n return null;\n }\n\n const organizations = new Set<string>();\n\n const hexHostRulesWithMatchHost = hostRules\n .getAll()\n .filter(\n (hostRule) =>\n !!hostRule.matchHost && hexRepoOrgUrlRegex.test(hostRule.matchHost),\n );\n\n for (const { matchHost } of hexHostRulesWithMatchHost) {\n if (matchHost) {\n const result = hexRepoOrgUrlRegex.exec(matchHost);\n\n if (result?.groups) {\n const { organization } = result.groups;\n organizations.add(organization);\n }\n }\n }\n\n for (const { packageName } of updatedDeps) {\n if (packageName) {\n const [, organization] = packageName.split(':');\n\n if (organization) {\n organizations.add(organization);\n }\n }\n }\n\n const preCommands = Array.from(organizations).reduce((acc, organization) => {\n const url = `${hexRepoUrl}api/repos/${organization}/`;\n const { token } = hostRules.find({ url });\n\n if (token) {\n logger.debug(`Authenticating to hex organization ${organization}`);\n const authCommand = `mix hex.organization auth ${organization} --key ${token}`;\n return [...acc, authCommand];\n }\n\n return acc;\n }, [] as string[]);\n\n const execOptions: ExecOptions = {\n extraEnv: {\n // https://hexdocs.pm/mix/1.15.0/Mix.Tasks.Archive.html\n // TODO: should include a version constraint\n MIX_ARCHIVES: await ensureCacheDir('mix_archives'),\n },\n cwdFile: packageFileName,\n docker: {},\n toolConstraints: [\n {\n toolName: 'erlang',\n // https://hexdocs.pm/elixir/1.14.5/compatibility-and-deprecations.html#compatibility-between-elixir-and-erlang-otp\n constraint: config.constraints?.erlang ?? '^26',\n },\n {\n toolName: 'elixir',\n constraint: config.constraints?.elixir,\n },\n ],\n preCommands,\n };\n\n let command: string;\n if (isLockFileMaintenance) {\n command = 'mix deps.get';\n } else {\n command = [\n 'mix',\n 'deps.update',\n ...updatedDeps\n .map((dep) => dep.depName)\n .filter(isString)\n .map((dep) => quote(dep)),\n ].join(' ');\n }\n\n try {\n await exec(command, execOptions);\n } catch (err) {\n /* v8 ignore next 3 */\n if (err.message === TEMPORARY_ERROR) {\n throw err;\n }\n\n logger.debug(\n { err, message: err.message, command },\n 'Failed to update Mix lock file',\n );\n\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: err.message,\n },\n },\n ];\n }\n\n const newMixLockContent = await readLocalFile(lockFileName, 'utf8');\n if (existingLockFileContent === newMixLockContent) {\n logger.debug('mix.lock is unchanged');\n return null;\n }\n logger.debug('Returning updated mix.lock');\n return [\n {\n file: {\n type: 'addition',\n path: lockFileName,\n contents: newMixLockContent,\n },\n },\n ];\n}\n\nasync function checkLockFileReadError(\n lockFileName: string,\n): Promise<UpdateArtifactsResult[] | null> {\n if (await localPathExists(lockFileName)) {\n return [\n {\n artifactError: {\n fileName: lockFileName,\n stderr: `Error reading ${lockFileName}`,\n },\n },\n ];\n }\n return null;\n}\n"],"mappings":"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"}
|