renovate 43.140.0 → 43.141.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/options/index.js +1 -1
- package/dist/config/options/index.js.map +1 -1
- package/dist/modules/platform/azure/azure-helper.js +10 -5
- package/dist/modules/platform/azure/azure-helper.js.map +1 -1
- package/dist/util/git/index.js +1 -0
- package/dist/util/git/index.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -636,7 +636,7 @@ const options = [
|
|
|
636
636
|
name: "dockerSidecarImage",
|
|
637
637
|
description: "Change this value to override the default Renovate sidecar image.",
|
|
638
638
|
type: "string",
|
|
639
|
-
default: "ghcr.io/renovatebot/base-image:13.
|
|
639
|
+
default: "ghcr.io/renovatebot/base-image:13.38.0",
|
|
640
640
|
globalOnly: true,
|
|
641
641
|
deprecationMsg: "The usage of `binarySource=docker` is deprecated, and will be removed in the future"
|
|
642
642
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/config/options/index.ts"],"sourcesContent":["import { isArray, isObject } from '@sindresorhus/is';\nimport { PLATFORM_HOST_TYPES } from '../../constants/platforms.ts';\nimport { AllManagersListLiteral } from '../../manager-list.generated.ts';\nimport { getCustomManagers } from '../../modules/manager/custom/index.ts';\nimport { getManagers } from '../../modules/manager/index.ts';\nimport { getVersioningList } from '../../modules/versioning/index.ts';\nimport { supportedDatasources } from '../presets/internal/merge-confidence.preset.ts';\nimport { type RenovateOptions, UpdateTypesOptions } from '../types.ts';\n\nconst options: Readonly<RenovateOptions>[] = [\n {\n name: 'mode',\n description: 'Mode of operation.',\n type: 'string',\n default: 'full',\n allowedValues: ['full', 'silent'],\n },\n {\n name: 'allowedHeaders',\n description:\n 'List of allowed patterns for header names in repository hostRules config.',\n type: 'array',\n default: ['X-*'],\n subType: 'string',\n globalOnly: true,\n patternMatch: true,\n },\n {\n name: 'autodiscoverRepoOrder',\n description:\n 'The order method for autodiscover server side repository search.',\n type: 'string',\n default: null,\n globalOnly: true,\n allowedValues: ['asc', 'desc'],\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'autodiscoverRepoSort',\n description:\n 'The sort method for autodiscover server side repository search.',\n type: 'string',\n default: null,\n globalOnly: true,\n allowedValues: [\n 'alpha',\n 'created',\n 'created_at',\n 'updated',\n 'updated_at',\n 'size',\n 'id',\n ],\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'allowedEnv',\n description:\n 'List of allowed patterns for environment variable names in repository env config.',\n type: 'array',\n default: [],\n subType: 'string',\n globalOnly: true,\n patternMatch: true,\n mergeable: true,\n },\n {\n name: 'detectGlobalManagerConfig',\n description:\n 'If `true`, Renovate tries to detect global manager configuration from the file system.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'detectHostRulesFromEnv',\n description:\n 'If `true`, Renovate tries to detect host rules from environment variables.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'mergeConfidenceEndpoint',\n description:\n 'If set, Renovate will query this API for Merge Confidence data.',\n stage: 'global',\n type: 'string',\n default: 'https://developer.mend.io/',\n advancedUse: true,\n globalOnly: true,\n },\n {\n name: 'mergeConfidenceDatasources',\n description:\n 'If set, Renovate will query the merge-confidence JSON API only for datasources that are part of this list.',\n stage: 'global',\n allowedValues: supportedDatasources,\n default: supportedDatasources,\n type: 'array',\n subType: 'string',\n globalOnly: true,\n },\n {\n name: 'useCloudMetadataServices',\n description:\n 'If `false`, Renovate does not try to access cloud metadata services.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n cli: false,\n },\n {\n name: 'userAgent',\n description:\n 'If set to any string, Renovate will use this as the `user-agent` it sends with HTTP requests.',\n type: 'string',\n default: null,\n globalOnly: true,\n },\n {\n name: 'allowedCommands',\n description:\n 'A list of regular expressions that decide which commands are allowed in post-upgrade tasks.',\n type: 'array',\n subType: 'string',\n default: [],\n globalOnly: true,\n },\n {\n name: 'bumpVersions',\n description:\n 'A list of bumpVersion config options to bump generic version numbers.',\n type: 'array',\n subType: 'object',\n default: [],\n cli: false,\n env: false,\n experimental: true,\n },\n {\n name: 'bumpType',\n description:\n 'The semver level to use when bumping versions. This is used by the `bumpVersions` feature.',\n type: 'string',\n parents: ['bumpVersions'],\n allowedValues: ['major', 'minor', 'patch', 'sync'],\n },\n {\n name: 'filePatterns',\n description:\n 'A list of patterns to match files that contain the version string.',\n type: 'array',\n subType: 'string',\n parents: ['bumpVersions'],\n },\n {\n name: 'name',\n description:\n 'A name for the bumpVersion config. This is used for logging and debugging.',\n type: 'string',\n parents: ['bumpVersions'],\n },\n {\n name: 'postUpgradeTasks',\n description:\n 'Post-upgrade tasks that are executed before a commit is made by Renovate.',\n type: 'object',\n default: {\n commands: [],\n fileFilters: [],\n executionMode: 'update',\n installTools: {},\n },\n },\n {\n name: 'commands',\n description:\n 'A list of post-upgrade commands that are executed before a commit is made by Renovate.',\n type: 'array',\n subType: 'string',\n parents: ['postUpgradeTasks'],\n default: [],\n cli: false,\n },\n {\n name: 'workingDirTemplate',\n description:\n 'A template describing the working directory in which post-upgrade tasks should be executed.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n cli: false,\n env: false,\n },\n {\n name: 'dataFileTemplate',\n description: 'A template to create post-upgrade command data file from.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n cli: false,\n env: false,\n },\n {\n name: 'fileFilters',\n description:\n 'Files that match the glob pattern will be committed after running a post-upgrade task.',\n type: 'array',\n subType: 'string',\n parents: ['postUpgradeTasks'],\n default: ['**/*'],\n cli: false,\n },\n {\n name: 'installTools',\n description: 'Install tools before executing commands',\n type: 'object',\n parents: ['postUpgradeTasks'],\n default: {},\n additionalProperties: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n mergeable: false,\n freeChoice: true,\n cli: false,\n },\n {\n name: 'format',\n description: 'Format of the custom datasource.',\n type: 'string',\n parents: ['customDatasources'],\n default: 'json',\n allowedValues: ['json', 'plain'],\n cli: false,\n env: false,\n },\n {\n name: 'executionMode',\n description:\n 'Controls when the post upgrade tasks run: on every update, or once per upgrade branch.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n allowedValues: ['update', 'branch'],\n default: 'update',\n cli: false,\n },\n {\n name: 'onboardingBranch',\n description:\n 'Change this value to override the default onboarding branch name.',\n type: 'string',\n default: 'renovate/configure',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingAutoCloseAge',\n description:\n 'Maximum number of days after which Renovate will stop trying to onboard the repository, and will close any existing onboarding PRs',\n type: 'integer',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingCommitMessage',\n description:\n 'Change this value to override the default onboarding commit message.',\n type: 'string',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'configFileNames',\n description: 'List of filenames where repository config will be stored.',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingConfigFileName',\n description:\n 'Change this value to override the default onboarding config file name.',\n type: 'string',\n default: 'renovate.json',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingNoDeps',\n description: 'Onboard the repository even if no dependencies are found.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'enabled', 'disabled'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingPrTitle',\n description:\n 'Change this value to override the default onboarding PR title.',\n type: 'string',\n default: 'Configure Renovate',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'configMigration',\n description: 'Enable this to get config migration PRs when needed.',\n stage: 'repository',\n type: 'boolean',\n default: false,\n experimental: true,\n experimentalDescription:\n 'Config migration PRs are still being improved, in particular to reduce the amount of reordering and whitespace changes.',\n experimentalIssues: [16359],\n },\n {\n name: 'productLinks',\n description: 'Links which are used in PRs, issues and comments.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {\n documentation: 'https://docs.renovatebot.com/',\n help: 'https://github.com/renovatebot/renovate/discussions',\n homepage: 'https://github.com/renovatebot/renovate',\n },\n additionalProperties: {\n type: 'string',\n format: 'uri',\n },\n },\n {\n name: 'secrets',\n description: 'Object which holds secret name/value pairs.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'variables',\n description: 'Object which holds variable name/value pairs.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'statusCheckNames',\n description: 'Custom strings to use as status check names.',\n type: 'object',\n mergeable: true,\n advancedUse: true,\n default: {\n artifactError: 'renovate/artifacts',\n configValidation: 'renovate/config-validation',\n mergeConfidence: 'renovate/merge-confidence',\n minimumReleaseAge: 'renovate/stability-days',\n },\n },\n {\n name: 'extends',\n description: 'Configuration presets to use or extend.',\n stage: 'package',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: false,\n },\n {\n name: 'ignorePresets',\n description:\n 'A list of presets to ignore, including any that are nested inside an `extends` array.',\n stage: 'package',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: false,\n },\n {\n name: 'migratePresets',\n description:\n 'Define presets here which have been removed or renamed and should be migrated automatically.',\n type: 'object',\n globalOnly: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'minimumGroupSize',\n description:\n 'The minimum number of updates which must be in a group for branches to be created.',\n type: 'integer',\n default: 1,\n },\n {\n name: 'presetCachePersistence',\n description: 'Cache resolved presets in package cache.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'globalExtends',\n description:\n 'Configuration presets to use or extend for a self-hosted config.',\n type: 'array',\n subType: 'string',\n globalOnly: true,\n },\n {\n name: 'description',\n description: 'Plain text description for a config or preset.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n allowString: true,\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'enabled',\n description: `Enable or disable corresponding functionality.`,\n stage: 'package',\n type: 'boolean',\n default: true,\n parents: [\n '.',\n 'packageRules',\n ...AllManagersListLiteral,\n 'hostRules',\n 'vulnerabilityAlerts',\n ...UpdateTypesOptions,\n ],\n },\n {\n name: 'constraintsFiltering',\n description: 'Perform release filtering based on language constraints.',\n type: 'string',\n allowedValues: ['none', 'strict'],\n cli: false,\n default: 'none',\n },\n {\n name: 'repositoryCache',\n description:\n 'This option decides if Renovate uses a JSON cache to speed up extractions.',\n globalOnly: true,\n type: 'string',\n allowedValues: ['disabled', 'enabled', 'reset'],\n stage: 'repository',\n default: 'disabled',\n },\n {\n name: 'repositoryCacheType',\n description:\n 'Set the type of renovate repository cache if `repositoryCache` is enabled.',\n globalOnly: true,\n type: 'string',\n stage: 'repository',\n default: 'local',\n },\n {\n name: 'repositoryCacheForceLocal',\n description:\n 'If set to `true`, Renovate will persist repository cache locally after uploading to S3.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'reportType',\n description: 'Set how, or if, reports should be generated.',\n globalOnly: true,\n type: 'string',\n default: null,\n experimental: true,\n allowedValues: ['logging', 'file', 's3'],\n },\n {\n name: 'reportPath',\n description:\n 'Path to where the file should be written. In case of `s3` this has to be a full S3 URI.',\n globalOnly: true,\n type: 'string',\n default: null,\n experimental: true,\n },\n {\n name: 'reportFormatting',\n description:\n 'If set to `true`, Renovate will format the report JSON with Prettier before writing.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n experimental: true,\n cli: false,\n },\n {\n name: 'force',\n description:\n 'Any configuration set in this object will force override existing settings.',\n stage: 'package',\n globalOnly: true,\n type: 'object',\n cli: false,\n mergeable: true,\n },\n {\n name: 'forceCli',\n description:\n 'Decides if CLI configuration options are moved to the `force` config section.',\n stage: 'global',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'draftPR',\n description:\n 'If set to `true` then Renovate creates draft PRs, instead of normal status PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gitea',\n 'github',\n 'gitlab',\n 'scm-manager',\n ],\n },\n {\n name: 'dryRun',\n description:\n 'If enabled, perform a dry run by logging messages instead of creating/updating/deleting branches and PRs.',\n type: 'string',\n globalOnly: true,\n allowedValues: ['extract', 'lookup', 'full'],\n default: null,\n },\n {\n name: 'printConfig',\n description:\n 'If enabled, Renovate logs the fully resolved config for each repository, plus the fully resolved presets.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'binarySource',\n description:\n 'Controls how third-party tools like npm or Gradle are called: directly, via Docker sidecar containers, or via dynamic install.',\n globalOnly: true,\n type: 'string',\n allowedValues: ['global', 'docker', 'install', 'hermit'],\n default: 'install',\n },\n {\n name: 'redisUrl',\n description:\n 'If set, this Redis URL will be used for caching instead of the file system.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'redisPrefix',\n description: 'Key prefix for redis cache entries.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'baseDir',\n description:\n 'The base directory for Renovate to store local files, including repository files and cache. If left empty, Renovate will create its own temporary directory to use.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'cacheDir',\n description:\n 'The directory where Renovate stores its cache. If left empty, Renovate creates a subdirectory within the `baseDir`.',\n globalOnly: true,\n type: 'string',\n },\n {\n name: 'containerbaseDir',\n description:\n 'The directory where Renovate stores its containerbase cache. If left empty, Renovate creates a subdirectory within the `cacheDir`.',\n globalOnly: true,\n type: 'string',\n },\n {\n name: 'customEnvVariables',\n description:\n 'Custom environment variables for child processes and sidecar Docker containers.',\n globalOnly: true,\n type: 'object',\n default: {},\n },\n {\n name: 'env',\n description:\n 'Environment variables that Renovate uses when executing package manager commands.',\n type: 'object',\n default: {},\n },\n {\n name: 'customDatasources',\n description: 'Defines custom datasources for usage by managers.',\n type: 'object',\n experimental: true,\n experimentalIssues: [23286],\n default: {},\n mergeable: true,\n },\n {\n name: 'dockerChildPrefix',\n description:\n 'Change this value to add a prefix to the Renovate Docker sidecar container names and labels.',\n type: 'string',\n globalOnly: true,\n default: 'renovate_',\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerCliOptions',\n description:\n 'Pass CLI flags to `docker run` command when `binarySource=docker`.',\n type: 'string',\n globalOnly: true,\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerSidecarImage',\n description:\n 'Change this value to override the default Renovate sidecar image.',\n type: 'string',\n default: 'ghcr.io/renovatebot/base-image:13.37.0',\n globalOnly: true,\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerUser',\n description:\n 'Set the `UID` and `GID` for Docker-based binaries if you use `binarySource=docker`.',\n globalOnly: true,\n type: 'string',\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n default: '12021',\n },\n {\n name: 'composerIgnorePlatformReqs',\n description:\n 'Configure use of `--ignore-platform-reqs` or `--ignore-platform-req` for the Composer package manager.',\n type: 'array',\n subType: 'string',\n default: [],\n },\n {\n name: 'goGetDirs',\n description: 'Directory pattern to run `go get` on.',\n type: 'array',\n subType: 'string',\n default: ['./...'],\n supportedManagers: ['gomod'],\n },\n // Log options\n {\n name: 'logContext',\n description: 'Add a global or per-repo log context to each log entry.',\n globalOnly: true,\n type: 'string',\n default: null,\n stage: 'global',\n },\n // Onboarding\n {\n name: 'onboarding',\n description: 'Require a Configuration PR first.',\n stage: 'repository',\n type: 'boolean',\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingConfig',\n description: 'Configuration to use for onboarding PRs.',\n stage: 'repository',\n type: 'object',\n default: { $schema: 'https://docs.renovatebot.com/renovate-schema.json' },\n globalOnly: true,\n inheritConfigSupport: true,\n mergeable: true,\n },\n {\n name: 'onboardingRebaseCheckbox',\n description:\n 'Set to enable rebase/retry markdown checkbox for onboarding PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['forgejo', 'gitea', 'github', 'gitlab'],\n globalOnly: true,\n experimental: true,\n experimentalIssues: [17633],\n },\n {\n name: 'forkProcessing',\n description:\n 'Whether to process forked repositories. By default, all forked repositories are skipped when in `autodiscover` mode.',\n stage: 'repository',\n type: 'string',\n allowedValues: ['auto', 'enabled', 'disabled'],\n default: 'auto',\n },\n {\n name: 'includeMirrors',\n description:\n 'Whether to process repositories that are mirrors. By default, repositories that are mirrors are skipped.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n globalOnly: true,\n },\n {\n name: 'forkCreation',\n description:\n 'Whether to create forks as needed at runtime when running in \"fork mode\".',\n stage: 'repository',\n type: 'boolean',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n default: true,\n },\n {\n name: 'forkToken',\n description: 'Set a personal access token here to enable \"fork mode\".',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n },\n {\n name: 'forkOrg',\n description:\n 'The preferred organization to create or find forked repositories, when in fork mode.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n },\n {\n name: 'githubTokenWarn',\n description: 'Display warnings about GitHub token not being set.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'encryptedWarning',\n description: 'Warning text to use if encrypted config is found.',\n type: 'string',\n globalOnly: true,\n advancedUse: true,\n },\n {\n name: 'inheritConfig',\n description:\n 'If `true`, Renovate will inherit configuration from the `inheritConfigFileName` file in `inheritConfigRepoName`.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'inheritConfigRepoName',\n description:\n 'Renovate will look in this repo for the `inheritConfigFileName`.',\n type: 'string',\n default: '{{parentOrg}}/renovate-config',\n globalOnly: true,\n },\n {\n name: 'inheritConfigFileName',\n description:\n 'Renovate will look for this config file name in the `inheritConfigRepoName`.',\n type: 'string',\n default: 'org-inherited-config.json',\n globalOnly: true,\n },\n {\n name: 'inheritConfigStrict',\n description:\n 'If `true`, any `inheritedConfig` fetch error will result in an aborted run.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'requireConfig',\n description:\n \"Controls Renovate's behavior regarding repository config files such as `renovate.json`.\",\n stage: 'repository',\n type: 'string',\n default: 'required',\n allowedValues: ['required', 'optional', 'ignored'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'optimizeForDisabled',\n description:\n 'Set to `true` to perform a check for disabled config prior to cloning.',\n stage: 'repository',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n // Dependency Dashboard\n {\n name: 'dependencyDashboard',\n description:\n 'Whether to create a \"Dependency Dashboard\" issue in the repository.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardApproval',\n description:\n 'Controls if updates need manual approval from the Dependency Dashboard issue before PRs are created.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardAutoclose',\n description:\n 'Set to `true` to let Renovate close the Dependency Dashboard issue if there are no more updates.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardTitle',\n description: 'Title for the Dependency Dashboard issue.',\n type: 'string',\n default: `Dependency Dashboard`,\n },\n {\n name: 'dependencyDashboardCategory',\n description:\n 'The category to group branches on the Dependency Dashboard issue.',\n type: 'string',\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'dependencyDashboardHeader',\n description:\n 'Any text added here will be placed first in the Dependency Dashboard issue body.',\n type: 'string',\n default:\n 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.',\n },\n {\n name: 'dependencyDashboardFooter',\n description:\n 'Any text added here will be placed last in the Dependency Dashboard issue body, with a divider separator before it.',\n type: 'string',\n },\n {\n name: 'dependencyDashboardLabels',\n description:\n 'These labels will always be applied on the Dependency Dashboard issue, even when they have been removed manually.',\n type: 'array',\n subType: 'string',\n default: null,\n },\n {\n name: 'dependencyDashboardOSVVulnerabilitySummary',\n description:\n 'Control if the Dependency Dashboard issue lists CVEs supplied by [osv.dev](https://osv.dev).',\n type: 'string',\n allowedValues: ['none', 'all', 'unresolved'],\n default: 'none',\n experimental: true,\n },\n {\n name: 'configWarningReuseIssue',\n description:\n 'Set this to `true` to make Renovate reuse/reopen an existing closed Config Warning issue, instead of opening a new one each time.',\n type: 'boolean',\n default: false,\n },\n\n // encryption\n {\n name: 'privateKey',\n description: 'Server-side private key.',\n stage: 'repository',\n type: 'string',\n replaceLineReturns: true,\n globalOnly: true,\n },\n {\n name: 'privateKeyOld',\n description: 'Secondary or old private key to try.',\n stage: 'repository',\n type: 'string',\n replaceLineReturns: true,\n globalOnly: true,\n },\n {\n name: 'privateKeyPath',\n description: 'Path to the Server-side private key.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'privateKeyPathOld',\n description: 'Path to the Server-side old private key.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'encrypted',\n description:\n 'An object containing configuration encrypted with project key.',\n stage: 'repository',\n type: 'object',\n default: null,\n },\n // Scheduling\n {\n name: 'timezone',\n description:\n 'Must conform to [IANA Time Zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) format.',\n type: 'string',\n },\n {\n name: 'schedule',\n description: 'Limit branch creation to these times of day or week.',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: true,\n env: false,\n default: ['at any time'],\n },\n {\n name: 'automergeSchedule',\n description: 'Limit automerge to these times of day or week.',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: true,\n env: false,\n default: ['at any time'],\n },\n {\n name: 'updateNotScheduled',\n description:\n 'Whether to update branches when not scheduled. Renovate will not create branches outside of the schedule.',\n stage: 'branch',\n type: 'boolean',\n default: true,\n },\n // Bot administration\n {\n name: 'persistRepoData',\n description:\n 'If set to `true`: keep repository data between runs instead of deleting the data.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'exposeAllEnv',\n description:\n 'Set this to `true` to allow passing of all environment variables to package managers.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowPlugins',\n description:\n 'Set this to `true` if repositories are allowed to run install plugins.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowScripts',\n description:\n 'Set this to `true` if repositories are allowed to run install scripts.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowShellExecutorForPostUpgradeCommands',\n description:\n 'Whether to run commands for `postUpgradeTasks` inside a shell. This has security implications, as it means that they can call out to other commands or access shell variables. It is difficult to craft an `allowedCommands` regex to restrict this.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowCustomCrateRegistries',\n description: 'Set this to `true` to allow custom crate registries.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignorePlugins',\n description:\n 'Set this to `true` if `allowPlugins=true` but you wish to skip running plugins when updating lock files.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreScripts',\n description:\n 'Set this to `false` if `allowScripts=true` and you wish to run scripts when updating lock files.',\n type: 'boolean',\n default: true,\n supportedManagers: ['npm', 'bun', 'composer', 'copier'],\n },\n {\n name: 'platform',\n description: 'Platform type of repository.',\n type: 'string',\n allowedValues: [...PLATFORM_HOST_TYPES],\n default: 'github',\n globalOnly: true,\n },\n {\n name: 'endpoint',\n description: 'Custom endpoint to use.',\n type: 'string',\n globalOnly: true,\n default: null,\n },\n {\n name: 'token',\n description: 'Repository Auth Token.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'username',\n description: 'Username for authentication.',\n stage: 'repository',\n type: 'string',\n supportedPlatforms: [\n 'azure',\n 'bitbucket',\n 'bitbucket-server',\n 'scm-manager',\n ],\n globalOnly: true,\n },\n {\n name: 'password',\n description: 'Password for authentication.',\n stage: 'repository',\n type: 'string',\n supportedPlatforms: ['azure', 'bitbucket', 'bitbucket-server'],\n globalOnly: true,\n },\n {\n name: 'npmrc',\n description:\n 'String copy of `.npmrc` file. Use `\\\\n` instead of line breaks.',\n stage: 'branch',\n type: 'string',\n },\n {\n name: 'npmrcMerge',\n description:\n 'Whether to merge `config.npmrc` with repo `.npmrc` content if both are found.',\n stage: 'branch',\n type: 'boolean',\n default: false,\n },\n {\n name: 'npmToken',\n description: 'npm token used to authenticate with the default registry.',\n stage: 'branch',\n type: 'string',\n },\n {\n name: 'skipArtifactsUpdate',\n description: \"Skip Renovate's automatic artifact updating.\",\n type: 'boolean',\n default: false,\n },\n {\n name: 'skipInstalls',\n description:\n 'Skip installing modules/dependencies if lock file updating is possible without a full install.',\n type: 'boolean',\n default: null,\n supportedManagers: ['npm'],\n },\n {\n name: 'autodiscover',\n description: 'Autodiscover all repositories.',\n stage: 'global',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'autodiscoverFilter',\n description: 'Filter the list of autodiscovered repositories.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n allowString: true,\n default: null,\n globalOnly: true,\n },\n {\n name: 'autodiscoverNamespaces',\n description:\n 'Filter the list of autodiscovered repositories by namespaces.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'autodiscoverProjects',\n description:\n 'Filter the list of autodiscovered repositories by project names.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['bitbucket'],\n patternMatch: true,\n },\n {\n name: 'autodiscoverTopics',\n description: 'Filter the list of autodiscovered repositories by topics.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['forgejo', 'gitea', 'github', 'gitlab'],\n },\n {\n name: 'prCommitsPerRunLimit',\n description:\n 'Set the maximum number of commits per Renovate run. By default there is no limit.',\n stage: 'global',\n type: 'integer',\n default: 0,\n globalOnly: true,\n },\n {\n name: 'repositories',\n description: 'List of Repositories.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n cli: false,\n globalOnly: true,\n },\n {\n name: 'baseBranchPatterns',\n description:\n 'List of one or more custom base branches defined as exact strings and/or via regex expressions.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n cli: false,\n },\n {\n name: 'useBaseBranchConfig',\n description:\n 'Whether to read configuration from base branches instead of only the default branch.',\n type: 'string',\n allowedValues: ['merge', 'none'],\n default: 'none',\n },\n {\n name: 'gitAuthor',\n description:\n 'Author to use for Git commits. Must conform to [RFC5322](https://datatracker.ietf.org/doc/html/rfc5322).',\n type: 'string',\n },\n {\n name: 'gitPrivateKey',\n description: 'PGP key to use for signing Git commits.',\n type: 'string',\n cli: false,\n globalOnly: true,\n stage: 'global',\n },\n {\n name: 'gitPrivateKeyPassphrase',\n description: 'Passphrase for the `gitPrivateKey`',\n type: 'string',\n cli: false,\n globalOnly: true,\n stage: 'global',\n },\n {\n name: 'gitIgnoredAuthors',\n description:\n 'Git authors which are ignored by Renovate. Must conform to [RFC5322](https://datatracker.ietf.org/doc/html/rfc5322).',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n },\n {\n name: 'gitTimeout',\n description:\n 'Configure the timeout with a number of milliseconds to wait for a Git task.',\n type: 'integer',\n globalOnly: true,\n default: 0,\n },\n {\n name: 'enabledManagers',\n description:\n 'A list of package managers to enable. Only managers on the list are enabled.',\n type: 'array',\n subType: 'string',\n mergeable: false,\n stage: 'repository',\n },\n {\n name: 'includePaths',\n description: 'Include package files only within these defined paths.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n default: [],\n },\n {\n name: 'ignorePaths',\n description:\n 'Skip any package file whose path matches one of these. Can be a string or glob pattern.',\n type: 'array',\n mergeable: false,\n subType: 'string',\n stage: 'repository',\n default: ['**/node_modules/**', '**/bower_components/**'],\n },\n {\n name: 'excludeCommitPaths',\n description:\n 'A file matching any of these glob patterns will not be committed, even if the file has been updated.',\n type: 'array',\n subType: 'string',\n default: [],\n advancedUse: true,\n },\n {\n name: 'executionTimeout',\n description:\n 'Default execution timeout in minutes for child processes Renovate creates.',\n type: 'integer',\n default: 15,\n globalOnly: true,\n },\n {\n name: 'registryAliases',\n description: 'Aliases for registries.',\n mergeable: true,\n type: 'object',\n default: {},\n additionalProperties: {\n type: 'string',\n },\n supportedManagers: [\n 'ansible',\n 'bitbucket-pipelines',\n 'buildpacks',\n 'crossplane',\n 'crow',\n 'devcontainer',\n 'docker-compose',\n 'dockerfile',\n 'droneci',\n 'gitlabci',\n 'helm-requirements',\n 'helmfile',\n 'helmv3',\n 'kubernetes',\n 'kustomize',\n 'maven',\n 'terraform',\n 'vendir',\n 'woodpecker',\n ],\n },\n {\n name: 'defaultRegistryUrls',\n description:\n 'List of registry URLs to use as the default for a datasource.',\n type: 'array',\n subType: 'string',\n default: null,\n stage: 'branch',\n cli: false,\n env: false,\n },\n {\n name: 'defaultRegistryUrlTemplate',\n description:\n 'Template for generating a `defaultRegistryUrl` for custom datasource.',\n type: 'string',\n default: '',\n parents: ['customDatasources'],\n cli: false,\n env: false,\n },\n {\n name: 'registryUrls',\n description:\n 'List of URLs to try for dependency lookup. Package manager specific.',\n type: 'array',\n subType: 'string',\n default: null,\n stage: 'branch',\n cli: false,\n env: false,\n },\n {\n name: 'extractVersion',\n description:\n \"A regex (`re2`) to extract a version from a datasource's raw version string.\",\n type: 'string',\n format: 'regex',\n cli: false,\n env: false,\n },\n {\n name: 'versionCompatibility',\n description:\n 'A regex (`re2`) with named capture groups to show how version and compatibility are split from a raw version string.',\n type: 'string',\n format: 'regex',\n cli: false,\n env: false,\n },\n {\n name: 'versioning',\n description: 'Versioning to use for filtering and comparisons.',\n type: 'string',\n allowedValues: getVersioningList(),\n cli: false,\n env: false,\n },\n {\n name: 'azureWorkItemId',\n description:\n 'The id of an existing work item on Azure Boards to link to each PR.',\n type: 'integer',\n default: 0,\n supportedPlatforms: ['azure'],\n },\n {\n name: 'autoApprove',\n description: 'Set to `true` to automatically approve PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['azure', 'gerrit', 'gitlab'],\n },\n // depType\n {\n name: 'ignoreDeps',\n description: 'Dependencies to ignore.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n mergeable: true,\n },\n {\n name: 'updateInternalDeps',\n description:\n 'Whether to update internal dep versions in a monorepo. Works on Yarn Workspaces.',\n type: 'boolean',\n default: false,\n stage: 'package',\n },\n {\n name: 'packageRules',\n description: 'Rules for matching packages.',\n type: 'array',\n stage: 'package',\n mergeable: true,\n },\n {\n name: 'matchCurrentAge',\n description:\n 'Matches the current age of the package derived from its release timestamp. Valid only within a `packageRules` object.',\n type: 'string',\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCategories',\n description:\n 'List of categories to match (for example: `[\"python\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchRepositories',\n description:\n 'List of repositories to match (e.g. `[\"**/*-archived\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n patternMatch: true,\n },\n {\n name: 'matchBaseBranches',\n description:\n 'List of strings containing exact matches (e.g. `[\"main\"]`) and/or regex expressions (e.g. `[\"/^release/.*/\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchManagers',\n description:\n 'List of package managers to match (e.g. `[\"pipenv\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n patternMatch: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDatasources',\n description:\n 'List of datasources to match (e.g. `[\"orb\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDepTypes',\n description:\n 'List of depTypes to match (e.g. [`peerDependencies`]). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchPackageNames',\n description:\n 'Package names to match. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDepNames',\n description:\n 'Dep names to match. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCurrentValue',\n description:\n 'A regex or glob pattern to match against the raw `currentValue` string of a dependency. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCurrentVersion',\n description:\n 'A version, or range of versions, to match against the current version of a package. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchNewValue',\n description:\n 'A regex or glob pattern to match against the raw `newValue` string of a dependency. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'sourceUrl',\n description: 'The source URL of the package.',\n type: 'string',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'sourceDirectory',\n description:\n 'The source directory in which the package is present at its source.',\n type: 'string',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchSourceUrls',\n description:\n 'A list of exact match URLs (or URL patterns) to match sourceUrl against.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchRegistryUrls',\n description:\n 'A list of URLs (or URL patterns) to match against registryUrls.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n patternMatch: true,\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'autoReplaceGlobalMatch',\n description:\n 'Control whether replacement regular expressions are global matches or only the first match.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'replacementName',\n description:\n 'The name of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementNameTemplate',\n description: 'Controls what the replacement package name.',\n type: 'string',\n default: '{{{packageName}}}',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementVersion',\n description:\n 'The version of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementVersionTemplate',\n description:\n 'Template field for the version of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementApproach',\n description:\n 'Select whether to perform a direct replacement or alias replacement.',\n type: 'string',\n stage: 'branch',\n allowedValues: ['replace', 'alias'],\n supportedManagers: ['npm'],\n default: 'replace',\n },\n {\n name: 'matchConfidence',\n description:\n 'Merge confidence levels to match against (`low`, `neutral`, `high`, `very high`). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowedValues: ['low', 'neutral', 'high', 'very high'],\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchUpdateTypes',\n description:\n 'Update types to match against (`major`, `minor`, `pin`, `pinDigest`, etc). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowedValues: [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'pinDigest',\n 'digest',\n 'lockFileMaintenance',\n 'rollback',\n 'bump',\n 'replacement',\n ],\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchFileNames',\n description:\n 'List of strings to do an exact match against package and lock files with full path. Only works inside a `packageRules` object.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchJsonata',\n description:\n 'A JSONata expression to match against the full config object. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n // Version behavior\n {\n name: 'allowedVersions',\n description:\n 'A version range or regex pattern capturing allowed versions for dependencies.',\n type: 'string',\n parents: ['packageRules'],\n stage: 'package',\n cli: false,\n env: false,\n },\n {\n name: 'changelogUrl',\n description:\n 'Set a custom URL for the changelog. Renovate will put this URL in the PR body text.',\n type: 'string',\n stage: 'pr',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'pinDigests',\n description: 'Whether to add digests to Dockerfile source images.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'separateMajorMinor',\n description:\n 'If set to `false`, Renovate will upgrade dependencies to their latest release only. Renovate will not separate major or minor branches.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'separateMultipleMajor',\n description:\n 'If set to `true`, PRs will be raised separately for each available `major` upgrade version.',\n stage: 'package',\n type: 'boolean',\n default: false,\n },\n {\n name: 'separateMultipleMinor',\n description:\n 'If set to `true`, Renovate creates separate PRs for each `minor` stream.',\n stage: 'package',\n type: 'boolean',\n default: false,\n experimental: true,\n },\n {\n name: 'separateMinorPatch',\n description:\n 'If set to `true`, Renovate will separate `minor` and `patch` updates into separate branches.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreUnstable',\n description: 'Ignore versions with unstable SemVer.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'ignoreDeprecated',\n description:\n 'Avoid upgrading from a non-deprecated version to a deprecated one.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'followTag',\n description: 'If defined, packages will follow this release tag exactly.',\n stage: 'package',\n type: 'string',\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'maxMajorIncrement',\n description:\n 'Limit the maximum major version increment allowed. Set to 0 to disable.',\n stage: 'package',\n type: 'integer',\n default: 500,\n cli: false,\n env: false,\n },\n {\n name: 'respectLatest',\n description: 'Ignore versions newer than npm \"latest\" version.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'rangeStrategy',\n description: 'Determines how to modify or update existing ranges.',\n type: 'string',\n default: 'auto',\n allowedValues: [\n 'auto',\n 'pin',\n 'bump',\n 'replace',\n 'widen',\n 'update-lockfile',\n 'in-range-only',\n ],\n cli: false,\n env: false,\n },\n {\n name: 'branchPrefix',\n description: 'Prefix to use for all branch names.',\n stage: 'branch',\n type: 'string',\n default: `renovate/`,\n },\n {\n name: 'branchPrefixOld',\n description: 'Old branchPrefix value to check for existing PRs.',\n stage: 'branch',\n type: 'string',\n default: `renovate/`,\n },\n {\n name: 'bumpVersion',\n description: 'Bump the version in the package file being updated.',\n type: 'string',\n allowedValues: ['major', 'minor', 'patch', 'prerelease'],\n supportedManagers: ['helmv3', 'npm', 'nuget', 'maven', 'sbt'],\n },\n // Major/Minor/Patch\n {\n name: 'major',\n description: 'Configuration to apply when an update type is `major`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'minor',\n description: 'Configuration to apply when an update type is `minor`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'patch',\n description: 'Configuration to apply when an update type is `patch`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'pin',\n description: 'Configuration to apply when an update type is `pin`.',\n stage: 'package',\n type: 'object',\n default: {\n rebaseWhen: 'behind-base-branch',\n groupName: 'Pin Dependencies',\n groupSlug: 'pin-dependencies',\n commitMessageAction: 'Pin',\n group: {\n commitMessageTopic: 'dependencies',\n commitMessageExtra: '',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'digest',\n description:\n 'Configuration to apply when updating a digest (no change in tag/version).',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-digest',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic: '{{{depName}}} digest',\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'pinDigest',\n description:\n 'Configuration to apply when pinning a digest (no change in tag/version).',\n stage: 'package',\n type: 'object',\n default: {\n groupName: 'Pin Dependencies',\n groupSlug: 'pin-dependencies',\n commitMessageAction: 'Pin',\n group: {\n commitMessageTopic: 'dependencies',\n commitMessageExtra: '',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'rollback',\n description: 'Configuration to apply when rolling back a version.',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-rollback',\n commitMessageAction: 'Roll back',\n semanticCommitType: 'fix',\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'replacement',\n description: 'Configuration to apply when replacing a dependency.',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-replacement',\n commitMessageAction: 'Replace',\n commitMessageExtra:\n 'with {{newName}} {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{#if isSingleVersion}}{{{prettyNewVersion}}}{{else}}{{{newValue}}}{{/if}}{{/if}}',\n prBodyNotes: [\n 'This is a special PR that replaces `{{{depName}}}` with the community suggested minimal stable replacement version.',\n ],\n },\n cli: false,\n mergeable: true,\n },\n // Semantic commit / Semantic release\n {\n name: 'semanticCommits',\n description: 'Enable Semantic Commit prefixes for commits and PR titles.',\n type: 'string',\n allowedValues: ['auto', 'enabled', 'disabled'],\n default: 'auto',\n },\n {\n name: 'semanticCommitType',\n description: 'Commit type to use if Semantic Commits is enabled.',\n type: 'string',\n default: 'chore',\n },\n {\n name: 'semanticCommitScope',\n description: 'Commit scope to use if Semantic Commits are enabled.',\n type: 'string',\n default: 'deps',\n },\n {\n name: 'commitMessageLowerCase',\n description: 'Lowercase PR- and commit titles.',\n type: 'string',\n allowedValues: ['auto', 'never'],\n default: 'auto',\n },\n // PR Behavior\n {\n name: 'keepUpdatedLabel',\n description:\n 'If set, users can add this label to PRs to request they be kept updated with the base branch.',\n type: 'string',\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'rollbackPrs',\n description:\n 'Create PRs to roll back versions if the current version is not found in the registry.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'recreateWhen',\n description: 'Recreate PRs even if same ones were closed previously.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'always', 'never'],\n },\n {\n name: 'rebaseWhen',\n description: 'Controls when Renovate rebases an existing branch.',\n type: 'string',\n allowedValues: [\n 'auto',\n 'never',\n 'conflicted',\n 'behind-base-branch',\n 'automerging',\n ],\n default: 'auto',\n },\n {\n name: 'rebaseLabel',\n description: 'Label to request a rebase from Renovate bot.',\n type: 'string',\n default: 'rebase',\n },\n {\n name: 'stopUpdatingLabel',\n description: 'Label to make Renovate stop updating a PR.',\n type: 'string',\n default: 'stop-updating',\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'minimumReleaseAge',\n description: 'Time required before a new release is considered stable.',\n type: 'string',\n default: null,\n },\n {\n name: 'minimumReleaseAgeBehaviour',\n description:\n 'When set in conjunction with `minimumReleaseAge`, controls whether the `releaseTimestamp` for a dependency update is required.',\n type: 'string',\n default: 'timestamp-required',\n allowedValues: ['timestamp-required', 'timestamp-optional'],\n },\n {\n name: 'abandonmentThreshold',\n description:\n 'Flags packages that have not been updated within this period as abandoned.',\n type: 'string',\n default: null,\n },\n {\n name: 'dependencyDashboardReportAbandonment',\n description:\n 'Controls whether abandoned packages are reported in the dependency dashboard.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'internalChecksAsSuccess',\n description:\n 'Whether to consider passing internal checks such as `minimumReleaseAge` when determining branch status.',\n type: 'boolean',\n default: false,\n },\n /*\n * Undocumented experimental feature\n {\n name: 'minimumConfidence',\n description:\n 'Minimum Merge confidence level to filter by. Requires authentication to work.',\n type: 'string',\n allowedValues: ['low', 'neutral', 'high', 'very high'],\n default: 'low',\n },\n */\n {\n name: 'internalChecksFilter',\n description: 'When and how to filter based on internal checks.',\n type: 'string',\n allowedValues: ['strict', 'flexible', 'none'],\n default: 'strict',\n },\n {\n name: 'processEnv',\n description: 'Environment variables to be used in global config only.',\n type: 'object',\n default: {},\n globalOnly: true,\n stage: 'global',\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'prCreation',\n description: 'When to create the PR for a branch.',\n type: 'string',\n allowedValues: ['immediate', 'not-pending', 'status-success', 'approval'],\n default: 'immediate',\n },\n {\n name: 'prNotPendingHours',\n description: 'Timeout in hours for when `prCreation=not-pending`.',\n type: 'integer',\n default: 25,\n },\n {\n name: 'commitHourlyLimit',\n description: 'Rate limit commits to maximum x per hour. 0 means no limit.',\n type: 'integer',\n default: 0,\n },\n {\n name: 'prHourlyLimit',\n description:\n 'Rate limit PRs to maximum x created per hour. 0 means no limit.',\n type: 'integer',\n default: 2,\n },\n {\n name: 'prConcurrentLimit',\n description:\n 'Limit to a maximum of x concurrent branches/PRs. 0 means no limit.',\n type: 'integer',\n default: 10,\n },\n {\n name: 'branchConcurrentLimit',\n description:\n 'Limit to a maximum of x concurrent branches. 0 means no limit, `null` (default) inherits value from `prConcurrentLimit`.',\n type: 'integer',\n default: null, // inherit prConcurrentLimit\n },\n {\n name: 'prPriority',\n description:\n 'Set sorting priority for PR creation. PRs with higher priority are created first, negative priority last.',\n type: 'integer',\n allowNegative: true,\n default: 0,\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'overrideDatasource',\n description: 'Override the datasource value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'overrideDepName',\n description: 'Override the depName value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'overridePackageName',\n description: 'Override the packageName value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'bbAutoResolvePrTasks',\n description:\n 'The PR tasks will be automatically completed after the PR is raised.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['bitbucket'],\n },\n {\n name: 'bbUseDefaultReviewers',\n description: 'Use the default reviewers (Bitbucket only).',\n type: 'boolean',\n default: true,\n supportedPlatforms: ['bitbucket', 'bitbucket-server'],\n },\n {\n name: 'bbUseDevelopmentBranch',\n description: `Use the repository's [development branch](https://support.atlassian.com/bitbucket-cloud/docs/branch-a-repository/#The-branching-model) as the repository's default branch.`,\n type: 'boolean',\n default: false,\n supportedPlatforms: ['bitbucket'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n // Automatic merging\n {\n name: 'automerge',\n description:\n 'Whether to automerge branches/PRs automatically, without human intervention.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'automergeType',\n description: 'How to automerge, if enabled.',\n type: 'string',\n allowedValues: ['branch', 'pr', 'pr-comment'],\n default: 'pr',\n },\n {\n name: 'automergeStrategy',\n description:\n 'The merge strategy to use when automerging PRs. Used only if `automergeType=pr`.',\n type: 'string',\n allowedValues: [\n 'auto',\n 'fast-forward',\n 'merge-commit',\n 'rebase',\n 'rebase-merge',\n 'squash',\n ],\n default: 'auto',\n supportedPlatforms: ['azure', 'bitbucket', 'forgejo', 'gitea', 'github'],\n },\n {\n name: 'automergeComment',\n description:\n 'PR comment to add to trigger automerge. Only used if `automergeType=pr-comment`.',\n type: 'string',\n default: 'automergeComment',\n },\n {\n name: 'ignoreTests',\n description: 'Set to `true` to enable automerging without tests.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'transformTemplates',\n description: 'List of jsonata transformation rules.',\n type: 'array',\n subType: 'string',\n parents: ['customDatasources'],\n default: [],\n },\n {\n name: 'vulnerabilityAlerts',\n description:\n 'Config to apply when a PR is needed due to a vulnerability in the existing package version.',\n type: 'object',\n default: {\n groupName: null,\n schedule: [],\n dependencyDashboardApproval: false,\n minimumReleaseAge: null,\n rangeStrategy: 'update-lockfile',\n commitMessageSuffix: '[SECURITY]',\n branchTopic: `{{{datasource}}}-{{{depNameSanitized}}}-vulnerability`,\n prCreation: 'immediate',\n vulnerabilityFixStrategy: 'lowest',\n },\n mergeable: true,\n cli: false,\n env: false,\n supportedPlatforms: ['github'],\n },\n {\n name: 'vulnerabilityFixStrategy',\n description:\n 'Strategy to use when fixing vulnerabilities. `lowest` will propose the earliest version with a fix, `highest` will always pick the latest version.',\n type: 'string',\n allowedValues: ['lowest', 'highest'],\n default: 'lowest',\n parents: ['vulnerabilityAlerts'],\n },\n {\n name: 'osvVulnerabilityAlerts',\n description: 'Use vulnerability alerts from `osv.dev`.',\n type: 'boolean',\n default: false,\n experimental: true,\n experimentalIssues: [20542],\n },\n {\n name: 'pruneBranchAfterAutomerge',\n description: 'Set to `true` to enable branch pruning after automerging.',\n type: 'boolean',\n default: true,\n },\n // Default templates\n {\n name: 'branchName',\n description: 'Branch name template.',\n type: 'string',\n default: '{{{branchPrefix}}}{{{additionalBranchPrefix}}}{{{branchTopic}}}',\n deprecationMsg:\n 'We strongly recommended that you avoid configuring this field directly. Please edit `branchPrefix`, `additionalBranchPrefix`, or `branchTopic` instead.',\n cli: false,\n },\n {\n name: 'additionalBranchPrefix',\n description: 'Additional string value to be appended to `branchPrefix`.',\n type: 'string',\n default: '',\n cli: false,\n },\n {\n name: 'branchTopic',\n description: 'Branch topic.',\n type: 'string',\n default:\n '{{{depNameSanitized}}}-{{{newMajor}}}{{#if separateMinorPatch}}{{#if isPatch}}.{{{newMinor}}}{{/if}}{{/if}}{{#if separateMultipleMinor}}{{#if isMinor}}.{{{newMinor}}}{{/if}}{{/if}}.x{{#if isLockfileUpdate}}-lockfile{{/if}}',\n cli: false,\n },\n {\n name: 'commitMessage',\n description: 'Message to use for commit messages and pull request titles.',\n type: 'string',\n default:\n '{{{commitMessagePrefix}}} {{{commitMessageAction}}} {{{commitMessageTopic}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}',\n deprecationMsg:\n 'We deprecated editing the `commitMessage` directly, and we recommend you stop using this config option. Instead use config options like `commitMessageAction`, `commitMessageExtra`, and so on, to create the commit message you want.',\n cli: false,\n },\n {\n name: 'commitBody',\n description:\n 'Commit message body template. Will be appended to commit message, separated by two line returns.',\n type: 'string',\n cli: false,\n },\n {\n name: 'commitBodyTable',\n description:\n 'If enabled, append a table in the commit message body describing all updates in the commit.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'commitMessagePrefix',\n description:\n 'Prefix to add to start of commit messages and PR titles. Uses a semantic prefix if `semanticCommits` is enabled.',\n type: 'string',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageAction',\n description: 'Action verb to use in commit messages and PR titles.',\n type: 'string',\n default: 'Update',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageTopic',\n description:\n 'The upgrade topic/noun used in commit messages and PR titles.',\n type: 'string',\n default: 'dependency {{depName}}',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageExtra',\n description:\n 'Extra description used after the commit message topic - typically the version.',\n type: 'string',\n default:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageSuffix',\n description: 'Suffix to add to end of commit messages and PR titles.',\n type: 'string',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'prBodyTemplate',\n description:\n 'Pull Request body template. Controls which sections are rendered in the body of the pull request.',\n type: 'string',\n default:\n '{{{header}}}{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}{{{configDescription}}}{{{controls}}}{{{footer}}}',\n cli: false,\n },\n {\n name: 'prTitle',\n description:\n 'Pull Request title template. Inherits from `commitMessage` if null.',\n type: 'string',\n default: null,\n deprecationMsg:\n 'Direct editing of `prTitle` is now deprecated. Instead use config options like `commitMessageAction`, `commitMessageExtra`, and so on, as they will be passed through to `prTitle`.',\n cli: false,\n },\n {\n name: 'prTitleStrict',\n description:\n 'Whether to bypass appending extra context to the Pull Request title.',\n type: 'boolean',\n default: false,\n experimental: true,\n cli: false,\n },\n {\n name: 'prHeader',\n description: 'Text added here will be placed first in the PR body.',\n type: 'string',\n },\n {\n name: 'prFooter',\n description:\n 'Text added here will be placed last in the PR body, with a divider separator before it.',\n type: 'string',\n default: `This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).`,\n },\n {\n name: 'customizeDashboard',\n description: 'Customize sections in the Dependency Dashboard issue.',\n type: 'object',\n default: {},\n freeChoice: true,\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'lockFileMaintenance',\n description: 'Configuration for lock file maintenance.',\n stage: 'branch',\n type: 'object',\n default: {\n enabled: false,\n recreateWhen: 'always',\n rebaseStalePrs: true,\n branchTopic: 'lock-file-maintenance',\n commitMessageAction: 'Lock file maintenance',\n commitMessageTopic: null,\n commitMessageExtra: null,\n schedule: ['before 4am on monday'],\n groupName: null,\n prBodyDefinitions: {\n Change: 'All locks refreshed',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'hashedBranchLength',\n description:\n 'If enabled, branch names will use a hashing function to ensure each branch has that length.',\n type: 'integer',\n default: null,\n cli: false,\n },\n // Dependency Groups\n {\n name: 'groupName',\n description: 'Human understandable name for the dependency group.',\n type: 'string',\n default: null,\n },\n {\n name: 'groupSlug',\n description:\n 'Slug to use for group (e.g. in branch name). Slug is calculated from `groupName` if `null`.',\n type: 'string',\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'group',\n description: 'Config if `groupName` is enabled.',\n type: 'object',\n default: {\n branchTopic: '{{{groupSlug}}}',\n commitMessageTopic: '{{{groupName}}}',\n },\n cli: false,\n env: false,\n mergeable: true,\n advancedUse: true,\n },\n // Pull Request options\n {\n name: 'labels',\n description: 'Labels to set in Pull Request.',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'addLabels',\n description: 'Labels to add to Pull Request.',\n type: 'array',\n subType: 'string',\n mergeable: true,\n },\n {\n name: 'assignees',\n description:\n 'Assignees for Pull Request (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'assigneesFromCodeOwners',\n description:\n 'Determine assignees based on configured code owners and changes in PR.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'expandCodeOwnersGroups',\n description:\n 'Expand the configured code owner groups into a full list of group members.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'assigneesSampleSize',\n description: 'Take a random sample of given size from `assignees`.',\n type: 'integer',\n default: null,\n },\n {\n name: 'assignAutomerge',\n description:\n 'Assign reviewers and assignees even if the PR is to be automerged.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreReviewers',\n description:\n 'Reviewers to be ignored in PR reviewers presence (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'reviewers',\n description:\n 'Requested reviewers for Pull Requests (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'reviewersFromCodeOwners',\n description:\n 'Determine reviewers based on configured code owners and changes in PR.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'filterUnavailableUsers',\n description: 'Filter reviewers and assignees based on their availability.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'forkModeDisallowMaintainerEdits',\n description:\n 'Disallow maintainers to push to Renovate pull requests when running in fork mode.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['github'],\n },\n {\n name: 'confidential',\n description:\n 'If enabled, issues created by Renovate are set as confidential.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'reviewersSampleSize',\n description: 'Take a random sample of given size from `reviewers`.',\n type: 'integer',\n default: null,\n },\n {\n name: 'additionalReviewers',\n description:\n 'Additional reviewers for Pull Requests (in contrast to `reviewers`, this option adds to the existing reviewer list, rather than replacing it).',\n type: 'array',\n subType: 'string',\n mergeable: true,\n },\n {\n name: 'managerFilePatterns',\n description: 'RegEx (`re2`) and glob patterns for matching manager files.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n allowString: true,\n patternMatch: true,\n mergeable: true,\n cli: false,\n env: false,\n parents: [...AllManagersListLiteral, 'customManagers'],\n },\n {\n name: 'postUpdateOptions',\n description:\n 'Enable post-update options to be run after package/artifact updating.',\n type: 'array',\n default: [],\n subType: 'string',\n allowedValues: [\n 'bundlerConservative',\n 'composerWithAll',\n 'composerNoMinimalChanges',\n 'dotnetWorkloadRestore',\n 'gomodMassage',\n 'gomodTidy',\n 'gomodTidy1.17',\n 'gomodTidyE',\n 'gomodUpdateImportPaths',\n 'gomodSkipVendor',\n 'gomodVendor',\n 'goGenerate',\n 'helmUpdateSubChartArchives',\n 'kustomizeInflateHelmCharts',\n 'npmDedupe',\n 'npmInstallTwice',\n 'pnpmDedupe',\n 'yarnDedupeFewer',\n 'yarnDedupeHighest',\n ],\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'constraints',\n description:\n 'Configuration object to define language or manager version constraints.',\n type: 'object',\n default: {},\n mergeable: true,\n cli: false,\n supportedManagers: [\n 'bundler',\n 'composer',\n 'gomod',\n 'npm',\n 'pep621',\n 'pipenv',\n 'poetry',\n ],\n freeChoice: true,\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'hostRules',\n description: 'Host rules/configuration including credentials.',\n type: 'array',\n subType: 'object',\n stage: 'repository',\n cli: true,\n mergeable: true,\n },\n {\n name: 'hostType',\n description:\n 'hostType for a package rule. Can be a platform name or a datasource name.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchHost',\n description: 'A domain name, host name or base URL to match against.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'readOnly',\n description:\n 'Match against requests that only read data and do not mutate anything.',\n type: 'boolean',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'timeout',\n description: 'Timeout (in milliseconds) for queries to external endpoints.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'insecureRegistry',\n description: 'Explicitly turn on insecure Docker registry access (HTTP).',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'abortOnError',\n description:\n 'If enabled, Renovate aborts its run when HTTP request errors occur.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'abortIgnoreStatusCodes',\n description:\n 'A list of HTTP status codes safe to ignore even when `abortOnError=true`.',\n type: 'array',\n subType: 'number',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'enableHttp2',\n description: 'Enable got HTTP/2 support.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'concurrentRequestLimit',\n description: 'Limit concurrent requests per host.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'maxRequestsPerSecond',\n description: 'Limit requests rate per host.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n default: 0,\n cli: false,\n env: false,\n },\n {\n name: 'authType',\n description:\n 'Authentication type for HTTP header. e.g. `\"Bearer\"` or `\"Basic\"`. Use `\"Token-Only\"` to use only the token without an authorization type.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: 'Bearer',\n cli: false,\n env: false,\n },\n {\n name: 'dnsCache',\n description: 'Enable got DNS cache.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n experimental: true,\n deprecationMsg:\n 'This option is deprecated and will be removed in a future release.',\n },\n {\n name: 'keepAlive',\n description: 'Enable HTTP keep-alive for hosts.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'headers',\n description:\n 'Put fields to be forwarded to the HTTP request headers in the headers config option.',\n type: 'object',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'artifactAuth',\n description:\n 'A list of package managers to enable artifact auth. Only managers on the list are enabled. All are enabled if `null`.',\n experimental: true,\n type: 'array',\n subType: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n allowedValues: ['composer'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsCertificateAuthority',\n description: 'The overriding trusted CA certificate.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsPrivateKey',\n description: 'The private key in PEM format.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsCertificate',\n description: 'The certificate chains in PEM format.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'cacheHardTtlMinutes',\n description:\n 'Maximum duration in minutes to keep datasource cache entries.',\n type: 'integer',\n stage: 'repository',\n default: 7 * 24 * 60,\n globalOnly: true,\n },\n {\n name: 'cacheTtlOverride',\n description: 'An object that contains cache namespace TTL override values.',\n type: 'object',\n stage: 'repository',\n default: {},\n globalOnly: true,\n experimental: true,\n advancedUse: true,\n },\n {\n name: 'prBodyDefinitions',\n description: 'Table column definitions to use in PR tables.',\n type: 'object',\n freeChoice: true,\n mergeable: true,\n default: {\n Package:\n '{{{depNameLinked}}}{{#if newName}}{{#unless (equals depName newName)}} → {{{newNameLinked}}}{{/unless}}{{/if}}',\n Type: '{{{depType}}}',\n Update: '{{{updateType}}}',\n 'Current value': '{{{currentValue}}}',\n 'New value': '{{{newValue}}}',\n Change: '`{{{displayFrom}}}` → `{{{displayTo}}}`',\n Pending: '{{{displayPending}}}',\n References: '{{{references}}}',\n 'Package file': '{{{packageFile}}}',\n Age: \"{{#if newVersion}}{{/if}}\",\n\n Adoption:\n \"{{#if newVersion}}{{/if}}\",\n\n Passing:\n \"{{#if newVersion}}{{/if}}\",\n\n Confidence:\n \"{{#if newVersion}}{{/if}}\",\n },\n },\n {\n name: 'prBodyHeadingDefinitions',\n description: 'Table header definitions to use in PR tables.',\n type: 'object',\n freeChoice: true,\n mergeable: true,\n default: {\n Age: '[Age](https://docs.renovatebot.com/merge-confidence/)',\n Adoption: '[Adoption](https://docs.renovatebot.com/merge-confidence/)',\n Passing: '[Passing](https://docs.renovatebot.com/merge-confidence/)',\n Confidence:\n '[Confidence](https://docs.renovatebot.com/merge-confidence/)',\n },\n },\n {\n name: 'prBodyColumns',\n description: 'List of columns to use in PR bodies.',\n type: 'array',\n subType: 'string',\n default: ['Package', 'Type', 'Update', 'Change', 'Pending'],\n },\n {\n name: 'prBodyNotes',\n description:\n 'List of extra notes or templates to include in the Pull Request body.',\n type: 'array',\n subType: 'string',\n default: [],\n allowString: true,\n mergeable: true,\n },\n {\n name: 'suppressNotifications',\n description:\n 'Options to suppress various types of warnings and other notifications.',\n type: 'array',\n subType: 'string',\n default: [],\n allowedValues: [\n 'artifactErrors',\n 'branchAutomergeFailure',\n 'configErrorIssue',\n 'dependencyLookupWarnings',\n 'lockFileErrors',\n 'missingCredentialsError',\n 'onboardingClose',\n 'prEditedNotification',\n 'prIgnoreNotification',\n ],\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'pruneStaleBranches',\n description: 'Set to `false` to disable pruning stale branches.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'unicodeEmoji',\n description: 'Enable or disable Unicode emoji.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'gitLabIgnoreApprovals',\n description: `Ignore approval rules for MRs created by Renovate, which is useful for automerge.`,\n type: 'boolean',\n default: false,\n },\n {\n name: 'customManagers',\n description: 'Custom managers using regex matching.',\n type: 'array',\n subType: 'object',\n default: [],\n stage: 'package',\n cli: true,\n mergeable: true,\n },\n {\n name: 'customType',\n description:\n 'Custom manager to use. Valid only within a `customManagers` object.',\n type: 'string',\n allowedValues: ['jsonata', 'regex'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'fileFormat',\n description:\n 'It specifies the syntax of the package file being managed by the custom JSONata manager.',\n type: 'string',\n allowedValues: ['json', 'toml', 'yaml'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n requiredIf: [\n {\n siblingProperties: [\n {\n property: 'customType',\n value: 'jsonata',\n },\n ],\n },\n ],\n },\n {\n name: 'matchStrings',\n description:\n 'Queries to use. Valid only within `bumpVersions` or `customManagers` object.',\n type: 'array',\n subType: 'string',\n parents: ['bumpVersions', 'customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'matchStringsStrategy',\n description: 'Strategy how to interpret matchStrings.',\n type: 'string',\n default: 'any',\n allowedValues: ['any', 'recursive', 'combination'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'depNameTemplate',\n description:\n 'Optional depName for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'packageNameTemplate',\n description:\n 'Optional packageName for extracted dependencies, else defaults to `depName` value. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'datasourceTemplate',\n description:\n 'Optional datasource for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'depTypeTemplate',\n description:\n 'Optional `depType` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'currentValueTemplate',\n description:\n 'Optional `currentValue` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'versioningTemplate',\n description:\n 'Optional versioning for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'registryUrlTemplate',\n description:\n 'Optional registry URL for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'extractVersionTemplate',\n description:\n 'Optional `extractVersion` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'autoReplaceStringTemplate',\n description:\n 'Optional `extractVersion` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'fetchChangeLogs',\n description: 'Controls if and when changelogs/release notes are fetched.',\n type: 'string',\n allowedValues: ['off', 'branch', 'pr'],\n default: 'pr',\n cli: false,\n },\n {\n name: 'cloneSubmodules',\n description:\n 'Set to `true` to initialize submodules during repository clone.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'cloneSubmodulesFilter',\n description:\n 'List of submodules names or patterns to clone when cloneSubmodules=true.',\n type: 'array',\n subType: 'string',\n default: ['*'],\n },\n {\n name: 'ignorePrAuthor',\n description:\n 'Set to `true` to fetch the entire list of PRs instead of only those authored by the Renovate user.',\n type: 'boolean',\n globalOnly: true,\n default: false,\n },\n {\n name: 'allowedUnsafeExecutions',\n description: `List of possibly unsafe executions which are permitted to run. This enables global control over any implicit commands\n which are run as part of a renovate run. This is similar to \\`allowedCommands\\` but is specifically used to control executions\n which run automatically, and are not explicitly added in \\`postUpgradeTasks\\``,\n type: 'array',\n subType: 'string',\n default: [],\n allowedValues: ['bazelModDeps', 'goGenerate', 'gradleWrapper'],\n stage: 'repository',\n globalOnly: true,\n },\n {\n name: 'gitNoVerify',\n description:\n 'Which Git commands will be run with the `--no-verify` option.',\n type: 'array',\n subType: 'string',\n allowString: true,\n allowedValues: ['commit', 'push'],\n default: ['commit', 'push'],\n stage: 'global',\n globalOnly: true,\n },\n {\n name: 'updatePinnedDependencies',\n description:\n 'Whether to update pinned (single version) dependencies or not.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'gitUrl',\n description:\n 'Overrides the default resolution for Git remote, e.g. to switch GitLab from HTTPS to SSH-based.',\n type: 'string',\n supportedPlatforms: [\n 'bitbucket-server',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'gitlab',\n 'scm-manager',\n ],\n allowedValues: ['default', 'ssh', 'endpoint'],\n default: 'default',\n stage: 'repository',\n globalOnly: true,\n },\n {\n name: 'writeDiscoveredRepos',\n description: 'Writes discovered repositories to a JSON file and then exit.',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'platformAutomerge',\n description: `Controls if platform-native auto-merge is used.`,\n type: 'boolean',\n default: true,\n supportedPlatforms: [\n 'azure',\n 'bitbucket-server',\n 'forgejo',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'userStrings',\n description:\n 'User-facing strings for the Renovate comment when a PR is closed.',\n type: 'object',\n freeChoice: true,\n default: {\n ignoreTopic: 'Renovate Ignore Notification',\n ignoreMajor:\n 'Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for *any* future `{{{newMajor}}}.x` releases. But if you manually upgrade to `{{{newMajor}}}.x` then Renovate will re-enable `minor` and `patch` updates automatically.',\n ignoreDigest:\n 'Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for the `{{{depName}}}` `{{{newDigestShort}}}` update again.',\n ignoreOther:\n 'Because you closed this PR without merging, Renovate will ignore this update (`{{{newValue}}}`). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the `ignoreDeps` array of your Renovate config.',\n artifactErrorWarning: 'You probably do not want to merge this PR as-is.',\n },\n },\n {\n name: 'platformCommit',\n description:\n 'Use platform API to perform commits instead of using Git directly.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'disabled', 'enabled'],\n supportedPlatforms: ['github'],\n },\n {\n name: 'branchNameStrict',\n description: `Whether to be strict about the use of special characters within the branch name.`,\n type: 'boolean',\n default: false,\n },\n {\n name: 'checkedBranches',\n description:\n 'A list of branch names to mark for creation or rebasing as if it was selected in the Dependency Dashboard issue.',\n type: 'array',\n subType: 'string',\n experimental: true,\n globalOnly: true,\n default: [],\n },\n {\n name: 'maxRetryAfter',\n description:\n 'Maximum retry-after header value to wait for before retrying a failed request.',\n type: 'integer',\n default: 60,\n stage: 'package',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'logLevelRemap',\n description: 'Remap log levels to different levels.',\n type: 'array',\n subType: 'object',\n stage: 'repository',\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'matchMessage',\n description: 'Regex/minimatch expression to match against log message.',\n type: 'string',\n parents: ['logLevelRemap'],\n cli: false,\n env: false,\n },\n {\n name: 'newLogLevel',\n description: 'New log level to use if matchMessage matches.',\n type: 'string',\n allowedValues: ['trace', 'debug', 'info', 'warn', 'error', 'fatal'],\n parents: ['logLevelRemap'],\n cli: false,\n env: false,\n },\n {\n name: 'milestone',\n description: `The number of a milestone. If set, the milestone will be set when Renovate creates the PR.`,\n type: 'integer',\n default: null,\n supportedPlatforms: ['github'],\n },\n {\n name: 'httpCacheTtlDays',\n description: 'Maximum duration in days to keep HTTP cache entries.',\n type: 'integer',\n stage: 'repository',\n default: 90,\n globalOnly: true,\n },\n {\n name: 'prCacheSyncMaxPages',\n description:\n 'Maximum number of pages to fetch when syncing the pull request cache.',\n type: 'integer',\n default: 100,\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n experimentalIssues: [41485],\n },\n {\n name: 'dockerMaxPages',\n description:\n 'By default, Renovate fetches up to 20 pages of Docker tags from registries. But you can set your own limit with this config option.',\n type: 'integer',\n default: 20,\n globalOnly: true,\n },\n {\n name: 'deleteConfigFile',\n description:\n 'If set to `true`, Renovate tries to delete the self-hosted config file after reading it.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'deleteAdditionalConfigFile',\n description:\n 'If set to `true`, Renovate tries to delete the additional self-hosted config file after reading it.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 's3Endpoint',\n description:\n 'If set, Renovate will use this string as the `endpoint` when creating the AWS S3 client instance.',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 's3PathStyle',\n description:\n 'If set, Renovate will enable `forcePathStyle` when creating the AWS S3 client instance.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'cachePrivatePackages',\n description:\n 'Cache private packages in the datasource cache. This is useful for self-hosted setups',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'configValidationError',\n description:\n 'If enabled, config validation errors will be reported as errors instead of warnings, and Renovate will exit with a non-zero exit code.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'toolSettings',\n description:\n 'Tool specific configuration. Global self-hosted configuration takes precedence.',\n type: 'object',\n default: {\n jvmMaxMemory: 512,\n jvmMemory: 512,\n },\n cli: false,\n },\n {\n name: 'jvmMaxMemory',\n description:\n 'Maximum JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to 512. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.jvmMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['gradle-wrapper'],\n cli: false,\n env: false,\n },\n {\n name: 'jvmMemory',\n description:\n 'Initial JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to `jvmMaxMemory`. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.jvmMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['gradle-wrapper'],\n cli: false,\n env: false,\n },\n {\n name: 'nodeMaxMemory',\n description:\n 'Maximum memory in MiB for Node child processes invoked by Renovate. If unset, the Node process will automagically determine the memory limit to use. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.nodeMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['npm'],\n cli: false,\n env: false,\n },\n];\n\nexport function getOptions(): Readonly<RenovateOptions>[] {\n return options;\n}\n\nfunction loadManagerOptions(): void {\n const allManagers = new Map([...getManagers(), ...getCustomManagers()]);\n for (const [name, config] of allManagers.entries()) {\n // v8 ignore else -- TODO: add test #40625\n if (config.defaultConfig) {\n const managerConfig: Readonly<RenovateOptions> = {\n name,\n description: `Configuration object for the ${name} manager`,\n stage: 'package',\n type: 'object',\n default: config.defaultConfig,\n mergeable: true,\n cli: false,\n autogenerated: true,\n };\n options.push(managerConfig);\n }\n }\n}\n\nfunction freeze(value: unknown): void {\n if (isArray(value)) {\n for (const v of value) {\n freeze(v);\n }\n\n Object.freeze(value);\n } else if (isObject(value)) {\n for (const v of Object.values(value)) {\n freeze(v);\n }\n\n Object.freeze(value);\n }\n}\n\nfunction freezeConfigOptions(): void {\n for (const option of options) {\n freeze(option);\n }\n}\n\nloadManagerOptions();\nfreezeConfigOptions();\n"],"mappings":";;;;;;;;;AASA,MAAM,UAAuC;CAC3C;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe,CAAC,QAAQ,SAAS;EAClC;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,MAAM;EAChB,SAAS;EACT,YAAY;EACZ,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,eAAe,CAAC,OAAO,OAAO;EAC9B,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,SAAS;EACT,YAAY;EACZ,cAAc;EACd,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,eAAe;EACf,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,KAAK;EACL,KAAK;EACL,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,eAAe;GAAC;GAAS;GAAS;GAAS;GAAO;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,eAAe;EAC1B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EAC1B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,UAAU,EAAE;GACZ,aAAa,EAAE;GACf,eAAe;GACf,cAAc,EAAE;GACjB;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,mBAAmB;EAC7B,SAAS,EAAE;EACX,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,mBAAmB;EAC7B,SAAS,CAAC,OAAO;EACjB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,SAAS,EAAE;EACX,sBAAsB;GACpB,MAAM;GACN,YAAY,EAAE;GACd,sBAAsB;GACvB;EACD,WAAW;EACX,YAAY;EACZ,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,oBAAoB;EAC9B,SAAS;EACT,eAAe,CAAC,QAAQ,QAAQ;EAChC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,eAAe,CAAC,UAAU,SAAS;EACnC,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,cAAc;EACd,yBACE;EACF,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,eAAe;GACf,MAAM;GACN,UAAU;GACX;EACD,sBAAsB;GACpB,MAAM;GACN,QAAQ;GACT;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GACP,eAAe;GACf,kBAAkB;GAClB,iBAAiB;GACjB,mBAAmB;GACpB;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,aAAa;EACb,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;GACP;GACA;GACA,GAAG;GACH;GACA;GACA,GAAG;GACJ;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,QAAQ,SAAS;EACjC,KAAK;EACL,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,eAAe;GAAC;GAAY;GAAW;GAAQ;EAC/C,OAAO;EACP,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,OAAO;EACP,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACd,eAAe;GAAC;GAAW;GAAQ;GAAK;EACzC;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACd,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,YAAY;EACZ,MAAM;EACN,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,eAAe;GAAC;GAAW;GAAU;GAAO;EAC5C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,eAAe;GAAC;GAAU;GAAU;GAAW;GAAS;EACxD,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC3B,SAAS,EAAE;EACX,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACT,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,gBACE;EACF,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,CAAC,QAAQ;EAClB,mBAAmB,CAAC,QAAQ;EAC7B;CAED;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACT,OAAO;EACR;CAED;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE,SAAS,qDAAqD;EACzE,YAAY;EACZ,sBAAsB;EACtB,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB;GAAC;GAAW;GAAS;GAAU;GAAS;EAC5D,YAAY;EACZ,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC9B,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACd,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACf;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAY;GAAY;GAAU;EAClD,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GAAC;GAAQ;GAAO;GAAa;EAC5C,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CAGD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACL,KAAK;EACL,SAAS,CAAC,cAAc;EACzB;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACL,KAAK;EACL,SAAS,CAAC,cAAc;EACzB;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,mBAAmB;GAAC;GAAO;GAAO;GAAY;GAAS;EACxD;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,GAAG,oBAAoB;EACvC,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACD;EACD,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;GAAC;GAAS;GAAa;GAAmB;EAC9D,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,mBAAmB,CAAC,MAAM;EAC3B;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB,CAAC,YAAY;EACjC,cAAc;EACf;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB;GAAC;GAAW;GAAS;GAAU;GAAS;EAC7D;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,KAAK;EACL,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,SAAS,OAAO;EAChC,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,YAAY;EACZ,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,YAAY;EACZ,OAAO;EACR;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACR;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,WAAW;EACX,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,WAAW;EACX,SAAS;EACT,OAAO;EACP,SAAS,CAAC,sBAAsB,yBAAyB;EAC1D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,WAAW;EACX,MAAM;EACN,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACD,mBAAmB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,oBAAoB;EAC9B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,QAAQ;EACR,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,QAAQ;EACR,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,mBAAmB;EAClC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,QAAQ;EAC9B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAU;GAAS;EAClD;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACL,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,cAAc;EACd,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,cAAc;EACd,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,eAAe,CAAC,WAAW,QAAQ;EACnC,mBAAmB,CAAC,MAAM;EAC1B,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAO;GAAW;GAAQ;GAAY;EACtD,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAS;GAAS;GAAS;GAAa;EACxD,mBAAmB;GAAC;GAAU;GAAO;GAAS;GAAS;GAAM;EAC9D;CAED;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,YAAY;GACZ,WAAW;GACX,WAAW;GACX,qBAAqB;GACrB,OAAO;IACL,oBAAoB;IACpB,oBAAoB;IACrB;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,oBAAoB;GACpB,oBAAoB;GACrB;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;GACP,WAAW;GACX,WAAW;GACX,qBAAqB;GACrB,OAAO;IACL,oBAAoB;IACpB,oBAAoB;IACrB;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,qBAAqB;GACrB,oBAAoB;GACrB;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,qBAAqB;GACrB,oBACE;GACF,aAAa,CACX,sHACD;GACF;EACD,KAAK;EACL,WAAW;EACZ;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,QAAQ,QAAQ;EAChC,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAU;GAAQ;EAC3C;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GACb;GACA;GACA;GACA;GACA;GACD;EACD,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe,CAAC,sBAAsB,qBAAqB;EAC5D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CAYD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAU;GAAY;GAAO;EAC7C,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,EAAE;EACX,YAAY;EACZ,OAAO;EACP,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAa;GAAe;GAAkB;GAAW;EACzE,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;EACf,SAAS;EACT,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,YAAY;EAClC;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,aAAa,mBAAmB;EACtD;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,YAAY;EACjC,YAAY;EACZ,sBAAsB;EACvB;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAU;GAAM;GAAa;EAC7C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACD;EACD,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAa;GAAW;GAAS;GAAS;EACzE;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,CAAC,oBAAoB;EAC9B,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,WAAW;GACX,UAAU,EAAE;GACZ,6BAA6B;GAC7B,mBAAmB;GACnB,eAAe;GACf,qBAAqB;GACrB,aAAa;GACb,YAAY;GACZ,0BAA0B;GAC3B;EACD,WAAW;EACX,KAAK;EACL,KAAK;EACL,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,UAAU,UAAU;EACpC,SAAS;EACT,SAAS,CAAC,sBAAsB;EACjC;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SACE;EACF,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACF,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,cAAc;EACd,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,EAAE;EACX,YAAY;EACZ,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,SAAS;GACT,cAAc;GACd,gBAAgB;GAChB,aAAa;GACb,qBAAqB;GACrB,oBAAoB;GACpB,oBAAoB;GACpB,UAAU,CAAC,uBAAuB;GAClC,WAAW;GACX,mBAAmB,EACjB,QAAQ,uBACT;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACN;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;GACP,aAAa;GACb,oBAAoB;GACrB;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACX,aAAa;EACd;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,aAAa;EACb,cAAc;EACd,WAAW;EACX,KAAK;EACL,KAAK;EACL,SAAS,CAAC,GAAG,wBAAwB,iBAAiB;EACvD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,WAAW;EACX,KAAK;EACL,mBAAmB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,YAAY;EACZ,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,cAAc;EACd,gBACE;EACH;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,cAAc;EACd,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,eAAe,CAAC,WAAW;EAC3B,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,EAAE;EACX,YAAY;EACZ,cAAc;EACd,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,SACE;GACF,MAAM;GACN,QAAQ;GACR,iBAAiB;GACjB,aAAa;GACb,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GAEL,UACE;GAEF,SACE;GAEF,YACE;GACH;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,KAAK;GACL,UAAU;GACV,SAAS;GACT,YACE;GACH;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS;GAAC;GAAW;GAAQ;GAAU;GAAU;GAAU;EAC5D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,aAAa;EACb,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,OAAO;EACP,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,WAAW,QAAQ;EACnC,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GAAC;GAAQ;GAAQ;GAAO;EACvC,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACL,YAAY,CACV,EACE,mBAAmB,CACjB;GACE,UAAU;GACV,OAAO;GACR,CACF,EACF,CACF;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,gBAAgB,iBAAiB;EAC3C,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAO;GAAa;GAAc;EAClD,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAO;GAAU;GAAK;EACtC,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,IAAI;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;;;EAGb,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,eAAe;GAAC;GAAgB;GAAc;GAAgB;EAC9D,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,eAAe,CAAC,UAAU,OAAO;EACjC,SAAS,CAAC,UAAU,OAAO;EAC3B,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACD,eAAe;GAAC;GAAW;GAAO;GAAW;EAC7C,SAAS;EACT,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;GACP,aAAa;GACb,aACE;GACF,cACE;GACF,aACE;GACF,sBAAsB;GACvB;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAY;GAAU;EAC9C,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,cAAc;EACd,YAAY;EACZ,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,gBAAgB;EAC1B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAS;GAAS;GAAQ;GAAQ;GAAS;GAAQ;EACnE,SAAS,CAAC,gBAAgB;EAC1B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,cAAc;GACd,WAAW;GACZ;EACD,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,iBAAiB;EACrC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,iBAAiB;EACrC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,MAAM;EAC1B,KAAK;EACL,KAAK;EACN;CACF;AAED,SAAgB,aAA0C;AACxD,QAAO;;AAGT,SAAS,qBAA2B;CAClC,MAAM,cAAc,IAAI,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,mBAAmB,CAAC,CAAC;AACvE,MAAK,MAAM,CAAC,MAAM,WAAW,YAAY,SAAS;;AAEhD,KAAI,OAAO,eAAe;EACxB,MAAM,gBAA2C;GAC/C;GACA,aAAa,gCAAgC,KAAK;GAClD,OAAO;GACP,MAAM;GACN,SAAS,OAAO;GAChB,WAAW;GACX,KAAK;GACL,eAAe;GAChB;AACD,UAAQ,KAAK,cAAc;;;AAKjC,SAAS,OAAO,OAAsB;AACpC,KAAI,QAAQ,MAAM,EAAE;AAClB,OAAK,MAAM,KAAK,MACd,QAAO,EAAE;AAGX,SAAO,OAAO,MAAM;YACX,SAAS,MAAM,EAAE;AAC1B,OAAK,MAAM,KAAK,OAAO,OAAO,MAAM,CAClC,QAAO,EAAE;AAGX,SAAO,OAAO,MAAM;;;AAIxB,SAAS,sBAA4B;AACnC,MAAK,MAAM,UAAU,QACnB,QAAO,OAAO;;AAIlB,oBAAoB;AACpB,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/config/options/index.ts"],"sourcesContent":["import { isArray, isObject } from '@sindresorhus/is';\nimport { PLATFORM_HOST_TYPES } from '../../constants/platforms.ts';\nimport { AllManagersListLiteral } from '../../manager-list.generated.ts';\nimport { getCustomManagers } from '../../modules/manager/custom/index.ts';\nimport { getManagers } from '../../modules/manager/index.ts';\nimport { getVersioningList } from '../../modules/versioning/index.ts';\nimport { supportedDatasources } from '../presets/internal/merge-confidence.preset.ts';\nimport { type RenovateOptions, UpdateTypesOptions } from '../types.ts';\n\nconst options: Readonly<RenovateOptions>[] = [\n {\n name: 'mode',\n description: 'Mode of operation.',\n type: 'string',\n default: 'full',\n allowedValues: ['full', 'silent'],\n },\n {\n name: 'allowedHeaders',\n description:\n 'List of allowed patterns for header names in repository hostRules config.',\n type: 'array',\n default: ['X-*'],\n subType: 'string',\n globalOnly: true,\n patternMatch: true,\n },\n {\n name: 'autodiscoverRepoOrder',\n description:\n 'The order method for autodiscover server side repository search.',\n type: 'string',\n default: null,\n globalOnly: true,\n allowedValues: ['asc', 'desc'],\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'autodiscoverRepoSort',\n description:\n 'The sort method for autodiscover server side repository search.',\n type: 'string',\n default: null,\n globalOnly: true,\n allowedValues: [\n 'alpha',\n 'created',\n 'created_at',\n 'updated',\n 'updated_at',\n 'size',\n 'id',\n ],\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'allowedEnv',\n description:\n 'List of allowed patterns for environment variable names in repository env config.',\n type: 'array',\n default: [],\n subType: 'string',\n globalOnly: true,\n patternMatch: true,\n mergeable: true,\n },\n {\n name: 'detectGlobalManagerConfig',\n description:\n 'If `true`, Renovate tries to detect global manager configuration from the file system.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'detectHostRulesFromEnv',\n description:\n 'If `true`, Renovate tries to detect host rules from environment variables.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'mergeConfidenceEndpoint',\n description:\n 'If set, Renovate will query this API for Merge Confidence data.',\n stage: 'global',\n type: 'string',\n default: 'https://developer.mend.io/',\n advancedUse: true,\n globalOnly: true,\n },\n {\n name: 'mergeConfidenceDatasources',\n description:\n 'If set, Renovate will query the merge-confidence JSON API only for datasources that are part of this list.',\n stage: 'global',\n allowedValues: supportedDatasources,\n default: supportedDatasources,\n type: 'array',\n subType: 'string',\n globalOnly: true,\n },\n {\n name: 'useCloudMetadataServices',\n description:\n 'If `false`, Renovate does not try to access cloud metadata services.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n cli: false,\n },\n {\n name: 'userAgent',\n description:\n 'If set to any string, Renovate will use this as the `user-agent` it sends with HTTP requests.',\n type: 'string',\n default: null,\n globalOnly: true,\n },\n {\n name: 'allowedCommands',\n description:\n 'A list of regular expressions that decide which commands are allowed in post-upgrade tasks.',\n type: 'array',\n subType: 'string',\n default: [],\n globalOnly: true,\n },\n {\n name: 'bumpVersions',\n description:\n 'A list of bumpVersion config options to bump generic version numbers.',\n type: 'array',\n subType: 'object',\n default: [],\n cli: false,\n env: false,\n experimental: true,\n },\n {\n name: 'bumpType',\n description:\n 'The semver level to use when bumping versions. This is used by the `bumpVersions` feature.',\n type: 'string',\n parents: ['bumpVersions'],\n allowedValues: ['major', 'minor', 'patch', 'sync'],\n },\n {\n name: 'filePatterns',\n description:\n 'A list of patterns to match files that contain the version string.',\n type: 'array',\n subType: 'string',\n parents: ['bumpVersions'],\n },\n {\n name: 'name',\n description:\n 'A name for the bumpVersion config. This is used for logging and debugging.',\n type: 'string',\n parents: ['bumpVersions'],\n },\n {\n name: 'postUpgradeTasks',\n description:\n 'Post-upgrade tasks that are executed before a commit is made by Renovate.',\n type: 'object',\n default: {\n commands: [],\n fileFilters: [],\n executionMode: 'update',\n installTools: {},\n },\n },\n {\n name: 'commands',\n description:\n 'A list of post-upgrade commands that are executed before a commit is made by Renovate.',\n type: 'array',\n subType: 'string',\n parents: ['postUpgradeTasks'],\n default: [],\n cli: false,\n },\n {\n name: 'workingDirTemplate',\n description:\n 'A template describing the working directory in which post-upgrade tasks should be executed.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n cli: false,\n env: false,\n },\n {\n name: 'dataFileTemplate',\n description: 'A template to create post-upgrade command data file from.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n cli: false,\n env: false,\n },\n {\n name: 'fileFilters',\n description:\n 'Files that match the glob pattern will be committed after running a post-upgrade task.',\n type: 'array',\n subType: 'string',\n parents: ['postUpgradeTasks'],\n default: ['**/*'],\n cli: false,\n },\n {\n name: 'installTools',\n description: 'Install tools before executing commands',\n type: 'object',\n parents: ['postUpgradeTasks'],\n default: {},\n additionalProperties: {\n type: 'object',\n properties: {},\n additionalProperties: false,\n },\n mergeable: false,\n freeChoice: true,\n cli: false,\n },\n {\n name: 'format',\n description: 'Format of the custom datasource.',\n type: 'string',\n parents: ['customDatasources'],\n default: 'json',\n allowedValues: ['json', 'plain'],\n cli: false,\n env: false,\n },\n {\n name: 'executionMode',\n description:\n 'Controls when the post upgrade tasks run: on every update, or once per upgrade branch.',\n type: 'string',\n parents: ['postUpgradeTasks'],\n allowedValues: ['update', 'branch'],\n default: 'update',\n cli: false,\n },\n {\n name: 'onboardingBranch',\n description:\n 'Change this value to override the default onboarding branch name.',\n type: 'string',\n default: 'renovate/configure',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingAutoCloseAge',\n description:\n 'Maximum number of days after which Renovate will stop trying to onboard the repository, and will close any existing onboarding PRs',\n type: 'integer',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingCommitMessage',\n description:\n 'Change this value to override the default onboarding commit message.',\n type: 'string',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'configFileNames',\n description: 'List of filenames where repository config will be stored.',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingConfigFileName',\n description:\n 'Change this value to override the default onboarding config file name.',\n type: 'string',\n default: 'renovate.json',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'onboardingNoDeps',\n description: 'Onboard the repository even if no dependencies are found.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'enabled', 'disabled'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingPrTitle',\n description:\n 'Change this value to override the default onboarding PR title.',\n type: 'string',\n default: 'Configure Renovate',\n globalOnly: true,\n inheritConfigSupport: true,\n cli: false,\n },\n {\n name: 'configMigration',\n description: 'Enable this to get config migration PRs when needed.',\n stage: 'repository',\n type: 'boolean',\n default: false,\n experimental: true,\n experimentalDescription:\n 'Config migration PRs are still being improved, in particular to reduce the amount of reordering and whitespace changes.',\n experimentalIssues: [16359],\n },\n {\n name: 'productLinks',\n description: 'Links which are used in PRs, issues and comments.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {\n documentation: 'https://docs.renovatebot.com/',\n help: 'https://github.com/renovatebot/renovate/discussions',\n homepage: 'https://github.com/renovatebot/renovate',\n },\n additionalProperties: {\n type: 'string',\n format: 'uri',\n },\n },\n {\n name: 'secrets',\n description: 'Object which holds secret name/value pairs.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'variables',\n description: 'Object which holds variable name/value pairs.',\n type: 'object',\n globalOnly: true,\n mergeable: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'statusCheckNames',\n description: 'Custom strings to use as status check names.',\n type: 'object',\n mergeable: true,\n advancedUse: true,\n default: {\n artifactError: 'renovate/artifacts',\n configValidation: 'renovate/config-validation',\n mergeConfidence: 'renovate/merge-confidence',\n minimumReleaseAge: 'renovate/stability-days',\n },\n },\n {\n name: 'extends',\n description: 'Configuration presets to use or extend.',\n stage: 'package',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: false,\n },\n {\n name: 'ignorePresets',\n description:\n 'A list of presets to ignore, including any that are nested inside an `extends` array.',\n stage: 'package',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: false,\n },\n {\n name: 'migratePresets',\n description:\n 'Define presets here which have been removed or renamed and should be migrated automatically.',\n type: 'object',\n globalOnly: true,\n default: {},\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'minimumGroupSize',\n description:\n 'The minimum number of updates which must be in a group for branches to be created.',\n type: 'integer',\n default: 1,\n },\n {\n name: 'presetCachePersistence',\n description: 'Cache resolved presets in package cache.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'globalExtends',\n description:\n 'Configuration presets to use or extend for a self-hosted config.',\n type: 'array',\n subType: 'string',\n globalOnly: true,\n },\n {\n name: 'description',\n description: 'Plain text description for a config or preset.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n allowString: true,\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'enabled',\n description: `Enable or disable corresponding functionality.`,\n stage: 'package',\n type: 'boolean',\n default: true,\n parents: [\n '.',\n 'packageRules',\n ...AllManagersListLiteral,\n 'hostRules',\n 'vulnerabilityAlerts',\n ...UpdateTypesOptions,\n ],\n },\n {\n name: 'constraintsFiltering',\n description: 'Perform release filtering based on language constraints.',\n type: 'string',\n allowedValues: ['none', 'strict'],\n cli: false,\n default: 'none',\n },\n {\n name: 'repositoryCache',\n description:\n 'This option decides if Renovate uses a JSON cache to speed up extractions.',\n globalOnly: true,\n type: 'string',\n allowedValues: ['disabled', 'enabled', 'reset'],\n stage: 'repository',\n default: 'disabled',\n },\n {\n name: 'repositoryCacheType',\n description:\n 'Set the type of renovate repository cache if `repositoryCache` is enabled.',\n globalOnly: true,\n type: 'string',\n stage: 'repository',\n default: 'local',\n },\n {\n name: 'repositoryCacheForceLocal',\n description:\n 'If set to `true`, Renovate will persist repository cache locally after uploading to S3.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'reportType',\n description: 'Set how, or if, reports should be generated.',\n globalOnly: true,\n type: 'string',\n default: null,\n experimental: true,\n allowedValues: ['logging', 'file', 's3'],\n },\n {\n name: 'reportPath',\n description:\n 'Path to where the file should be written. In case of `s3` this has to be a full S3 URI.',\n globalOnly: true,\n type: 'string',\n default: null,\n experimental: true,\n },\n {\n name: 'reportFormatting',\n description:\n 'If set to `true`, Renovate will format the report JSON with Prettier before writing.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n experimental: true,\n cli: false,\n },\n {\n name: 'force',\n description:\n 'Any configuration set in this object will force override existing settings.',\n stage: 'package',\n globalOnly: true,\n type: 'object',\n cli: false,\n mergeable: true,\n },\n {\n name: 'forceCli',\n description:\n 'Decides if CLI configuration options are moved to the `force` config section.',\n stage: 'global',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'draftPR',\n description:\n 'If set to `true` then Renovate creates draft PRs, instead of normal status PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gitea',\n 'github',\n 'gitlab',\n 'scm-manager',\n ],\n },\n {\n name: 'dryRun',\n description:\n 'If enabled, perform a dry run by logging messages instead of creating/updating/deleting branches and PRs.',\n type: 'string',\n globalOnly: true,\n allowedValues: ['extract', 'lookup', 'full'],\n default: null,\n },\n {\n name: 'printConfig',\n description:\n 'If enabled, Renovate logs the fully resolved config for each repository, plus the fully resolved presets.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'binarySource',\n description:\n 'Controls how third-party tools like npm or Gradle are called: directly, via Docker sidecar containers, or via dynamic install.',\n globalOnly: true,\n type: 'string',\n allowedValues: ['global', 'docker', 'install', 'hermit'],\n default: 'install',\n },\n {\n name: 'redisUrl',\n description:\n 'If set, this Redis URL will be used for caching instead of the file system.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'redisPrefix',\n description: 'Key prefix for redis cache entries.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'baseDir',\n description:\n 'The base directory for Renovate to store local files, including repository files and cache. If left empty, Renovate will create its own temporary directory to use.',\n stage: 'global',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'cacheDir',\n description:\n 'The directory where Renovate stores its cache. If left empty, Renovate creates a subdirectory within the `baseDir`.',\n globalOnly: true,\n type: 'string',\n },\n {\n name: 'containerbaseDir',\n description:\n 'The directory where Renovate stores its containerbase cache. If left empty, Renovate creates a subdirectory within the `cacheDir`.',\n globalOnly: true,\n type: 'string',\n },\n {\n name: 'customEnvVariables',\n description:\n 'Custom environment variables for child processes and sidecar Docker containers.',\n globalOnly: true,\n type: 'object',\n default: {},\n },\n {\n name: 'env',\n description:\n 'Environment variables that Renovate uses when executing package manager commands.',\n type: 'object',\n default: {},\n },\n {\n name: 'customDatasources',\n description: 'Defines custom datasources for usage by managers.',\n type: 'object',\n experimental: true,\n experimentalIssues: [23286],\n default: {},\n mergeable: true,\n },\n {\n name: 'dockerChildPrefix',\n description:\n 'Change this value to add a prefix to the Renovate Docker sidecar container names and labels.',\n type: 'string',\n globalOnly: true,\n default: 'renovate_',\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerCliOptions',\n description:\n 'Pass CLI flags to `docker run` command when `binarySource=docker`.',\n type: 'string',\n globalOnly: true,\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerSidecarImage',\n description:\n 'Change this value to override the default Renovate sidecar image.',\n type: 'string',\n default: 'ghcr.io/renovatebot/base-image:13.38.0',\n globalOnly: true,\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n },\n {\n name: 'dockerUser',\n description:\n 'Set the `UID` and `GID` for Docker-based binaries if you use `binarySource=docker`.',\n globalOnly: true,\n type: 'string',\n deprecationMsg:\n 'The usage of `binarySource=docker` is deprecated, and will be removed in the future',\n default: '12021',\n },\n {\n name: 'composerIgnorePlatformReqs',\n description:\n 'Configure use of `--ignore-platform-reqs` or `--ignore-platform-req` for the Composer package manager.',\n type: 'array',\n subType: 'string',\n default: [],\n },\n {\n name: 'goGetDirs',\n description: 'Directory pattern to run `go get` on.',\n type: 'array',\n subType: 'string',\n default: ['./...'],\n supportedManagers: ['gomod'],\n },\n // Log options\n {\n name: 'logContext',\n description: 'Add a global or per-repo log context to each log entry.',\n globalOnly: true,\n type: 'string',\n default: null,\n stage: 'global',\n },\n // Onboarding\n {\n name: 'onboarding',\n description: 'Require a Configuration PR first.',\n stage: 'repository',\n type: 'boolean',\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'onboardingConfig',\n description: 'Configuration to use for onboarding PRs.',\n stage: 'repository',\n type: 'object',\n default: { $schema: 'https://docs.renovatebot.com/renovate-schema.json' },\n globalOnly: true,\n inheritConfigSupport: true,\n mergeable: true,\n },\n {\n name: 'onboardingRebaseCheckbox',\n description:\n 'Set to enable rebase/retry markdown checkbox for onboarding PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['forgejo', 'gitea', 'github', 'gitlab'],\n globalOnly: true,\n experimental: true,\n experimentalIssues: [17633],\n },\n {\n name: 'forkProcessing',\n description:\n 'Whether to process forked repositories. By default, all forked repositories are skipped when in `autodiscover` mode.',\n stage: 'repository',\n type: 'string',\n allowedValues: ['auto', 'enabled', 'disabled'],\n default: 'auto',\n },\n {\n name: 'includeMirrors',\n description:\n 'Whether to process repositories that are mirrors. By default, repositories that are mirrors are skipped.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n globalOnly: true,\n },\n {\n name: 'forkCreation',\n description:\n 'Whether to create forks as needed at runtime when running in \"fork mode\".',\n stage: 'repository',\n type: 'boolean',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n default: true,\n },\n {\n name: 'forkToken',\n description: 'Set a personal access token here to enable \"fork mode\".',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n },\n {\n name: 'forkOrg',\n description:\n 'The preferred organization to create or find forked repositories, when in fork mode.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n },\n {\n name: 'githubTokenWarn',\n description: 'Display warnings about GitHub token not being set.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'encryptedWarning',\n description: 'Warning text to use if encrypted config is found.',\n type: 'string',\n globalOnly: true,\n advancedUse: true,\n },\n {\n name: 'inheritConfig',\n description:\n 'If `true`, Renovate will inherit configuration from the `inheritConfigFileName` file in `inheritConfigRepoName`.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'inheritConfigRepoName',\n description:\n 'Renovate will look in this repo for the `inheritConfigFileName`.',\n type: 'string',\n default: '{{parentOrg}}/renovate-config',\n globalOnly: true,\n },\n {\n name: 'inheritConfigFileName',\n description:\n 'Renovate will look for this config file name in the `inheritConfigRepoName`.',\n type: 'string',\n default: 'org-inherited-config.json',\n globalOnly: true,\n },\n {\n name: 'inheritConfigStrict',\n description:\n 'If `true`, any `inheritedConfig` fetch error will result in an aborted run.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'requireConfig',\n description:\n \"Controls Renovate's behavior regarding repository config files such as `renovate.json`.\",\n stage: 'repository',\n type: 'string',\n default: 'required',\n allowedValues: ['required', 'optional', 'ignored'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n {\n name: 'optimizeForDisabled',\n description:\n 'Set to `true` to perform a check for disabled config prior to cloning.',\n stage: 'repository',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n // Dependency Dashboard\n {\n name: 'dependencyDashboard',\n description:\n 'Whether to create a \"Dependency Dashboard\" issue in the repository.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardApproval',\n description:\n 'Controls if updates need manual approval from the Dependency Dashboard issue before PRs are created.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardAutoclose',\n description:\n 'Set to `true` to let Renovate close the Dependency Dashboard issue if there are no more updates.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'dependencyDashboardTitle',\n description: 'Title for the Dependency Dashboard issue.',\n type: 'string',\n default: `Dependency Dashboard`,\n },\n {\n name: 'dependencyDashboardCategory',\n description:\n 'The category to group branches on the Dependency Dashboard issue.',\n type: 'string',\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'dependencyDashboardHeader',\n description:\n 'Any text added here will be placed first in the Dependency Dashboard issue body.',\n type: 'string',\n default:\n 'This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.',\n },\n {\n name: 'dependencyDashboardFooter',\n description:\n 'Any text added here will be placed last in the Dependency Dashboard issue body, with a divider separator before it.',\n type: 'string',\n },\n {\n name: 'dependencyDashboardLabels',\n description:\n 'These labels will always be applied on the Dependency Dashboard issue, even when they have been removed manually.',\n type: 'array',\n subType: 'string',\n default: null,\n },\n {\n name: 'dependencyDashboardOSVVulnerabilitySummary',\n description:\n 'Control if the Dependency Dashboard issue lists CVEs supplied by [osv.dev](https://osv.dev).',\n type: 'string',\n allowedValues: ['none', 'all', 'unresolved'],\n default: 'none',\n experimental: true,\n },\n {\n name: 'configWarningReuseIssue',\n description:\n 'Set this to `true` to make Renovate reuse/reopen an existing closed Config Warning issue, instead of opening a new one each time.',\n type: 'boolean',\n default: false,\n },\n\n // encryption\n {\n name: 'privateKey',\n description: 'Server-side private key.',\n stage: 'repository',\n type: 'string',\n replaceLineReturns: true,\n globalOnly: true,\n },\n {\n name: 'privateKeyOld',\n description: 'Secondary or old private key to try.',\n stage: 'repository',\n type: 'string',\n replaceLineReturns: true,\n globalOnly: true,\n },\n {\n name: 'privateKeyPath',\n description: 'Path to the Server-side private key.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'privateKeyPathOld',\n description: 'Path to the Server-side old private key.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'encrypted',\n description:\n 'An object containing configuration encrypted with project key.',\n stage: 'repository',\n type: 'object',\n default: null,\n },\n // Scheduling\n {\n name: 'timezone',\n description:\n 'Must conform to [IANA Time Zone](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) format.',\n type: 'string',\n },\n {\n name: 'schedule',\n description: 'Limit branch creation to these times of day or week.',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: true,\n env: false,\n default: ['at any time'],\n },\n {\n name: 'automergeSchedule',\n description: 'Limit automerge to these times of day or week.',\n type: 'array',\n subType: 'string',\n allowString: true,\n cli: true,\n env: false,\n default: ['at any time'],\n },\n {\n name: 'updateNotScheduled',\n description:\n 'Whether to update branches when not scheduled. Renovate will not create branches outside of the schedule.',\n stage: 'branch',\n type: 'boolean',\n default: true,\n },\n // Bot administration\n {\n name: 'persistRepoData',\n description:\n 'If set to `true`: keep repository data between runs instead of deleting the data.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'exposeAllEnv',\n description:\n 'Set this to `true` to allow passing of all environment variables to package managers.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowPlugins',\n description:\n 'Set this to `true` if repositories are allowed to run install plugins.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowScripts',\n description:\n 'Set this to `true` if repositories are allowed to run install scripts.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowShellExecutorForPostUpgradeCommands',\n description:\n 'Whether to run commands for `postUpgradeTasks` inside a shell. This has security implications, as it means that they can call out to other commands or access shell variables. It is difficult to craft an `allowedCommands` regex to restrict this.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'allowCustomCrateRegistries',\n description: 'Set this to `true` to allow custom crate registries.',\n globalOnly: true,\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignorePlugins',\n description:\n 'Set this to `true` if `allowPlugins=true` but you wish to skip running plugins when updating lock files.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreScripts',\n description:\n 'Set this to `false` if `allowScripts=true` and you wish to run scripts when updating lock files.',\n type: 'boolean',\n default: true,\n supportedManagers: ['npm', 'bun', 'composer', 'copier'],\n },\n {\n name: 'platform',\n description: 'Platform type of repository.',\n type: 'string',\n allowedValues: [...PLATFORM_HOST_TYPES],\n default: 'github',\n globalOnly: true,\n },\n {\n name: 'endpoint',\n description: 'Custom endpoint to use.',\n type: 'string',\n globalOnly: true,\n default: null,\n },\n {\n name: 'token',\n description: 'Repository Auth Token.',\n stage: 'repository',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'username',\n description: 'Username for authentication.',\n stage: 'repository',\n type: 'string',\n supportedPlatforms: [\n 'azure',\n 'bitbucket',\n 'bitbucket-server',\n 'scm-manager',\n ],\n globalOnly: true,\n },\n {\n name: 'password',\n description: 'Password for authentication.',\n stage: 'repository',\n type: 'string',\n supportedPlatforms: ['azure', 'bitbucket', 'bitbucket-server'],\n globalOnly: true,\n },\n {\n name: 'npmrc',\n description:\n 'String copy of `.npmrc` file. Use `\\\\n` instead of line breaks.',\n stage: 'branch',\n type: 'string',\n },\n {\n name: 'npmrcMerge',\n description:\n 'Whether to merge `config.npmrc` with repo `.npmrc` content if both are found.',\n stage: 'branch',\n type: 'boolean',\n default: false,\n },\n {\n name: 'npmToken',\n description: 'npm token used to authenticate with the default registry.',\n stage: 'branch',\n type: 'string',\n },\n {\n name: 'skipArtifactsUpdate',\n description: \"Skip Renovate's automatic artifact updating.\",\n type: 'boolean',\n default: false,\n },\n {\n name: 'skipInstalls',\n description:\n 'Skip installing modules/dependencies if lock file updating is possible without a full install.',\n type: 'boolean',\n default: null,\n supportedManagers: ['npm'],\n },\n {\n name: 'autodiscover',\n description: 'Autodiscover all repositories.',\n stage: 'global',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'autodiscoverFilter',\n description: 'Filter the list of autodiscovered repositories.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n allowString: true,\n default: null,\n globalOnly: true,\n },\n {\n name: 'autodiscoverNamespaces',\n description:\n 'Filter the list of autodiscovered repositories by namespaces.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['forgejo', 'gitea', 'gitlab'],\n },\n {\n name: 'autodiscoverProjects',\n description:\n 'Filter the list of autodiscovered repositories by project names.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['bitbucket'],\n patternMatch: true,\n },\n {\n name: 'autodiscoverTopics',\n description: 'Filter the list of autodiscovered repositories by topics.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n default: null,\n globalOnly: true,\n supportedPlatforms: ['forgejo', 'gitea', 'github', 'gitlab'],\n },\n {\n name: 'prCommitsPerRunLimit',\n description:\n 'Set the maximum number of commits per Renovate run. By default there is no limit.',\n stage: 'global',\n type: 'integer',\n default: 0,\n globalOnly: true,\n },\n {\n name: 'repositories',\n description: 'List of Repositories.',\n stage: 'global',\n type: 'array',\n subType: 'string',\n cli: false,\n globalOnly: true,\n },\n {\n name: 'baseBranchPatterns',\n description:\n 'List of one or more custom base branches defined as exact strings and/or via regex expressions.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n cli: false,\n },\n {\n name: 'useBaseBranchConfig',\n description:\n 'Whether to read configuration from base branches instead of only the default branch.',\n type: 'string',\n allowedValues: ['merge', 'none'],\n default: 'none',\n },\n {\n name: 'gitAuthor',\n description:\n 'Author to use for Git commits. Must conform to [RFC5322](https://datatracker.ietf.org/doc/html/rfc5322).',\n type: 'string',\n },\n {\n name: 'gitPrivateKey',\n description: 'PGP key to use for signing Git commits.',\n type: 'string',\n cli: false,\n globalOnly: true,\n stage: 'global',\n },\n {\n name: 'gitPrivateKeyPassphrase',\n description: 'Passphrase for the `gitPrivateKey`',\n type: 'string',\n cli: false,\n globalOnly: true,\n stage: 'global',\n },\n {\n name: 'gitIgnoredAuthors',\n description:\n 'Git authors which are ignored by Renovate. Must conform to [RFC5322](https://datatracker.ietf.org/doc/html/rfc5322).',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n },\n {\n name: 'gitTimeout',\n description:\n 'Configure the timeout with a number of milliseconds to wait for a Git task.',\n type: 'integer',\n globalOnly: true,\n default: 0,\n },\n {\n name: 'enabledManagers',\n description:\n 'A list of package managers to enable. Only managers on the list are enabled.',\n type: 'array',\n subType: 'string',\n mergeable: false,\n stage: 'repository',\n },\n {\n name: 'includePaths',\n description: 'Include package files only within these defined paths.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n default: [],\n },\n {\n name: 'ignorePaths',\n description:\n 'Skip any package file whose path matches one of these. Can be a string or glob pattern.',\n type: 'array',\n mergeable: false,\n subType: 'string',\n stage: 'repository',\n default: ['**/node_modules/**', '**/bower_components/**'],\n },\n {\n name: 'excludeCommitPaths',\n description:\n 'A file matching any of these glob patterns will not be committed, even if the file has been updated.',\n type: 'array',\n subType: 'string',\n default: [],\n advancedUse: true,\n },\n {\n name: 'executionTimeout',\n description:\n 'Default execution timeout in minutes for child processes Renovate creates.',\n type: 'integer',\n default: 15,\n globalOnly: true,\n },\n {\n name: 'registryAliases',\n description: 'Aliases for registries.',\n mergeable: true,\n type: 'object',\n default: {},\n additionalProperties: {\n type: 'string',\n },\n supportedManagers: [\n 'ansible',\n 'bitbucket-pipelines',\n 'buildpacks',\n 'crossplane',\n 'crow',\n 'devcontainer',\n 'docker-compose',\n 'dockerfile',\n 'droneci',\n 'gitlabci',\n 'helm-requirements',\n 'helmfile',\n 'helmv3',\n 'kubernetes',\n 'kustomize',\n 'maven',\n 'terraform',\n 'vendir',\n 'woodpecker',\n ],\n },\n {\n name: 'defaultRegistryUrls',\n description:\n 'List of registry URLs to use as the default for a datasource.',\n type: 'array',\n subType: 'string',\n default: null,\n stage: 'branch',\n cli: false,\n env: false,\n },\n {\n name: 'defaultRegistryUrlTemplate',\n description:\n 'Template for generating a `defaultRegistryUrl` for custom datasource.',\n type: 'string',\n default: '',\n parents: ['customDatasources'],\n cli: false,\n env: false,\n },\n {\n name: 'registryUrls',\n description:\n 'List of URLs to try for dependency lookup. Package manager specific.',\n type: 'array',\n subType: 'string',\n default: null,\n stage: 'branch',\n cli: false,\n env: false,\n },\n {\n name: 'extractVersion',\n description:\n \"A regex (`re2`) to extract a version from a datasource's raw version string.\",\n type: 'string',\n format: 'regex',\n cli: false,\n env: false,\n },\n {\n name: 'versionCompatibility',\n description:\n 'A regex (`re2`) with named capture groups to show how version and compatibility are split from a raw version string.',\n type: 'string',\n format: 'regex',\n cli: false,\n env: false,\n },\n {\n name: 'versioning',\n description: 'Versioning to use for filtering and comparisons.',\n type: 'string',\n allowedValues: getVersioningList(),\n cli: false,\n env: false,\n },\n {\n name: 'azureWorkItemId',\n description:\n 'The id of an existing work item on Azure Boards to link to each PR.',\n type: 'integer',\n default: 0,\n supportedPlatforms: ['azure'],\n },\n {\n name: 'autoApprove',\n description: 'Set to `true` to automatically approve PRs.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['azure', 'gerrit', 'gitlab'],\n },\n // depType\n {\n name: 'ignoreDeps',\n description: 'Dependencies to ignore.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n mergeable: true,\n },\n {\n name: 'updateInternalDeps',\n description:\n 'Whether to update internal dep versions in a monorepo. Works on Yarn Workspaces.',\n type: 'boolean',\n default: false,\n stage: 'package',\n },\n {\n name: 'packageRules',\n description: 'Rules for matching packages.',\n type: 'array',\n stage: 'package',\n mergeable: true,\n },\n {\n name: 'matchCurrentAge',\n description:\n 'Matches the current age of the package derived from its release timestamp. Valid only within a `packageRules` object.',\n type: 'string',\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCategories',\n description:\n 'List of categories to match (for example: `[\"python\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchRepositories',\n description:\n 'List of repositories to match (e.g. `[\"**/*-archived\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n patternMatch: true,\n },\n {\n name: 'matchBaseBranches',\n description:\n 'List of strings containing exact matches (e.g. `[\"main\"]`) and/or regex expressions (e.g. `[\"/^release/.*/\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchManagers',\n description:\n 'List of package managers to match (e.g. `[\"pipenv\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n patternMatch: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDatasources',\n description:\n 'List of datasources to match (e.g. `[\"orb\"]`). Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDepTypes',\n description:\n 'List of depTypes to match (e.g. [`peerDependencies`]). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n parents: ['packageRules'],\n stage: 'package',\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchPackageNames',\n description:\n 'Package names to match. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchDepNames',\n description:\n 'Dep names to match. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCurrentValue',\n description:\n 'A regex or glob pattern to match against the raw `currentValue` string of a dependency. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchCurrentVersion',\n description:\n 'A version, or range of versions, to match against the current version of a package. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchNewValue',\n description:\n 'A regex or glob pattern to match against the raw `newValue` string of a dependency. Valid only within a `packageRules` object.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'sourceUrl',\n description: 'The source URL of the package.',\n type: 'string',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'sourceDirectory',\n description:\n 'The source directory in which the package is present at its source.',\n type: 'string',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchSourceUrls',\n description:\n 'A list of exact match URLs (or URL patterns) to match sourceUrl against.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchRegistryUrls',\n description:\n 'A list of URLs (or URL patterns) to match against registryUrls.',\n type: 'array',\n subType: 'string',\n allowString: true,\n stage: 'package',\n patternMatch: true,\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'autoReplaceGlobalMatch',\n description:\n 'Control whether replacement regular expressions are global matches or only the first match.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'replacementName',\n description:\n 'The name of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementNameTemplate',\n description: 'Controls what the replacement package name.',\n type: 'string',\n default: '{{{packageName}}}',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementVersion',\n description:\n 'The version of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementVersionTemplate',\n description:\n 'Template field for the version of the new dependency that replaces the old deprecated dependency.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'replacementApproach',\n description:\n 'Select whether to perform a direct replacement or alias replacement.',\n type: 'string',\n stage: 'branch',\n allowedValues: ['replace', 'alias'],\n supportedManagers: ['npm'],\n default: 'replace',\n },\n {\n name: 'matchConfidence',\n description:\n 'Merge confidence levels to match against (`low`, `neutral`, `high`, `very high`). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowedValues: ['low', 'neutral', 'high', 'very high'],\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchUpdateTypes',\n description:\n 'Update types to match against (`major`, `minor`, `pin`, `pinDigest`, etc). Valid only within `packageRules` object.',\n type: 'array',\n subType: 'string',\n allowedValues: [\n 'major',\n 'minor',\n 'patch',\n 'pin',\n 'pinDigest',\n 'digest',\n 'lockFileMaintenance',\n 'rollback',\n 'bump',\n 'replacement',\n ],\n allowString: true,\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n {\n name: 'matchFileNames',\n description:\n 'List of strings to do an exact match against package and lock files with full path. Only works inside a `packageRules` object.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchJsonata',\n description:\n 'A JSONata expression to match against the full config object. Valid only within a `packageRules` object.',\n type: 'array',\n subType: 'string',\n stage: 'package',\n parents: ['packageRules'],\n mergeable: true,\n cli: false,\n env: false,\n },\n // Version behavior\n {\n name: 'allowedVersions',\n description:\n 'A version range or regex pattern capturing allowed versions for dependencies.',\n type: 'string',\n parents: ['packageRules'],\n stage: 'package',\n cli: false,\n env: false,\n },\n {\n name: 'changelogUrl',\n description:\n 'Set a custom URL for the changelog. Renovate will put this URL in the PR body text.',\n type: 'string',\n stage: 'pr',\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'pinDigests',\n description: 'Whether to add digests to Dockerfile source images.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'separateMajorMinor',\n description:\n 'If set to `false`, Renovate will upgrade dependencies to their latest release only. Renovate will not separate major or minor branches.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'separateMultipleMajor',\n description:\n 'If set to `true`, PRs will be raised separately for each available `major` upgrade version.',\n stage: 'package',\n type: 'boolean',\n default: false,\n },\n {\n name: 'separateMultipleMinor',\n description:\n 'If set to `true`, Renovate creates separate PRs for each `minor` stream.',\n stage: 'package',\n type: 'boolean',\n default: false,\n experimental: true,\n },\n {\n name: 'separateMinorPatch',\n description:\n 'If set to `true`, Renovate will separate `minor` and `patch` updates into separate branches.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreUnstable',\n description: 'Ignore versions with unstable SemVer.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'ignoreDeprecated',\n description:\n 'Avoid upgrading from a non-deprecated version to a deprecated one.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'followTag',\n description: 'If defined, packages will follow this release tag exactly.',\n stage: 'package',\n type: 'string',\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'maxMajorIncrement',\n description:\n 'Limit the maximum major version increment allowed. Set to 0 to disable.',\n stage: 'package',\n type: 'integer',\n default: 500,\n cli: false,\n env: false,\n },\n {\n name: 'respectLatest',\n description: 'Ignore versions newer than npm \"latest\" version.',\n stage: 'package',\n type: 'boolean',\n default: true,\n },\n {\n name: 'rangeStrategy',\n description: 'Determines how to modify or update existing ranges.',\n type: 'string',\n default: 'auto',\n allowedValues: [\n 'auto',\n 'pin',\n 'bump',\n 'replace',\n 'widen',\n 'update-lockfile',\n 'in-range-only',\n ],\n cli: false,\n env: false,\n },\n {\n name: 'branchPrefix',\n description: 'Prefix to use for all branch names.',\n stage: 'branch',\n type: 'string',\n default: `renovate/`,\n },\n {\n name: 'branchPrefixOld',\n description: 'Old branchPrefix value to check for existing PRs.',\n stage: 'branch',\n type: 'string',\n default: `renovate/`,\n },\n {\n name: 'bumpVersion',\n description: 'Bump the version in the package file being updated.',\n type: 'string',\n allowedValues: ['major', 'minor', 'patch', 'prerelease'],\n supportedManagers: ['helmv3', 'npm', 'nuget', 'maven', 'sbt'],\n },\n // Major/Minor/Patch\n {\n name: 'major',\n description: 'Configuration to apply when an update type is `major`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'minor',\n description: 'Configuration to apply when an update type is `minor`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'patch',\n description: 'Configuration to apply when an update type is `patch`.',\n stage: 'package',\n type: 'object',\n default: {},\n cli: false,\n mergeable: true,\n },\n {\n name: 'pin',\n description: 'Configuration to apply when an update type is `pin`.',\n stage: 'package',\n type: 'object',\n default: {\n rebaseWhen: 'behind-base-branch',\n groupName: 'Pin Dependencies',\n groupSlug: 'pin-dependencies',\n commitMessageAction: 'Pin',\n group: {\n commitMessageTopic: 'dependencies',\n commitMessageExtra: '',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'digest',\n description:\n 'Configuration to apply when updating a digest (no change in tag/version).',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-digest',\n commitMessageExtra: 'to {{newDigestShort}}',\n commitMessageTopic: '{{{depName}}} digest',\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'pinDigest',\n description:\n 'Configuration to apply when pinning a digest (no change in tag/version).',\n stage: 'package',\n type: 'object',\n default: {\n groupName: 'Pin Dependencies',\n groupSlug: 'pin-dependencies',\n commitMessageAction: 'Pin',\n group: {\n commitMessageTopic: 'dependencies',\n commitMessageExtra: '',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'rollback',\n description: 'Configuration to apply when rolling back a version.',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-rollback',\n commitMessageAction: 'Roll back',\n semanticCommitType: 'fix',\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'replacement',\n description: 'Configuration to apply when replacing a dependency.',\n stage: 'package',\n type: 'object',\n default: {\n branchTopic: '{{{depNameSanitized}}}-replacement',\n commitMessageAction: 'Replace',\n commitMessageExtra:\n 'with {{newName}} {{#if isMajor}}{{{prettyNewMajor}}}{{else}}{{#if isSingleVersion}}{{{prettyNewVersion}}}{{else}}{{{newValue}}}{{/if}}{{/if}}',\n prBodyNotes: [\n 'This is a special PR that replaces `{{{depName}}}` with the community suggested minimal stable replacement version.',\n ],\n },\n cli: false,\n mergeable: true,\n },\n // Semantic commit / Semantic release\n {\n name: 'semanticCommits',\n description: 'Enable Semantic Commit prefixes for commits and PR titles.',\n type: 'string',\n allowedValues: ['auto', 'enabled', 'disabled'],\n default: 'auto',\n },\n {\n name: 'semanticCommitType',\n description: 'Commit type to use if Semantic Commits is enabled.',\n type: 'string',\n default: 'chore',\n },\n {\n name: 'semanticCommitScope',\n description: 'Commit scope to use if Semantic Commits are enabled.',\n type: 'string',\n default: 'deps',\n },\n {\n name: 'commitMessageLowerCase',\n description: 'Lowercase PR- and commit titles.',\n type: 'string',\n allowedValues: ['auto', 'never'],\n default: 'auto',\n },\n // PR Behavior\n {\n name: 'keepUpdatedLabel',\n description:\n 'If set, users can add this label to PRs to request they be kept updated with the base branch.',\n type: 'string',\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'rollbackPrs',\n description:\n 'Create PRs to roll back versions if the current version is not found in the registry.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'recreateWhen',\n description: 'Recreate PRs even if same ones were closed previously.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'always', 'never'],\n },\n {\n name: 'rebaseWhen',\n description: 'Controls when Renovate rebases an existing branch.',\n type: 'string',\n allowedValues: [\n 'auto',\n 'never',\n 'conflicted',\n 'behind-base-branch',\n 'automerging',\n ],\n default: 'auto',\n },\n {\n name: 'rebaseLabel',\n description: 'Label to request a rebase from Renovate bot.',\n type: 'string',\n default: 'rebase',\n },\n {\n name: 'stopUpdatingLabel',\n description: 'Label to make Renovate stop updating a PR.',\n type: 'string',\n default: 'stop-updating',\n supportedPlatforms: [\n 'azure',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'minimumReleaseAge',\n description: 'Time required before a new release is considered stable.',\n type: 'string',\n default: null,\n },\n {\n name: 'minimumReleaseAgeBehaviour',\n description:\n 'When set in conjunction with `minimumReleaseAge`, controls whether the `releaseTimestamp` for a dependency update is required.',\n type: 'string',\n default: 'timestamp-required',\n allowedValues: ['timestamp-required', 'timestamp-optional'],\n },\n {\n name: 'abandonmentThreshold',\n description:\n 'Flags packages that have not been updated within this period as abandoned.',\n type: 'string',\n default: null,\n },\n {\n name: 'dependencyDashboardReportAbandonment',\n description:\n 'Controls whether abandoned packages are reported in the dependency dashboard.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'internalChecksAsSuccess',\n description:\n 'Whether to consider passing internal checks such as `minimumReleaseAge` when determining branch status.',\n type: 'boolean',\n default: false,\n },\n /*\n * Undocumented experimental feature\n {\n name: 'minimumConfidence',\n description:\n 'Minimum Merge confidence level to filter by. Requires authentication to work.',\n type: 'string',\n allowedValues: ['low', 'neutral', 'high', 'very high'],\n default: 'low',\n },\n */\n {\n name: 'internalChecksFilter',\n description: 'When and how to filter based on internal checks.',\n type: 'string',\n allowedValues: ['strict', 'flexible', 'none'],\n default: 'strict',\n },\n {\n name: 'processEnv',\n description: 'Environment variables to be used in global config only.',\n type: 'object',\n default: {},\n globalOnly: true,\n stage: 'global',\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'prCreation',\n description: 'When to create the PR for a branch.',\n type: 'string',\n allowedValues: ['immediate', 'not-pending', 'status-success', 'approval'],\n default: 'immediate',\n },\n {\n name: 'prNotPendingHours',\n description: 'Timeout in hours for when `prCreation=not-pending`.',\n type: 'integer',\n default: 25,\n },\n {\n name: 'commitHourlyLimit',\n description: 'Rate limit commits to maximum x per hour. 0 means no limit.',\n type: 'integer',\n default: 0,\n },\n {\n name: 'prHourlyLimit',\n description:\n 'Rate limit PRs to maximum x created per hour. 0 means no limit.',\n type: 'integer',\n default: 2,\n },\n {\n name: 'prConcurrentLimit',\n description:\n 'Limit to a maximum of x concurrent branches/PRs. 0 means no limit.',\n type: 'integer',\n default: 10,\n },\n {\n name: 'branchConcurrentLimit',\n description:\n 'Limit to a maximum of x concurrent branches. 0 means no limit, `null` (default) inherits value from `prConcurrentLimit`.',\n type: 'integer',\n default: null, // inherit prConcurrentLimit\n },\n {\n name: 'prPriority',\n description:\n 'Set sorting priority for PR creation. PRs with higher priority are created first, negative priority last.',\n type: 'integer',\n allowNegative: true,\n default: 0,\n parents: ['packageRules'],\n cli: false,\n env: false,\n },\n {\n name: 'overrideDatasource',\n description: 'Override the datasource value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'overrideDepName',\n description: 'Override the depName value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'overridePackageName',\n description: 'Override the packageName value.',\n type: 'string',\n stage: 'package',\n parents: ['packageRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'bbAutoResolvePrTasks',\n description:\n 'The PR tasks will be automatically completed after the PR is raised.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['bitbucket'],\n },\n {\n name: 'bbUseDefaultReviewers',\n description: 'Use the default reviewers (Bitbucket only).',\n type: 'boolean',\n default: true,\n supportedPlatforms: ['bitbucket', 'bitbucket-server'],\n },\n {\n name: 'bbUseDevelopmentBranch',\n description: `Use the repository's [development branch](https://support.atlassian.com/bitbucket-cloud/docs/branch-a-repository/#The-branching-model) as the repository's default branch.`,\n type: 'boolean',\n default: false,\n supportedPlatforms: ['bitbucket'],\n globalOnly: true,\n inheritConfigSupport: true,\n },\n // Automatic merging\n {\n name: 'automerge',\n description:\n 'Whether to automerge branches/PRs automatically, without human intervention.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'automergeType',\n description: 'How to automerge, if enabled.',\n type: 'string',\n allowedValues: ['branch', 'pr', 'pr-comment'],\n default: 'pr',\n },\n {\n name: 'automergeStrategy',\n description:\n 'The merge strategy to use when automerging PRs. Used only if `automergeType=pr`.',\n type: 'string',\n allowedValues: [\n 'auto',\n 'fast-forward',\n 'merge-commit',\n 'rebase',\n 'rebase-merge',\n 'squash',\n ],\n default: 'auto',\n supportedPlatforms: ['azure', 'bitbucket', 'forgejo', 'gitea', 'github'],\n },\n {\n name: 'automergeComment',\n description:\n 'PR comment to add to trigger automerge. Only used if `automergeType=pr-comment`.',\n type: 'string',\n default: 'automergeComment',\n },\n {\n name: 'ignoreTests',\n description: 'Set to `true` to enable automerging without tests.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'transformTemplates',\n description: 'List of jsonata transformation rules.',\n type: 'array',\n subType: 'string',\n parents: ['customDatasources'],\n default: [],\n },\n {\n name: 'vulnerabilityAlerts',\n description:\n 'Config to apply when a PR is needed due to a vulnerability in the existing package version.',\n type: 'object',\n default: {\n groupName: null,\n schedule: [],\n dependencyDashboardApproval: false,\n minimumReleaseAge: null,\n rangeStrategy: 'update-lockfile',\n commitMessageSuffix: '[SECURITY]',\n branchTopic: `{{{datasource}}}-{{{depNameSanitized}}}-vulnerability`,\n prCreation: 'immediate',\n vulnerabilityFixStrategy: 'lowest',\n },\n mergeable: true,\n cli: false,\n env: false,\n supportedPlatforms: ['github'],\n },\n {\n name: 'vulnerabilityFixStrategy',\n description:\n 'Strategy to use when fixing vulnerabilities. `lowest` will propose the earliest version with a fix, `highest` will always pick the latest version.',\n type: 'string',\n allowedValues: ['lowest', 'highest'],\n default: 'lowest',\n parents: ['vulnerabilityAlerts'],\n },\n {\n name: 'osvVulnerabilityAlerts',\n description: 'Use vulnerability alerts from `osv.dev`.',\n type: 'boolean',\n default: false,\n experimental: true,\n experimentalIssues: [20542],\n },\n {\n name: 'pruneBranchAfterAutomerge',\n description: 'Set to `true` to enable branch pruning after automerging.',\n type: 'boolean',\n default: true,\n },\n // Default templates\n {\n name: 'branchName',\n description: 'Branch name template.',\n type: 'string',\n default: '{{{branchPrefix}}}{{{additionalBranchPrefix}}}{{{branchTopic}}}',\n deprecationMsg:\n 'We strongly recommended that you avoid configuring this field directly. Please edit `branchPrefix`, `additionalBranchPrefix`, or `branchTopic` instead.',\n cli: false,\n },\n {\n name: 'additionalBranchPrefix',\n description: 'Additional string value to be appended to `branchPrefix`.',\n type: 'string',\n default: '',\n cli: false,\n },\n {\n name: 'branchTopic',\n description: 'Branch topic.',\n type: 'string',\n default:\n '{{{depNameSanitized}}}-{{{newMajor}}}{{#if separateMinorPatch}}{{#if isPatch}}.{{{newMinor}}}{{/if}}{{/if}}{{#if separateMultipleMinor}}{{#if isMinor}}.{{{newMinor}}}{{/if}}{{/if}}.x{{#if isLockfileUpdate}}-lockfile{{/if}}',\n cli: false,\n },\n {\n name: 'commitMessage',\n description: 'Message to use for commit messages and pull request titles.',\n type: 'string',\n default:\n '{{{commitMessagePrefix}}} {{{commitMessageAction}}} {{{commitMessageTopic}}} {{{commitMessageExtra}}} {{{commitMessageSuffix}}}',\n deprecationMsg:\n 'We deprecated editing the `commitMessage` directly, and we recommend you stop using this config option. Instead use config options like `commitMessageAction`, `commitMessageExtra`, and so on, to create the commit message you want.',\n cli: false,\n },\n {\n name: 'commitBody',\n description:\n 'Commit message body template. Will be appended to commit message, separated by two line returns.',\n type: 'string',\n cli: false,\n },\n {\n name: 'commitBodyTable',\n description:\n 'If enabled, append a table in the commit message body describing all updates in the commit.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'commitMessagePrefix',\n description:\n 'Prefix to add to start of commit messages and PR titles. Uses a semantic prefix if `semanticCommits` is enabled.',\n type: 'string',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageAction',\n description: 'Action verb to use in commit messages and PR titles.',\n type: 'string',\n default: 'Update',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageTopic',\n description:\n 'The upgrade topic/noun used in commit messages and PR titles.',\n type: 'string',\n default: 'dependency {{depName}}',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageExtra',\n description:\n 'Extra description used after the commit message topic - typically the version.',\n type: 'string',\n default:\n 'to {{#if isPinDigest}}{{{newDigestShort}}}{{else}}{{#if isMajor}}{{prettyNewMajor}}{{else}}{{#if isSingleVersion}}{{prettyNewVersion}}{{else}}{{#if newValue}}{{{newValue}}}{{else}}{{{newDigestShort}}}{{/if}}{{/if}}{{/if}}{{/if}}',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'commitMessageSuffix',\n description: 'Suffix to add to end of commit messages and PR titles.',\n type: 'string',\n cli: false,\n advancedUse: true,\n },\n {\n name: 'prBodyTemplate',\n description:\n 'Pull Request body template. Controls which sections are rendered in the body of the pull request.',\n type: 'string',\n default:\n '{{{header}}}{{{table}}}{{{warnings}}}{{{notes}}}{{{changelogs}}}{{{configDescription}}}{{{controls}}}{{{footer}}}',\n cli: false,\n },\n {\n name: 'prTitle',\n description:\n 'Pull Request title template. Inherits from `commitMessage` if null.',\n type: 'string',\n default: null,\n deprecationMsg:\n 'Direct editing of `prTitle` is now deprecated. Instead use config options like `commitMessageAction`, `commitMessageExtra`, and so on, as they will be passed through to `prTitle`.',\n cli: false,\n },\n {\n name: 'prTitleStrict',\n description:\n 'Whether to bypass appending extra context to the Pull Request title.',\n type: 'boolean',\n default: false,\n experimental: true,\n cli: false,\n },\n {\n name: 'prHeader',\n description: 'Text added here will be placed first in the PR body.',\n type: 'string',\n },\n {\n name: 'prFooter',\n description:\n 'Text added here will be placed last in the PR body, with a divider separator before it.',\n type: 'string',\n default: `This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).`,\n },\n {\n name: 'customizeDashboard',\n description: 'Customize sections in the Dependency Dashboard issue.',\n type: 'object',\n default: {},\n freeChoice: true,\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'lockFileMaintenance',\n description: 'Configuration for lock file maintenance.',\n stage: 'branch',\n type: 'object',\n default: {\n enabled: false,\n recreateWhen: 'always',\n rebaseStalePrs: true,\n branchTopic: 'lock-file-maintenance',\n commitMessageAction: 'Lock file maintenance',\n commitMessageTopic: null,\n commitMessageExtra: null,\n schedule: ['before 4am on monday'],\n groupName: null,\n prBodyDefinitions: {\n Change: 'All locks refreshed',\n },\n },\n cli: false,\n mergeable: true,\n },\n {\n name: 'hashedBranchLength',\n description:\n 'If enabled, branch names will use a hashing function to ensure each branch has that length.',\n type: 'integer',\n default: null,\n cli: false,\n },\n // Dependency Groups\n {\n name: 'groupName',\n description: 'Human understandable name for the dependency group.',\n type: 'string',\n default: null,\n },\n {\n name: 'groupSlug',\n description:\n 'Slug to use for group (e.g. in branch name). Slug is calculated from `groupName` if `null`.',\n type: 'string',\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'group',\n description: 'Config if `groupName` is enabled.',\n type: 'object',\n default: {\n branchTopic: '{{{groupSlug}}}',\n commitMessageTopic: '{{{groupName}}}',\n },\n cli: false,\n env: false,\n mergeable: true,\n advancedUse: true,\n },\n // Pull Request options\n {\n name: 'labels',\n description: 'Labels to set in Pull Request.',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'addLabels',\n description: 'Labels to add to Pull Request.',\n type: 'array',\n subType: 'string',\n mergeable: true,\n },\n {\n name: 'assignees',\n description:\n 'Assignees for Pull Request (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'assigneesFromCodeOwners',\n description:\n 'Determine assignees based on configured code owners and changes in PR.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'expandCodeOwnersGroups',\n description:\n 'Expand the configured code owner groups into a full list of group members.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'assigneesSampleSize',\n description: 'Take a random sample of given size from `assignees`.',\n type: 'integer',\n default: null,\n },\n {\n name: 'assignAutomerge',\n description:\n 'Assign reviewers and assignees even if the PR is to be automerged.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'ignoreReviewers',\n description:\n 'Reviewers to be ignored in PR reviewers presence (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'reviewers',\n description:\n 'Requested reviewers for Pull Requests (either username or email address depending on the platform).',\n type: 'array',\n subType: 'string',\n },\n {\n name: 'reviewersFromCodeOwners',\n description:\n 'Determine reviewers based on configured code owners and changes in PR.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'filterUnavailableUsers',\n description: 'Filter reviewers and assignees based on their availability.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'forkModeDisallowMaintainerEdits',\n description:\n 'Disallow maintainers to push to Renovate pull requests when running in fork mode.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['github'],\n },\n {\n name: 'confidential',\n description:\n 'If enabled, issues created by Renovate are set as confidential.',\n type: 'boolean',\n default: false,\n supportedPlatforms: ['gitlab'],\n },\n {\n name: 'reviewersSampleSize',\n description: 'Take a random sample of given size from `reviewers`.',\n type: 'integer',\n default: null,\n },\n {\n name: 'additionalReviewers',\n description:\n 'Additional reviewers for Pull Requests (in contrast to `reviewers`, this option adds to the existing reviewer list, rather than replacing it).',\n type: 'array',\n subType: 'string',\n mergeable: true,\n },\n {\n name: 'managerFilePatterns',\n description: 'RegEx (`re2`) and glob patterns for matching manager files.',\n type: 'array',\n subType: 'string',\n stage: 'repository',\n allowString: true,\n patternMatch: true,\n mergeable: true,\n cli: false,\n env: false,\n parents: [...AllManagersListLiteral, 'customManagers'],\n },\n {\n name: 'postUpdateOptions',\n description:\n 'Enable post-update options to be run after package/artifact updating.',\n type: 'array',\n default: [],\n subType: 'string',\n allowedValues: [\n 'bundlerConservative',\n 'composerWithAll',\n 'composerNoMinimalChanges',\n 'dotnetWorkloadRestore',\n 'gomodMassage',\n 'gomodTidy',\n 'gomodTidy1.17',\n 'gomodTidyE',\n 'gomodUpdateImportPaths',\n 'gomodSkipVendor',\n 'gomodVendor',\n 'goGenerate',\n 'helmUpdateSubChartArchives',\n 'kustomizeInflateHelmCharts',\n 'npmDedupe',\n 'npmInstallTwice',\n 'pnpmDedupe',\n 'yarnDedupeFewer',\n 'yarnDedupeHighest',\n ],\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'constraints',\n description:\n 'Configuration object to define language or manager version constraints.',\n type: 'object',\n default: {},\n mergeable: true,\n cli: false,\n supportedManagers: [\n 'bundler',\n 'composer',\n 'gomod',\n 'npm',\n 'pep621',\n 'pipenv',\n 'poetry',\n ],\n freeChoice: true,\n additionalProperties: {\n type: 'string',\n },\n },\n {\n name: 'hostRules',\n description: 'Host rules/configuration including credentials.',\n type: 'array',\n subType: 'object',\n stage: 'repository',\n cli: true,\n mergeable: true,\n },\n {\n name: 'hostType',\n description:\n 'hostType for a package rule. Can be a platform name or a datasource name.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'matchHost',\n description: 'A domain name, host name or base URL to match against.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'readOnly',\n description:\n 'Match against requests that only read data and do not mutate anything.',\n type: 'boolean',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'timeout',\n description: 'Timeout (in milliseconds) for queries to external endpoints.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'insecureRegistry',\n description: 'Explicitly turn on insecure Docker registry access (HTTP).',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'abortOnError',\n description:\n 'If enabled, Renovate aborts its run when HTTP request errors occur.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'abortIgnoreStatusCodes',\n description:\n 'A list of HTTP status codes safe to ignore even when `abortOnError=true`.',\n type: 'array',\n subType: 'number',\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'enableHttp2',\n description: 'Enable got HTTP/2 support.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'concurrentRequestLimit',\n description: 'Limit concurrent requests per host.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'maxRequestsPerSecond',\n description: 'Limit requests rate per host.',\n type: 'integer',\n stage: 'repository',\n parents: ['hostRules'],\n default: 0,\n cli: false,\n env: false,\n },\n {\n name: 'authType',\n description:\n 'Authentication type for HTTP header. e.g. `\"Bearer\"` or `\"Basic\"`. Use `\"Token-Only\"` to use only the token without an authorization type.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: 'Bearer',\n cli: false,\n env: false,\n },\n {\n name: 'dnsCache',\n description: 'Enable got DNS cache.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n experimental: true,\n deprecationMsg:\n 'This option is deprecated and will be removed in a future release.',\n },\n {\n name: 'keepAlive',\n description: 'Enable HTTP keep-alive for hosts.',\n type: 'boolean',\n default: false,\n stage: 'repository',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'headers',\n description:\n 'Put fields to be forwarded to the HTTP request headers in the headers config option.',\n type: 'object',\n parents: ['hostRules'],\n cli: false,\n env: false,\n advancedUse: true,\n },\n {\n name: 'artifactAuth',\n description:\n 'A list of package managers to enable artifact auth. Only managers on the list are enabled. All are enabled if `null`.',\n experimental: true,\n type: 'array',\n subType: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n allowedValues: ['composer'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsCertificateAuthority',\n description: 'The overriding trusted CA certificate.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsPrivateKey',\n description: 'The private key in PEM format.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'httpsCertificate',\n description: 'The certificate chains in PEM format.',\n type: 'string',\n stage: 'repository',\n parents: ['hostRules'],\n default: null,\n cli: false,\n env: false,\n },\n {\n name: 'cacheHardTtlMinutes',\n description:\n 'Maximum duration in minutes to keep datasource cache entries.',\n type: 'integer',\n stage: 'repository',\n default: 7 * 24 * 60,\n globalOnly: true,\n },\n {\n name: 'cacheTtlOverride',\n description: 'An object that contains cache namespace TTL override values.',\n type: 'object',\n stage: 'repository',\n default: {},\n globalOnly: true,\n experimental: true,\n advancedUse: true,\n },\n {\n name: 'prBodyDefinitions',\n description: 'Table column definitions to use in PR tables.',\n type: 'object',\n freeChoice: true,\n mergeable: true,\n default: {\n Package:\n '{{{depNameLinked}}}{{#if newName}}{{#unless (equals depName newName)}} → {{{newNameLinked}}}{{/unless}}{{/if}}',\n Type: '{{{depType}}}',\n Update: '{{{updateType}}}',\n 'Current value': '{{{currentValue}}}',\n 'New value': '{{{newValue}}}',\n Change: '`{{{displayFrom}}}` → `{{{displayTo}}}`',\n Pending: '{{{displayPending}}}',\n References: '{{{references}}}',\n 'Package file': '{{{packageFile}}}',\n Age: \"{{#if newVersion}}{{/if}}\",\n\n Adoption:\n \"{{#if newVersion}}{{/if}}\",\n\n Passing:\n \"{{#if newVersion}}{{/if}}\",\n\n Confidence:\n \"{{#if newVersion}}{{/if}}\",\n },\n },\n {\n name: 'prBodyHeadingDefinitions',\n description: 'Table header definitions to use in PR tables.',\n type: 'object',\n freeChoice: true,\n mergeable: true,\n default: {\n Age: '[Age](https://docs.renovatebot.com/merge-confidence/)',\n Adoption: '[Adoption](https://docs.renovatebot.com/merge-confidence/)',\n Passing: '[Passing](https://docs.renovatebot.com/merge-confidence/)',\n Confidence:\n '[Confidence](https://docs.renovatebot.com/merge-confidence/)',\n },\n },\n {\n name: 'prBodyColumns',\n description: 'List of columns to use in PR bodies.',\n type: 'array',\n subType: 'string',\n default: ['Package', 'Type', 'Update', 'Change', 'Pending'],\n },\n {\n name: 'prBodyNotes',\n description:\n 'List of extra notes or templates to include in the Pull Request body.',\n type: 'array',\n subType: 'string',\n default: [],\n allowString: true,\n mergeable: true,\n },\n {\n name: 'suppressNotifications',\n description:\n 'Options to suppress various types of warnings and other notifications.',\n type: 'array',\n subType: 'string',\n default: [],\n allowedValues: [\n 'artifactErrors',\n 'branchAutomergeFailure',\n 'configErrorIssue',\n 'dependencyLookupWarnings',\n 'lockFileErrors',\n 'missingCredentialsError',\n 'onboardingClose',\n 'prEditedNotification',\n 'prIgnoreNotification',\n ],\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'pruneStaleBranches',\n description: 'Set to `false` to disable pruning stale branches.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'unicodeEmoji',\n description: 'Enable or disable Unicode emoji.',\n type: 'boolean',\n default: true,\n globalOnly: true,\n },\n {\n name: 'gitLabIgnoreApprovals',\n description: `Ignore approval rules for MRs created by Renovate, which is useful for automerge.`,\n type: 'boolean',\n default: false,\n },\n {\n name: 'customManagers',\n description: 'Custom managers using regex matching.',\n type: 'array',\n subType: 'object',\n default: [],\n stage: 'package',\n cli: true,\n mergeable: true,\n },\n {\n name: 'customType',\n description:\n 'Custom manager to use. Valid only within a `customManagers` object.',\n type: 'string',\n allowedValues: ['jsonata', 'regex'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'fileFormat',\n description:\n 'It specifies the syntax of the package file being managed by the custom JSONata manager.',\n type: 'string',\n allowedValues: ['json', 'toml', 'yaml'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n requiredIf: [\n {\n siblingProperties: [\n {\n property: 'customType',\n value: 'jsonata',\n },\n ],\n },\n ],\n },\n {\n name: 'matchStrings',\n description:\n 'Queries to use. Valid only within `bumpVersions` or `customManagers` object.',\n type: 'array',\n subType: 'string',\n parents: ['bumpVersions', 'customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'matchStringsStrategy',\n description: 'Strategy how to interpret matchStrings.',\n type: 'string',\n default: 'any',\n allowedValues: ['any', 'recursive', 'combination'],\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'depNameTemplate',\n description:\n 'Optional depName for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'packageNameTemplate',\n description:\n 'Optional packageName for extracted dependencies, else defaults to `depName` value. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'datasourceTemplate',\n description:\n 'Optional datasource for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'depTypeTemplate',\n description:\n 'Optional `depType` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'currentValueTemplate',\n description:\n 'Optional `currentValue` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'versioningTemplate',\n description:\n 'Optional versioning for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'registryUrlTemplate',\n description:\n 'Optional registry URL for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'extractVersionTemplate',\n description:\n 'Optional `extractVersion` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'autoReplaceStringTemplate',\n description:\n 'Optional `extractVersion` for extracted dependencies. Valid only within a `customManagers` object.',\n type: 'string',\n parents: ['customManagers'],\n cli: false,\n env: false,\n },\n {\n name: 'fetchChangeLogs',\n description: 'Controls if and when changelogs/release notes are fetched.',\n type: 'string',\n allowedValues: ['off', 'branch', 'pr'],\n default: 'pr',\n cli: false,\n },\n {\n name: 'cloneSubmodules',\n description:\n 'Set to `true` to initialize submodules during repository clone.',\n type: 'boolean',\n default: false,\n },\n {\n name: 'cloneSubmodulesFilter',\n description:\n 'List of submodules names or patterns to clone when cloneSubmodules=true.',\n type: 'array',\n subType: 'string',\n default: ['*'],\n },\n {\n name: 'ignorePrAuthor',\n description:\n 'Set to `true` to fetch the entire list of PRs instead of only those authored by the Renovate user.',\n type: 'boolean',\n globalOnly: true,\n default: false,\n },\n {\n name: 'allowedUnsafeExecutions',\n description: `List of possibly unsafe executions which are permitted to run. This enables global control over any implicit commands\n which are run as part of a renovate run. This is similar to \\`allowedCommands\\` but is specifically used to control executions\n which run automatically, and are not explicitly added in \\`postUpgradeTasks\\``,\n type: 'array',\n subType: 'string',\n default: [],\n allowedValues: ['bazelModDeps', 'goGenerate', 'gradleWrapper'],\n stage: 'repository',\n globalOnly: true,\n },\n {\n name: 'gitNoVerify',\n description:\n 'Which Git commands will be run with the `--no-verify` option.',\n type: 'array',\n subType: 'string',\n allowString: true,\n allowedValues: ['commit', 'push'],\n default: ['commit', 'push'],\n stage: 'global',\n globalOnly: true,\n },\n {\n name: 'updatePinnedDependencies',\n description:\n 'Whether to update pinned (single version) dependencies or not.',\n type: 'boolean',\n default: true,\n },\n {\n name: 'gitUrl',\n description:\n 'Overrides the default resolution for Git remote, e.g. to switch GitLab from HTTPS to SSH-based.',\n type: 'string',\n supportedPlatforms: [\n 'bitbucket-server',\n 'forgejo',\n 'gerrit',\n 'gitea',\n 'gitlab',\n 'scm-manager',\n ],\n allowedValues: ['default', 'ssh', 'endpoint'],\n default: 'default',\n stage: 'repository',\n globalOnly: true,\n },\n {\n name: 'writeDiscoveredRepos',\n description: 'Writes discovered repositories to a JSON file and then exit.',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 'platformAutomerge',\n description: `Controls if platform-native auto-merge is used.`,\n type: 'boolean',\n default: true,\n supportedPlatforms: [\n 'azure',\n 'bitbucket-server',\n 'forgejo',\n 'gitea',\n 'github',\n 'gitlab',\n ],\n },\n {\n name: 'userStrings',\n description:\n 'User-facing strings for the Renovate comment when a PR is closed.',\n type: 'object',\n freeChoice: true,\n default: {\n ignoreTopic: 'Renovate Ignore Notification',\n ignoreMajor:\n 'Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for *any* future `{{{newMajor}}}.x` releases. But if you manually upgrade to `{{{newMajor}}}.x` then Renovate will re-enable `minor` and `patch` updates automatically.',\n ignoreDigest:\n 'Because you closed this PR without merging, Renovate will ignore this update. You will not get PRs for the `{{{depName}}}` `{{{newDigestShort}}}` update again.',\n ignoreOther:\n 'Because you closed this PR without merging, Renovate will ignore this update (`{{{newValue}}}`). You will get a PR once a newer version is released. To ignore this dependency forever, add it to the `ignoreDeps` array of your Renovate config.',\n artifactErrorWarning: 'You probably do not want to merge this PR as-is.',\n },\n },\n {\n name: 'platformCommit',\n description:\n 'Use platform API to perform commits instead of using Git directly.',\n type: 'string',\n default: 'auto',\n allowedValues: ['auto', 'disabled', 'enabled'],\n supportedPlatforms: ['github'],\n },\n {\n name: 'branchNameStrict',\n description: `Whether to be strict about the use of special characters within the branch name.`,\n type: 'boolean',\n default: false,\n },\n {\n name: 'checkedBranches',\n description:\n 'A list of branch names to mark for creation or rebasing as if it was selected in the Dependency Dashboard issue.',\n type: 'array',\n subType: 'string',\n experimental: true,\n globalOnly: true,\n default: [],\n },\n {\n name: 'maxRetryAfter',\n description:\n 'Maximum retry-after header value to wait for before retrying a failed request.',\n type: 'integer',\n default: 60,\n stage: 'package',\n parents: ['hostRules'],\n cli: false,\n env: false,\n },\n {\n name: 'logLevelRemap',\n description: 'Remap log levels to different levels.',\n type: 'array',\n subType: 'object',\n stage: 'repository',\n cli: false,\n env: false,\n mergeable: true,\n },\n {\n name: 'matchMessage',\n description: 'Regex/minimatch expression to match against log message.',\n type: 'string',\n parents: ['logLevelRemap'],\n cli: false,\n env: false,\n },\n {\n name: 'newLogLevel',\n description: 'New log level to use if matchMessage matches.',\n type: 'string',\n allowedValues: ['trace', 'debug', 'info', 'warn', 'error', 'fatal'],\n parents: ['logLevelRemap'],\n cli: false,\n env: false,\n },\n {\n name: 'milestone',\n description: `The number of a milestone. If set, the milestone will be set when Renovate creates the PR.`,\n type: 'integer',\n default: null,\n supportedPlatforms: ['github'],\n },\n {\n name: 'httpCacheTtlDays',\n description: 'Maximum duration in days to keep HTTP cache entries.',\n type: 'integer',\n stage: 'repository',\n default: 90,\n globalOnly: true,\n },\n {\n name: 'prCacheSyncMaxPages',\n description:\n 'Maximum number of pages to fetch when syncing the pull request cache.',\n type: 'integer',\n default: 100,\n globalOnly: true,\n supportedPlatforms: ['github'],\n experimental: true,\n experimentalIssues: [41485],\n },\n {\n name: 'dockerMaxPages',\n description:\n 'By default, Renovate fetches up to 20 pages of Docker tags from registries. But you can set your own limit with this config option.',\n type: 'integer',\n default: 20,\n globalOnly: true,\n },\n {\n name: 'deleteConfigFile',\n description:\n 'If set to `true`, Renovate tries to delete the self-hosted config file after reading it.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'deleteAdditionalConfigFile',\n description:\n 'If set to `true`, Renovate tries to delete the additional self-hosted config file after reading it.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 's3Endpoint',\n description:\n 'If set, Renovate will use this string as the `endpoint` when creating the AWS S3 client instance.',\n type: 'string',\n globalOnly: true,\n },\n {\n name: 's3PathStyle',\n description:\n 'If set, Renovate will enable `forcePathStyle` when creating the AWS S3 client instance.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'cachePrivatePackages',\n description:\n 'Cache private packages in the datasource cache. This is useful for self-hosted setups',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'configValidationError',\n description:\n 'If enabled, config validation errors will be reported as errors instead of warnings, and Renovate will exit with a non-zero exit code.',\n type: 'boolean',\n default: false,\n globalOnly: true,\n },\n {\n name: 'toolSettings',\n description:\n 'Tool specific configuration. Global self-hosted configuration takes precedence.',\n type: 'object',\n default: {\n jvmMaxMemory: 512,\n jvmMemory: 512,\n },\n cli: false,\n },\n {\n name: 'jvmMaxMemory',\n description:\n 'Maximum JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to 512. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.jvmMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['gradle-wrapper'],\n cli: false,\n env: false,\n },\n {\n name: 'jvmMemory',\n description:\n 'Initial JVM memory in MB to use for updates that use a Java VM, like the Gradle Wrapper, defaults to `jvmMaxMemory`. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.jvmMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['gradle-wrapper'],\n cli: false,\n env: false,\n },\n {\n name: 'nodeMaxMemory',\n description:\n 'Maximum memory in MiB for Node child processes invoked by Renovate. If unset, the Node process will automagically determine the memory limit to use. Repo configuration for this value will be ignored if it exceeds the global configuration for `toolSettings.nodeMaxMemory`',\n type: 'integer',\n parents: ['toolSettings'],\n supportedManagers: ['npm'],\n cli: false,\n env: false,\n },\n];\n\nexport function getOptions(): Readonly<RenovateOptions>[] {\n return options;\n}\n\nfunction loadManagerOptions(): void {\n const allManagers = new Map([...getManagers(), ...getCustomManagers()]);\n for (const [name, config] of allManagers.entries()) {\n // v8 ignore else -- TODO: add test #40625\n if (config.defaultConfig) {\n const managerConfig: Readonly<RenovateOptions> = {\n name,\n description: `Configuration object for the ${name} manager`,\n stage: 'package',\n type: 'object',\n default: config.defaultConfig,\n mergeable: true,\n cli: false,\n autogenerated: true,\n };\n options.push(managerConfig);\n }\n }\n}\n\nfunction freeze(value: unknown): void {\n if (isArray(value)) {\n for (const v of value) {\n freeze(v);\n }\n\n Object.freeze(value);\n } else if (isObject(value)) {\n for (const v of Object.values(value)) {\n freeze(v);\n }\n\n Object.freeze(value);\n }\n}\n\nfunction freezeConfigOptions(): void {\n for (const option of options) {\n freeze(option);\n }\n}\n\nloadManagerOptions();\nfreezeConfigOptions();\n"],"mappings":";;;;;;;;;AASA,MAAM,UAAuC;CAC3C;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe,CAAC,QAAQ,SAAS;EAClC;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,MAAM;EAChB,SAAS;EACT,YAAY;EACZ,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,eAAe,CAAC,OAAO,OAAO;EAC9B,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,SAAS;EACT,YAAY;EACZ,cAAc;EACd,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,eAAe;EACf,SAAS;EACT,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,KAAK;EACL,KAAK;EACL,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,eAAe;GAAC;GAAS;GAAS;GAAS;GAAO;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,eAAe;EAC1B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EAC1B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,UAAU,EAAE;GACZ,aAAa,EAAE;GACf,eAAe;GACf,cAAc,EAAE;GACjB;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,mBAAmB;EAC7B,SAAS,EAAE;EACX,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,mBAAmB;EAC7B,SAAS,CAAC,OAAO;EACjB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,SAAS,EAAE;EACX,sBAAsB;GACpB,MAAM;GACN,YAAY,EAAE;GACd,sBAAsB;GACvB;EACD,WAAW;EACX,YAAY;EACZ,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,oBAAoB;EAC9B,SAAS;EACT,eAAe,CAAC,QAAQ,QAAQ;EAChC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,mBAAmB;EAC7B,eAAe,CAAC,UAAU,SAAS;EACnC,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,sBAAsB;EACtB,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,cAAc;EACd,yBACE;EACF,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,eAAe;GACf,MAAM;GACN,UAAU;GACX;EACD,sBAAsB;GACpB,MAAM;GACN,QAAQ;GACT;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,WAAW;EACX,aAAa;EACb,SAAS;GACP,eAAe;GACf,kBAAkB;GAClB,iBAAiB;GACjB,mBAAmB;GACpB;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,aAAa;EACb,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;GACP;GACA;GACA,GAAG;GACH;GACA;GACA,GAAG;GACJ;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,QAAQ,SAAS;EACjC,KAAK;EACL,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,eAAe;GAAC;GAAY;GAAW;GAAQ;EAC/C,OAAO;EACP,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,OAAO;EACP,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACd,eAAe;GAAC;GAAW;GAAQ;GAAK;EACzC;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACT,cAAc;EACd,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,YAAY;EACZ,MAAM;EACN,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,eAAe;GAAC;GAAW;GAAU;GAAO;EAC5C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,eAAe;GAAC;GAAU;GAAU;GAAW;GAAS;EACxD,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC3B,SAAS,EAAE;EACX,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACT,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,gBACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,gBACE;EACF,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,CAAC,QAAQ;EAClB,mBAAmB,CAAC,QAAQ;EAC7B;CAED;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACT,OAAO;EACR;CAED;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE,SAAS,qDAAqD;EACzE,YAAY;EACZ,sBAAsB;EACtB,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB;GAAC;GAAW;GAAS;GAAU;GAAS;EAC5D,YAAY;EACZ,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC9B,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACd,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACf;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAY;GAAY;GAAU;EAClD,YAAY;EACZ,sBAAsB;EACvB;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACH;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GAAC;GAAQ;GAAO;GAAa;EAC5C,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CAGD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;EACpB,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACL,KAAK;EACL,SAAS,CAAC,cAAc;EACzB;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,aAAa;EACb,KAAK;EACL,KAAK;EACL,SAAS,CAAC,cAAc;EACzB;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,YAAY;EACZ,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,mBAAmB;GAAC;GAAO;GAAO;GAAY;GAAS;EACxD;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,GAAG,oBAAoB;EACvC,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACD;EACD,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,oBAAoB;GAAC;GAAS;GAAa;GAAmB;EAC9D,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,mBAAmB,CAAC,MAAM;EAC3B;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB;GAAC;GAAW;GAAS;GAAS;EACnD;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB,CAAC,YAAY;EACjC,cAAc;EACf;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,YAAY;EACZ,oBAAoB;GAAC;GAAW;GAAS;GAAU;GAAS;EAC7D;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACT,KAAK;EACL,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,SAAS,OAAO;EAChC,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACP;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,YAAY;EACZ,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,YAAY;EACZ,OAAO;EACR;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACR;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,WAAW;EACX,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,WAAW;EACX,SAAS;EACT,OAAO;EACP,SAAS,CAAC,sBAAsB,yBAAyB;EAC1D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,WAAW;EACX,MAAM;EACN,SAAS,EAAE;EACX,sBAAsB,EACpB,MAAM,UACP;EACD,mBAAmB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,oBAAoB;EAC9B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,QAAQ;EACR,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,QAAQ;EACR,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,mBAAmB;EAClC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,QAAQ;EAC9B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAU;GAAS;EAClD;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACR;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACL,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,cAAc;EACd,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,OAAO;EACP,cAAc;EACd,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,eAAe,CAAC,WAAW,QAAQ;EACnC,mBAAmB,CAAC,MAAM;EAC1B,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAO;GAAW;GAAQ;GAAY;EACtD,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,aAAa;EACb,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,WAAW;EACX,KAAK;EACL,KAAK;EACN;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,OAAO;EACP,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,cAAc;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAS;GAAS;GAAS;GAAa;EACxD,mBAAmB;GAAC;GAAU;GAAO;GAAS;GAAS;GAAM;EAC9D;CAED;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS,EAAE;EACX,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,YAAY;GACZ,WAAW;GACX,WAAW;GACX,qBAAqB;GACrB,OAAO;IACL,oBAAoB;IACpB,oBAAoB;IACrB;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,oBAAoB;GACpB,oBAAoB;GACrB;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,OAAO;EACP,MAAM;EACN,SAAS;GACP,WAAW;GACX,WAAW;GACX,qBAAqB;GACrB,OAAO;IACL,oBAAoB;IACpB,oBAAoB;IACrB;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,qBAAqB;GACrB,oBAAoB;GACrB;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,aAAa;GACb,qBAAqB;GACrB,oBACE;GACF,aAAa,CACX,sHACD;GACF;EACD,KAAK;EACL,WAAW;EACZ;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAQ;GAAW;GAAW;EAC9C,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe,CAAC,QAAQ,QAAQ;EAChC,SAAS;EACV;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAU;GAAQ;EAC3C;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GACb;GACA;GACA;GACA;GACA;GACD;EACD,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe,CAAC,sBAAsB,qBAAqB;EAC5D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CAYD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAU;GAAY;GAAO;EAC7C,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,EAAE;EACX,YAAY;EACZ,OAAO;EACP,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAa;GAAe;GAAkB;GAAW;EACzE,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;EACf,SAAS;EACT,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,eAAe;EACzB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,YAAY;EAClC;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,aAAa,mBAAmB;EACtD;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,YAAY;EACjC,YAAY;EACZ,sBAAsB;EACvB;CAED;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAU;GAAM;GAAa;EAC7C,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACD;EACD,SAAS;EACT,oBAAoB;GAAC;GAAS;GAAa;GAAW;GAAS;GAAS;EACzE;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,CAAC,oBAAoB;EAC9B,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,WAAW;GACX,UAAU,EAAE;GACZ,6BAA6B;GAC7B,mBAAmB;GACnB,eAAe;GACf,qBAAqB;GACrB,aAAa;GACb,YAAY;GACZ,0BAA0B;GAC3B;EACD,WAAW;EACX,KAAK;EACL,KAAK;EACL,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,UAAU,UAAU;EACpC,SAAS;EACT,SAAS,CAAC,sBAAsB;EACjC;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SACE;EACF,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACF,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,gBACE;EACF,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,cAAc;EACd,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACP;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,EAAE;EACX,YAAY;EACZ,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,OAAO;EACP,MAAM;EACN,SAAS;GACP,SAAS;GACT,cAAc;GACd,gBAAgB;GAChB,aAAa;GACb,qBAAqB;GACrB,oBAAoB;GACpB,oBAAoB;GACpB,UAAU,CAAC,uBAAuB;GAClC,WAAW;GACX,mBAAmB,EACjB,QAAQ,uBACT;GACF;EACD,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACN;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;GACP,aAAa;GACb,oBAAoB;GACrB;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACX,aAAa;EACd;CAED;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,aAAa;EACb,cAAc;EACd,WAAW;EACX,KAAK;EACL,KAAK;EACL,SAAS,CAAC,GAAG,wBAAwB,iBAAiB;EACvD;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,SAAS;EACT,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,EAAE;EACX,WAAW;EACX,KAAK;EACL,mBAAmB;GACjB;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,YAAY;EACZ,sBAAsB,EACpB,MAAM,UACP;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,cAAc;EACd,gBACE;EACH;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACL,aAAa;EACd;CACD;EACE,MAAM;EACN,aACE;EACF,cAAc;EACd,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,eAAe,CAAC,WAAW;EAC3B,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,SAAS;EACT,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,OAAO;EACP,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,EAAE;EACX,YAAY;EACZ,cAAc;EACd,aAAa;EACd;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,SACE;GACF,MAAM;GACN,QAAQ;GACR,iBAAiB;GACjB,aAAa;GACb,QAAQ;GACR,SAAS;GACT,YAAY;GACZ,gBAAgB;GAChB,KAAK;GAEL,UACE;GAEF,SACE;GAEF,YACE;GACH;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACZ,WAAW;EACX,SAAS;GACP,KAAK;GACL,UAAU;GACV,SAAS;GACT,YACE;GACH;EACF;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS;GAAC;GAAW;GAAQ;GAAU;GAAU;GAAU;EAC5D;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,aAAa;EACb,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,eAAe;GACb;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,OAAO;EACP,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe,CAAC,WAAW,QAAQ;EACnC,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,eAAe;GAAC;GAAQ;GAAQ;GAAO;EACvC,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACL,YAAY,CACV,EACE,mBAAmB,CACjB;GACE,UAAU;GACV,OAAO;GACR,CACF,EACF,CACF;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,gBAAgB,iBAAiB;EAC3C,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAO;GAAa;GAAc;EAClD,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,iBAAiB;EAC3B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAO;GAAU;GAAK;EACtC,SAAS;EACT,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,SAAS,CAAC,IAAI;EACf;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;EACV;CACD;EACE,MAAM;EACN,aAAa;;;EAGb,MAAM;EACN,SAAS;EACT,SAAS,EAAE;EACX,eAAe;GAAC;GAAgB;GAAc;GAAgB;EAC9D,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,aAAa;EACb,eAAe,CAAC,UAAU,OAAO;EACjC,SAAS,CAAC,UAAU,OAAO;EAC3B,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACD,eAAe;GAAC;GAAW;GAAO;GAAW;EAC7C,SAAS;EACT,OAAO;EACP,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB;GAClB;GACA;GACA;GACA;GACA;GACA;GACD;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACZ,SAAS;GACP,aAAa;GACb,aACE;GACF,cACE;GACF,aACE;GACF,sBAAsB;GACvB;EACF;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,eAAe;GAAC;GAAQ;GAAY;GAAU;EAC9C,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACV;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,cAAc;EACd,YAAY;EACZ,SAAS,EAAE;EACZ;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,OAAO;EACP,SAAS,CAAC,YAAY;EACtB,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,OAAO;EACP,KAAK;EACL,KAAK;EACL,WAAW;EACZ;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS,CAAC,gBAAgB;EAC1B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,eAAe;GAAC;GAAS;GAAS;GAAQ;GAAQ;GAAS;GAAQ;EACnE,SAAS,CAAC,gBAAgB;EAC1B,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,SAAS;EACT,oBAAoB,CAAC,SAAS;EAC/B;CACD;EACE,MAAM;EACN,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACZ,oBAAoB,CAAC,SAAS;EAC9B,cAAc;EACd,oBAAoB,CAAC,MAAM;EAC5B;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;EACT,YAAY;EACb;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS;GACP,cAAc;GACd,WAAW;GACZ;EACD,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,iBAAiB;EACrC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,iBAAiB;EACrC,KAAK;EACL,KAAK;EACN;CACD;EACE,MAAM;EACN,aACE;EACF,MAAM;EACN,SAAS,CAAC,eAAe;EACzB,mBAAmB,CAAC,MAAM;EAC1B,KAAK;EACL,KAAK;EACN;CACF;AAED,SAAgB,aAA0C;AACxD,QAAO;;AAGT,SAAS,qBAA2B;CAClC,MAAM,cAAc,IAAI,IAAI,CAAC,GAAG,aAAa,EAAE,GAAG,mBAAmB,CAAC,CAAC;AACvE,MAAK,MAAM,CAAC,MAAM,WAAW,YAAY,SAAS;;AAEhD,KAAI,OAAO,eAAe;EACxB,MAAM,gBAA2C;GAC/C;GACA,aAAa,gCAAgC,KAAK;GAClD,OAAO;GACP,MAAM;GACN,SAAS,OAAO;GAChB,WAAW;GACX,KAAK;GACL,eAAe;GAChB;AACD,UAAQ,KAAK,cAAc;;;AAKjC,SAAS,OAAO,OAAsB;AACpC,KAAI,QAAQ,MAAM,EAAE;AAClB,OAAK,MAAM,KAAK,MACd,QAAO,EAAE;AAGX,SAAO,OAAO,MAAM;YACX,SAAS,MAAM,EAAE;AAC1B,OAAK,MAAM,KAAK,OAAO,OAAO,MAAM,CAClC,QAAO,EAAE;AAGX,SAAO,OAAO,MAAM;;;AAIxB,SAAS,sBAA4B;AACnC,MAAK,MAAM,UAAU,QACnB,QAAO,OAAO;;AAIlB,oBAAoB;AACpB,qBAAqB"}
|
|
@@ -5,6 +5,12 @@ import "./util.js";
|
|
|
5
5
|
import { GitPullRequestMergeStrategy } from "azure-devops-node-api/interfaces/GitInterfaces.js";
|
|
6
6
|
//#region lib/modules/platform/azure/azure-helper.ts
|
|
7
7
|
const mergePolicyGuid = "fa4e907d-c16b-4a4c-9dfa-4916e5d171ab";
|
|
8
|
+
const policyKeyByStrategy = {
|
|
9
|
+
[GitPullRequestMergeStrategy.NoFastForward]: "allowNoFastForward",
|
|
10
|
+
[GitPullRequestMergeStrategy.Squash]: "allowSquash",
|
|
11
|
+
[GitPullRequestMergeStrategy.Rebase]: "allowRebase",
|
|
12
|
+
[GitPullRequestMergeStrategy.RebaseMerge]: "allowRebaseMerge"
|
|
13
|
+
};
|
|
8
14
|
async function getMergeMethod(repoId, project, branchRef, defaultBranch) {
|
|
9
15
|
logger.debug(`getMergeMethod(branchRef=${branchRef}, defaultBranch=${defaultBranch})`);
|
|
10
16
|
const isRelevantScope = (scope) => {
|
|
@@ -15,14 +21,13 @@ async function getMergeMethod(repoId, project, branchRef, defaultBranch) {
|
|
|
15
21
|
};
|
|
16
22
|
const policyConfigurations = (await (await policyApi()).getPolicyConfigurations(project, void 0, mergePolicyGuid)).filter((p) => p.settings.scope.some(isRelevantScope)).map((p) => p.settings)[0];
|
|
17
23
|
logger.debug({ policyConfigurations }, `getMergeMethod(branchRef=${branchRef}) determining mergeMethod from matched policy`);
|
|
18
|
-
|
|
19
|
-
const method =
|
|
24
|
+
for (const [key, policyKey] of Object.entries(policyKeyByStrategy)) if (policyConfigurations?.[policyKey] === true) {
|
|
25
|
+
const method = parseInt(key, 10);
|
|
20
26
|
logger.debug({ policyConfigurations }, `getMergeMethod(branchRef=${branchRef})=${GitPullRequestMergeStrategy[method]}`);
|
|
21
27
|
return method;
|
|
22
|
-
} catch {
|
|
23
|
-
logger.debug({ policyConfigurations }, `getMergeMethod(branchRef=${branchRef})=NoFastForward, as an error occured`);
|
|
24
|
-
return GitPullRequestMergeStrategy.NoFastForward;
|
|
25
28
|
}
|
|
29
|
+
logger.debug({ policyConfigurations }, `getMergeMethod(branchRef=${branchRef})=${GitPullRequestMergeStrategy[GitPullRequestMergeStrategy.NoFastForward]}`);
|
|
30
|
+
return GitPullRequestMergeStrategy.NoFastForward;
|
|
26
31
|
}
|
|
27
32
|
async function getAllProjectTeams(projectId) {
|
|
28
33
|
const allTeams = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-helper.js","names":["azureApi.policyApi","azureApi.coreApi"],"sources":["../../../../lib/modules/platform/azure/azure-helper.ts"],"sourcesContent":["import type { WebApiTeam } from 'azure-devops-node-api/interfaces/CoreInterfaces.js';\nimport type {\n GitCommit,\n GitRef,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport { GitPullRequestMergeStrategy } from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { PolicyConfiguration } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { logger } from '../../../logger/index.ts';\nimport { streamToString } from '../../../util/streams.ts';\nimport { getNewBranchName } from '../util.ts';\nimport * as azureApi from './azure-got-wrapper.ts';\nimport { WrappedException } from './schema.ts';\nimport {\n getBranchNameWithoutRefsPrefix,\n getBranchNameWithoutRefsheadsPrefix,\n} from './util.ts';\n\nconst mergePolicyGuid = 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab'; // Magic GUID for merge strategy policy configurations\n\nexport async function getRefs(\n repoId: string,\n branchName?: string,\n): Promise<GitRef[]> {\n logger.debug(`getRefs(${repoId}, ${branchName!})`);\n const azureApiGit = await azureApi.gitApi();\n const refs = await azureApiGit.getRefs(\n repoId,\n undefined,\n getBranchNameWithoutRefsPrefix(branchName),\n );\n return refs;\n}\n\nexport interface AzureBranchObj {\n name: string;\n oldObjectId: string;\n}\n\nexport async function getAzureBranchObj(\n repoId: string,\n branchName: string,\n from?: string,\n): Promise<AzureBranchObj> {\n const fromBranchName = getNewBranchName(from);\n const refs = await getRefs(repoId, fromBranchName);\n if (refs.length === 0) {\n logger.debug(`getAzureBranchObj without a valid from, so initial commit.`);\n // TODO: fix undefined\n return {\n name: getNewBranchName(branchName)!,\n oldObjectId: '0000000000000000000000000000000000000000',\n };\n }\n return {\n // TODO: fix undefined (#22198)\n name: getNewBranchName(branchName)!,\n oldObjectId: refs[0].objectId!,\n };\n}\n\n// if no branchName, look globally\nexport async function getFile(\n repoId: string,\n filePath: string,\n branchName: string,\n): Promise<string | null> {\n logger.trace(`getFile(filePath=${filePath}, branchName=${branchName})`);\n const azureApiGit = await azureApi.gitApi();\n const item = await azureApiGit.getItemText(\n repoId,\n filePath,\n undefined,\n undefined,\n 0, // because we look for 1 file\n false,\n false,\n true,\n {\n versionType: 0, // branch\n versionOptions: 0,\n version: getBranchNameWithoutRefsheadsPrefix(branchName),\n },\n );\n\n if (item?.readable) {\n const fileContent = await streamToString(item);\n try {\n const result = WrappedException.safeParse(fileContent);\n if (result.success) {\n if (result.data.typeKey === 'GitItemNotFoundException') {\n logger.warn({ filePath }, 'Unable to find file');\n return null;\n }\n // v8 ignore else -- TODO: add test #40625\n if (result.data.typeKey === 'GitUnresolvableToCommitException') {\n logger.warn({ branchName }, 'Unable to find branch');\n return null;\n }\n }\n } catch /* v8 ignore next */ {\n // it 's not a JSON, so I send the content directly with the line under\n }\n\n return fileContent;\n }\n\n return null; // no file found\n}\n\nexport async function getCommitDetails(\n commit: string,\n repoId: string,\n): Promise<GitCommit> {\n logger.debug(`getCommitDetails(${commit}, ${repoId})`);\n const azureApiGit = await azureApi.gitApi();\n const results = await azureApiGit.getCommit(commit, repoId);\n return results;\n}\n\nexport async function getMergeMethod(\n repoId: string,\n project: string,\n branchRef?: string | null,\n defaultBranch?: string,\n): Promise<GitPullRequestMergeStrategy> {\n logger.debug(\n `getMergeMethod(branchRef=${branchRef}, defaultBranch=${defaultBranch})`,\n );\n interface Scope {\n repositoryId: string;\n refName?: string;\n matchKind: 'Prefix' | 'Exact' | 'DefaultBranch';\n }\n const isRelevantScope = (scope: Scope): boolean => {\n if (\n scope.matchKind === 'DefaultBranch' &&\n // TODO: types (#22198)\n (!branchRef || branchRef === `refs/heads/${defaultBranch!}`)\n ) {\n return true;\n }\n if (scope.repositoryId !== repoId && scope.repositoryId !== null) {\n return false;\n }\n if (!branchRef) {\n return true;\n }\n // TODO #22198\n return scope.matchKind === 'Exact'\n ? scope.refName === branchRef\n : branchRef.startsWith(scope.refName!);\n };\n\n const policyConfigurations = (\n await (\n await azureApi.policyApi()\n ).getPolicyConfigurations(project, undefined, mergePolicyGuid)\n )\n .filter((p: PolicyConfiguration) => p.settings.scope.some(isRelevantScope))\n .map((p: PolicyConfiguration) => p.settings)[0];\n\n logger.debug(\n { policyConfigurations },\n // TODO: types (#22198)\n `getMergeMethod(branchRef=${branchRef!}) determining mergeMethod from matched policy`,\n );\n\n
|
|
1
|
+
{"version":3,"file":"azure-helper.js","names":["azureApi.policyApi","azureApi.coreApi"],"sources":["../../../../lib/modules/platform/azure/azure-helper.ts"],"sourcesContent":["import type { WebApiTeam } from 'azure-devops-node-api/interfaces/CoreInterfaces.js';\nimport type {\n GitCommit,\n GitRef,\n} from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport { GitPullRequestMergeStrategy } from 'azure-devops-node-api/interfaces/GitInterfaces.js';\nimport type { PolicyConfiguration } from 'azure-devops-node-api/interfaces/PolicyInterfaces.js';\nimport { logger } from '../../../logger/index.ts';\nimport { streamToString } from '../../../util/streams.ts';\nimport { getNewBranchName } from '../util.ts';\nimport * as azureApi from './azure-got-wrapper.ts';\nimport { WrappedException } from './schema.ts';\nimport {\n getBranchNameWithoutRefsPrefix,\n getBranchNameWithoutRefsheadsPrefix,\n} from './util.ts';\n\nconst mergePolicyGuid = 'fa4e907d-c16b-4a4c-9dfa-4916e5d171ab'; // Magic GUID for merge strategy policy configurations\n\nexport async function getRefs(\n repoId: string,\n branchName?: string,\n): Promise<GitRef[]> {\n logger.debug(`getRefs(${repoId}, ${branchName!})`);\n const azureApiGit = await azureApi.gitApi();\n const refs = await azureApiGit.getRefs(\n repoId,\n undefined,\n getBranchNameWithoutRefsPrefix(branchName),\n );\n return refs;\n}\n\nexport interface AzureBranchObj {\n name: string;\n oldObjectId: string;\n}\n\nexport async function getAzureBranchObj(\n repoId: string,\n branchName: string,\n from?: string,\n): Promise<AzureBranchObj> {\n const fromBranchName = getNewBranchName(from);\n const refs = await getRefs(repoId, fromBranchName);\n if (refs.length === 0) {\n logger.debug(`getAzureBranchObj without a valid from, so initial commit.`);\n // TODO: fix undefined\n return {\n name: getNewBranchName(branchName)!,\n oldObjectId: '0000000000000000000000000000000000000000',\n };\n }\n return {\n // TODO: fix undefined (#22198)\n name: getNewBranchName(branchName)!,\n oldObjectId: refs[0].objectId!,\n };\n}\n\n// if no branchName, look globally\nexport async function getFile(\n repoId: string,\n filePath: string,\n branchName: string,\n): Promise<string | null> {\n logger.trace(`getFile(filePath=${filePath}, branchName=${branchName})`);\n const azureApiGit = await azureApi.gitApi();\n const item = await azureApiGit.getItemText(\n repoId,\n filePath,\n undefined,\n undefined,\n 0, // because we look for 1 file\n false,\n false,\n true,\n {\n versionType: 0, // branch\n versionOptions: 0,\n version: getBranchNameWithoutRefsheadsPrefix(branchName),\n },\n );\n\n if (item?.readable) {\n const fileContent = await streamToString(item);\n try {\n const result = WrappedException.safeParse(fileContent);\n if (result.success) {\n if (result.data.typeKey === 'GitItemNotFoundException') {\n logger.warn({ filePath }, 'Unable to find file');\n return null;\n }\n // v8 ignore else -- TODO: add test #40625\n if (result.data.typeKey === 'GitUnresolvableToCommitException') {\n logger.warn({ branchName }, 'Unable to find branch');\n return null;\n }\n }\n } catch /* v8 ignore next */ {\n // it 's not a JSON, so I send the content directly with the line under\n }\n\n return fileContent;\n }\n\n return null; // no file found\n}\n\nexport async function getCommitDetails(\n commit: string,\n repoId: string,\n): Promise<GitCommit> {\n logger.debug(`getCommitDetails(${commit}, ${repoId})`);\n const azureApiGit = await azureApi.gitApi();\n const results = await azureApiGit.getCommit(commit, repoId);\n return results;\n}\n\ninterface MergeStrategyPolicyConfiguration {\n allowNoFastForward?: boolean;\n allowSquash?: boolean;\n allowRebase?: boolean;\n allowRebaseMerge?: boolean;\n}\n\nconst policyKeyByStrategy: Record<\n GitPullRequestMergeStrategy,\n keyof MergeStrategyPolicyConfiguration\n> = {\n [GitPullRequestMergeStrategy.NoFastForward]: 'allowNoFastForward',\n [GitPullRequestMergeStrategy.Squash]: 'allowSquash',\n [GitPullRequestMergeStrategy.Rebase]: 'allowRebase',\n [GitPullRequestMergeStrategy.RebaseMerge]: 'allowRebaseMerge',\n};\n\nexport async function getMergeMethod(\n repoId: string,\n project: string,\n branchRef?: string | null,\n defaultBranch?: string,\n): Promise<GitPullRequestMergeStrategy> {\n logger.debug(\n `getMergeMethod(branchRef=${branchRef}, defaultBranch=${defaultBranch})`,\n );\n interface Scope {\n repositoryId: string;\n refName?: string;\n matchKind: 'Prefix' | 'Exact' | 'DefaultBranch';\n }\n const isRelevantScope = (scope: Scope): boolean => {\n if (\n scope.matchKind === 'DefaultBranch' &&\n // TODO: types (#22198)\n (!branchRef || branchRef === `refs/heads/${defaultBranch!}`)\n ) {\n return true;\n }\n if (scope.repositoryId !== repoId && scope.repositoryId !== null) {\n return false;\n }\n if (!branchRef) {\n return true;\n }\n // TODO #22198\n return scope.matchKind === 'Exact'\n ? scope.refName === branchRef\n : branchRef.startsWith(scope.refName!);\n };\n\n const policyConfigurations = (\n await (\n await azureApi.policyApi()\n ).getPolicyConfigurations(project, undefined, mergePolicyGuid)\n )\n .filter((p: PolicyConfiguration) => p.settings.scope.some(isRelevantScope))\n .map((p: PolicyConfiguration) => p.settings)[0];\n\n logger.debug(\n { policyConfigurations },\n // TODO: types (#22198)\n `getMergeMethod(branchRef=${branchRef!}) determining mergeMethod from matched policy`,\n );\n\n // Note that this will iterate in the order of GitPullRequestMergeStrategy\n for (const [key, policyKey] of Object.entries(policyKeyByStrategy)) {\n if (policyConfigurations?.[policyKey] === true) {\n const method = parseInt(key, 10) satisfies GitPullRequestMergeStrategy;\n logger.debug(\n { policyConfigurations },\n `getMergeMethod(branchRef=${branchRef!})=${GitPullRequestMergeStrategy[method]}`,\n );\n return method;\n }\n }\n\n logger.debug(\n { policyConfigurations },\n // TODO: types (#22198)\n `getMergeMethod(branchRef=${branchRef!})=${GitPullRequestMergeStrategy[GitPullRequestMergeStrategy.NoFastForward]}`,\n );\n return GitPullRequestMergeStrategy.NoFastForward;\n}\n\nexport async function getAllProjectTeams(\n projectId: string,\n): Promise<WebApiTeam[]> {\n const allTeams: WebApiTeam[] = [];\n const azureApiCore = await azureApi.coreApi();\n const top = 100;\n let skip = 0;\n let length = 0;\n\n do {\n const teams = await azureApiCore.getTeams(projectId, undefined, top, skip);\n length = teams.length;\n allTeams.push(...teams);\n skip += top;\n } while (top <= length);\n\n return allTeams;\n}\n"],"mappings":";;;;;;AAiBA,MAAM,kBAAkB;AA6GxB,MAAM,sBAGF;EACD,4BAA4B,gBAAgB;EAC5C,4BAA4B,SAAS;EACrC,4BAA4B,SAAS;EACrC,4BAA4B,cAAc;CAC5C;AAED,eAAsB,eACpB,QACA,SACA,WACA,eACsC;AACtC,QAAO,MACL,4BAA4B,UAAU,kBAAkB,cAAc,GACvE;CAMD,MAAM,mBAAmB,UAA0B;AACjD,MACE,MAAM,cAAc,oBAEnB,CAAC,aAAa,cAAc,cAAc,iBAE3C,QAAO;AAET,MAAI,MAAM,iBAAiB,UAAU,MAAM,iBAAiB,KAC1D,QAAO;AAET,MAAI,CAAC,UACH,QAAO;AAGT,SAAO,MAAM,cAAc,UACvB,MAAM,YAAY,YAClB,UAAU,WAAW,MAAM,QAAS;;CAG1C,MAAM,wBACJ,OACE,MAAMA,WAAoB,EAC1B,wBAAwB,SAAS,KAAA,GAAW,gBAAgB,EAE7D,QAAQ,MAA2B,EAAE,SAAS,MAAM,KAAK,gBAAgB,CAAC,CAC1E,KAAK,MAA2B,EAAE,SAAS,CAAC;AAE/C,QAAO,MACL,EAAE,sBAAsB,EAExB,4BAA4B,UAAW,+CACxC;AAGD,MAAK,MAAM,CAAC,KAAK,cAAc,OAAO,QAAQ,oBAAoB,CAChE,KAAI,uBAAuB,eAAe,MAAM;EAC9C,MAAM,SAAS,SAAS,KAAK,GAAG;AAChC,SAAO,MACL,EAAE,sBAAsB,EACxB,4BAA4B,UAAW,IAAI,4BAA4B,UACxE;AACD,SAAO;;AAIX,QAAO,MACL,EAAE,sBAAsB,EAExB,4BAA4B,UAAW,IAAI,4BAA4B,4BAA4B,iBACpG;AACD,QAAO,4BAA4B;;AAGrC,eAAsB,mBACpB,WACuB;CACvB,MAAM,WAAyB,EAAE;CACjC,MAAM,eAAe,MAAMC,SAAkB;CAC7C,MAAM,MAAM;CACZ,IAAI,OAAO;CACX,IAAI,SAAS;AAEb,IAAG;EACD,MAAM,QAAQ,MAAM,aAAa,SAAS,WAAW,KAAA,GAAW,KAAK,KAAK;AAC1E,WAAS,MAAM;AACf,WAAS,KAAK,GAAG,MAAM;AACvB,UAAQ;UACD,OAAO;AAEhB,QAAO"}
|
package/dist/util/git/index.js
CHANGED
|
@@ -407,6 +407,7 @@ function getBranchCommit(branchName) {
|
|
|
407
407
|
async function getBranchUpdateDate(branchName) {
|
|
408
408
|
const branchSha = config.branchCommits[branchName];
|
|
409
409
|
if (!branchSha) return null;
|
|
410
|
+
await syncGit();
|
|
410
411
|
try {
|
|
411
412
|
return await getCommitDate(branchSha);
|
|
412
413
|
} catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/util/git/index.ts"],"sourcesContent":["import URL from 'node:url';\nimport { isBoolean, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport { DateTime } from 'luxon';\nimport semver from 'semver';\nimport type { Options, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport { setTimeout } from 'timers/promises';\nimport upath from 'upath';\nimport { getConfigFileNames } from '../../config/app-strings.ts';\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n UNKNOWN_ERROR,\n} from '../../constants/error-messages.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { withInstrumenting } from '../../instrumentation/with-instrumenting.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport type { GitProtocol } from '../../types/git.ts';\nimport { incCountValue, incLimitedValue } from '../../workers/global/limits.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport { getChildEnv } from '../exec/utils.ts';\nimport { newlineRegex, regEx } from '../regex.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { logWarningIfUnicodeHiddenCharactersInPackageFile } from '../unicode.ts';\nimport { getGitEnvironmentVariables } from './auth.ts';\nimport { parseGitAuthor } from './author.ts';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache.ts';\nimport { getNoVerify, simpleGitConfig } from './config.ts';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache.ts';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error.ts';\nimport type { InstrumentedSimpleGit } from './instrument.ts';\nimport { instrumentGit } from './instrument.ts';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache.ts';\nimport { configSigningKey, writePrivateKey } from './private-key.ts';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types.ts';\n\nexport { setNoVerify } from './config.ts';\nexport { setPrivateKey } from './private-key.ts';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\nexport const RENOVATE_FORK_UPSTREAM = 'renovate-fork-upstream';\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n throw lastError!;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: InstrumentedSimpleGit): Promise<string> {\n logger.debug('getDefaultBranch()');\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore next -- TODO: add test #40625 */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n\n return res.replace('origin/', '').trim();\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'Error getting default branch');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn('Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: InstrumentedSimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = instrumentGit(simpleGit());\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore if -- TODO: add test #40625 */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(preferUpstream = true): Promise<void> {\n config.branchCommits = {};\n const url =\n preferUpstream && config.upstreamUrl ? config.upstreamUrl : config.url;\n logger.debug(`fetchBranchCommits(): url=${url}`);\n const opts = ['ls-remote', '--heads', url];\n const localDir = GlobalConfig.get('localDir')!;\n const repoExists = await fs.pathExists(upath.join(localDir, '.git/HEAD'));\n if (config.extraCloneOpts && !repoExists) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables? use `getChildEnv` instead?\n git = instrumentGit(\n simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n }),\n );\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next -- TODO: add test #40625 */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore if -- TODO: add test #40625 */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n const gitEnv = getChildEnv({ env: getGitEnvironmentVariables() });\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.env(gitEnv).submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport const syncGit = withInstrumenting(\n { name: 'syncGit' },\n async function (): Promise<void> {\n if (gitInitialized) {\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`syncGit(): Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n await instrument('fetch', async () => {\n logger.debug(\n `syncGit(): Found existing git repository, attempting git fetch`,\n );\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error, falling back to git clone');\n }\n });\n }\n if (clone) {\n await instrument('clone', async () => {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await instrument(`fs.emptyDir(${localDir})`, () =>\n fs.emptyDir(localDir),\n );\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() =>\n instrument('emptyDirAndClone', emptyDirAndClone),\n );\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n });\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await instrument('cloneSubmodules', () =>\n cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter),\n );\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test #40625 */\n delete getCache()?.semanticCommits;\n\n // If upstreamUrl is set then the bot is running in fork mode\n // The \"upstream\" remote is the original repository which was forked from\n if (config.upstreamUrl) {\n const { upstreamUrl } = config;\n await instrument('sync with upstreamUrl', async () => {\n logger.debug(\n `Bringing default branch up-to-date with ${RENOVATE_FORK_UPSTREAM}, to get latest config`,\n );\n // Add remote if it does not exist\n const remotes = await git.getRemotes(true);\n // v8 ignore else -- TODO: add test #40625\n if (!remotes.some((remote) => remote.name === RENOVATE_FORK_UPSTREAM)) {\n logger.debug(`Adding remote ${RENOVATE_FORK_UPSTREAM}`);\n await git.addRemote(RENOVATE_FORK_UPSTREAM, upstreamUrl);\n }\n await syncForkWithUpstream(config.currentBranch);\n await fetchBranchCommits(false);\n });\n }\n\n config.currentBranchSha = (\n await git.revparse('HEAD')\n ).trim() as LongCommitSha;\n logger.debug(`Current branch SHA: ${config.currentBranchSha}`);\n },\n);\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (isString(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits?.[branchName] || null;\n}\n\n// Return the date of the latest commit for a branch\nexport async function getBranchUpdateDate(\n branchName: string,\n): Promise<DateTime | null> {\n const branchSha = config.branchCommits[branchName];\n if (!branchSha) {\n return null;\n }\n try {\n return await getCommitDate(branchSha);\n } catch (err) {\n logger.debug({ err, branchName }, 'Error getting branch update date');\n return null;\n }\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n // v8 ignore else -- TODO: add test #40625\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n '--no-merges': null,\n });\n return res.all.map((commit) => commit.message);\n } catch /* v8 ignore next -- TODO: add test #40625 */ {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = await getCommitDate(config.currentBranchSha);\n // v8 ignore else -- TODO: add test #40625\n if (latestCommitDate) {\n logger.debug(\n { branchName, latestCommitDate, sha: config.currentBranchSha },\n 'latest commit',\n );\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function checkoutBranchFromRemote(\n branchName: string,\n remoteName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Checking out branch ${branchName} from remote ${remoteName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkoutBranch(branchName, `${remoteName}/${branchName}`),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.revparse('HEAD')\n ).trim() as LongCommitSha;\n logger.debug(`Checked out branch ${branchName} from remote ${remoteName}`);\n config.branchCommits[branchName] = config.currentBranchSha;\n return config.currentBranchSha;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function resetHardFromRemote(\n remoteAndBranch: string,\n): Promise<void> {\n try {\n const resetLog = await git.reset(['--hard', remoteAndBranch]);\n logger.debug({ resetLog }, 'git reset log');\n } catch (err) {\n logger.error({ err }, 'Error during git reset --hard');\n throw err;\n }\n}\n\nexport async function forcePushToRemote(\n branchName: string,\n remote: string,\n): Promise<void> {\n try {\n const pushLog = await git.push([remote, branchName, '--force']);\n logger.debug({ pushLog }, 'git push log');\n } catch (err) {\n logger.error({ err }, 'Error during git push --force');\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', `refs/heads/${branch}`]);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(isString)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug(\n `branch.isBehindBase(): using git to calculate against baseBranch \"${baseBranch}\"`,\n );\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug(\n `branch.isModified(): using git to calculate against baseBranch \"${baseBranch}\"`,\n );\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { baseBranch, branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBoolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug(\n `branch.isConflicted(): using git to calculate against baseBranch ${baseBranch}`,\n );\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore if -- TODO: add test #40625 */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n await deleteLocalBranch(branchName);\n /* v8 ignore next -- TODO: add test #40625 (always throws) */\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nasync function getCommitDate(ref: LongCommitSha | string): Promise<DateTime> {\n const output = await git.show(['-s', '--format=%cI', ref]);\n return DateTime.fromISO(output.trim()).toUTC();\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await getCommitDate('origin/' + branchName);\n return time.toJSDate();\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport function getBranchFiles(branchName: string): Promise<string[] | null> {\n return getBranchFilesFromRef(`origin/${branchName}`);\n}\n\nexport function getBranchFilesFromCommit(\n referenceCommit: LongCommitSha,\n): Promise<string[] | null> {\n return getBranchFilesFromRef(referenceCommit);\n}\n\nasync function getBranchFilesFromRef(\n refName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([refName, `${refName}^`]),\n );\n return diff.files.map((file) => file.file);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'getBranchFilesFromRef error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n\n logWarningIfUnicodeHiddenCharactersInPackageFile(filePath, content);\n\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n /* v8 ignore else -- TODO: add test #40625 */\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next -- TODO: add test #40625 */\n const addParams =\n fileName === getConfigFileNames()[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n isNonEmptyObject(commitRes.summary) &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n pushOptions,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const gitOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n gitOptions['--no-verify'] = null;\n }\n if (pushOptions) {\n gitOptions['--push-option'] = pushOptions;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, gitOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n incCountValue('HourlyCommits');\n result = true;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n // v8 ignore else -- TODO: add test #40625\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n /* v8 ignore else -- TODO: add test #40625 */\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n /* v8 ignore next -- will never happen */\n const { treeSha } = treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n\nasync function localBranchExists(branchName: string): Promise<boolean> {\n await syncGit();\n const localBranches = await git.branchLocal();\n return localBranches.all.includes(branchName);\n}\n\n/**\n * Synchronize a forked branch with its upstream counterpart.\n *\n * syncForkWithUpstream updates the fork's branch, to match the corresponding branch in the upstream repository.\n * The steps are:\n * 1. Check if the branch exists locally.\n * 2. If the branch exists locally: checkout the local branch.\n * 3. If the branch does _not_ exist locally: checkout the upstream branch.\n * 4. Reset the local branch to match the upstream branch.\n * 5. Force push the (updated) local branch to the origin repository.\n *\n * @param {string} branchName - The name of the branch to synchronize.\n * @returns A promise that resolves to True if the synchronization is successful, or `false` if an error occurs.\n */\nexport async function syncForkWithUpstream(branchName: string): Promise<void> {\n if (!config.upstreamUrl) {\n return;\n }\n logger.debug(\n `Synchronizing fork with \"${RENOVATE_FORK_UPSTREAM}\" remote for branch ${branchName}`,\n );\n const remotes = await getRemotes();\n /* v8 ignore if -- this should not be possible if upstreamUrl exists */\n if (!remotes.some((r) => r === RENOVATE_FORK_UPSTREAM)) {\n throw new Error('No upstream remote exists, cannot sync fork');\n }\n try {\n await git.fetch([RENOVATE_FORK_UPSTREAM]);\n if (await localBranchExists(branchName)) {\n await checkoutBranch(branchName);\n } else {\n await checkoutBranchFromRemote(branchName, RENOVATE_FORK_UPSTREAM);\n }\n await resetHardFromRemote(`${RENOVATE_FORK_UPSTREAM}/${branchName}`);\n await forcePushToRemote(branchName, 'origin');\n } catch (err) /* v8 ignore next -- shouldn't happen */ {\n logger.error({ err }, 'Error synchronizing fork');\n throw new Error(UNKNOWN_ERROR);\n }\n}\n\nexport async function getRemotes(): Promise<string[]> {\n logger.debug('git.getRemotes()');\n try {\n await syncGit();\n const remotes = await git.getRemotes();\n logger.debug(`Found remotes: ${remotes.map((r) => r.name).join(', ')}`);\n return remotes.map((remote) => remote.name);\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, 'Error getting remotes');\n throw err;\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../lib/util/git/index.ts"],"sourcesContent":["import URL from 'node:url';\nimport { isBoolean, isNonEmptyObject, isString } from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport { DateTime } from 'luxon';\nimport semver from 'semver';\nimport type { Options, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport { setTimeout } from 'timers/promises';\nimport upath from 'upath';\nimport { getConfigFileNames } from '../../config/app-strings.ts';\nimport { GlobalConfig } from '../../config/global.ts';\nimport type { RenovateConfig } from '../../config/types.ts';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n UNKNOWN_ERROR,\n} from '../../constants/error-messages.ts';\nimport { instrument } from '../../instrumentation/index.ts';\nimport { withInstrumenting } from '../../instrumentation/with-instrumenting.ts';\nimport { logger } from '../../logger/index.ts';\nimport { ExternalHostError } from '../../types/errors/external-host-error.ts';\nimport type { GitProtocol } from '../../types/git.ts';\nimport { incCountValue, incLimitedValue } from '../../workers/global/limits.ts';\nimport { getCache } from '../cache/repository/index.ts';\nimport { getEnv } from '../env.ts';\nimport { getChildEnv } from '../exec/utils.ts';\nimport { newlineRegex, regEx } from '../regex.ts';\nimport { matchRegexOrGlobList } from '../string-match.ts';\nimport { logWarningIfUnicodeHiddenCharactersInPackageFile } from '../unicode.ts';\nimport { getGitEnvironmentVariables } from './auth.ts';\nimport { parseGitAuthor } from './author.ts';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache.ts';\nimport { getNoVerify, simpleGitConfig } from './config.ts';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache.ts';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error.ts';\nimport type { InstrumentedSimpleGit } from './instrument.ts';\nimport { instrumentGit } from './instrument.ts';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache.ts';\nimport { configSigningKey, writePrivateKey } from './private-key.ts';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types.ts';\n\nexport { setNoVerify } from './config.ts';\nexport { setPrivateKey } from './private-key.ts';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\nexport const RENOVATE_FORK_UPSTREAM = 'renovate-fork-upstream';\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n throw lastError!;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: InstrumentedSimpleGit): Promise<string> {\n logger.debug('getDefaultBranch()');\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore next -- TODO: add test #40625 */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n\n return res.replace('origin/', '').trim();\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'Error getting default branch');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn('Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: InstrumentedSimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = instrumentGit(simpleGit());\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore if -- TODO: add test #40625 */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(preferUpstream = true): Promise<void> {\n config.branchCommits = {};\n const url =\n preferUpstream && config.upstreamUrl ? config.upstreamUrl : config.url;\n logger.debug(`fetchBranchCommits(): url=${url}`);\n const opts = ['ls-remote', '--heads', url];\n const localDir = GlobalConfig.get('localDir')!;\n const repoExists = await fs.pathExists(upath.join(localDir, '.git/HEAD'));\n if (config.extraCloneOpts && !repoExists) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables? use `getChildEnv` instead?\n git = instrumentGit(\n simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n }),\n );\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next -- TODO: add test #40625 */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore if -- TODO: add test #40625 */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n const gitEnv = getChildEnv({ env: getGitEnvironmentVariables() });\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.env(gitEnv).submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport const syncGit = withInstrumenting(\n { name: 'syncGit' },\n async function (): Promise<void> {\n if (gitInitialized) {\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`syncGit(): Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n await instrument('fetch', async () => {\n logger.debug(\n `syncGit(): Found existing git repository, attempting git fetch`,\n );\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error, falling back to git clone');\n }\n });\n }\n if (clone) {\n await instrument('clone', async () => {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await instrument(`fs.emptyDir(${localDir})`, () =>\n fs.emptyDir(localDir),\n );\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() =>\n instrument('emptyDirAndClone', emptyDirAndClone),\n );\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n });\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await instrument('cloneSubmodules', () =>\n cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter),\n );\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test #40625 */\n delete getCache()?.semanticCommits;\n\n // If upstreamUrl is set then the bot is running in fork mode\n // The \"upstream\" remote is the original repository which was forked from\n if (config.upstreamUrl) {\n const { upstreamUrl } = config;\n await instrument('sync with upstreamUrl', async () => {\n logger.debug(\n `Bringing default branch up-to-date with ${RENOVATE_FORK_UPSTREAM}, to get latest config`,\n );\n // Add remote if it does not exist\n const remotes = await git.getRemotes(true);\n // v8 ignore else -- TODO: add test #40625\n if (!remotes.some((remote) => remote.name === RENOVATE_FORK_UPSTREAM)) {\n logger.debug(`Adding remote ${RENOVATE_FORK_UPSTREAM}`);\n await git.addRemote(RENOVATE_FORK_UPSTREAM, upstreamUrl);\n }\n await syncForkWithUpstream(config.currentBranch);\n await fetchBranchCommits(false);\n });\n }\n\n config.currentBranchSha = (\n await git.revparse('HEAD')\n ).trim() as LongCommitSha;\n logger.debug(`Current branch SHA: ${config.currentBranchSha}`);\n },\n);\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (isString(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits?.[branchName] || null;\n}\n\n// Return the date of the latest commit for a branch\nexport async function getBranchUpdateDate(\n branchName: string,\n): Promise<DateTime | null> {\n const branchSha = config.branchCommits[branchName];\n if (!branchSha) {\n return null;\n }\n await syncGit();\n try {\n return await getCommitDate(branchSha);\n } catch (err) {\n logger.debug({ err, branchName }, 'Error getting branch update date');\n return null;\n }\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n // v8 ignore else -- TODO: add test #40625\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n '--no-merges': null,\n });\n return res.all.map((commit) => commit.message);\n } catch /* v8 ignore next -- TODO: add test #40625 */ {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = await getCommitDate(config.currentBranchSha);\n // v8 ignore else -- TODO: add test #40625\n if (latestCommitDate) {\n logger.debug(\n { branchName, latestCommitDate, sha: config.currentBranchSha },\n 'latest commit',\n );\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function checkoutBranchFromRemote(\n branchName: string,\n remoteName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Checking out branch ${branchName} from remote ${remoteName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkoutBranch(branchName, `${remoteName}/${branchName}`),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.revparse('HEAD')\n ).trim() as LongCommitSha;\n logger.debug(`Checked out branch ${branchName} from remote ${remoteName}`);\n config.branchCommits[branchName] = config.currentBranchSha;\n return config.currentBranchSha;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function resetHardFromRemote(\n remoteAndBranch: string,\n): Promise<void> {\n try {\n const resetLog = await git.reset(['--hard', remoteAndBranch]);\n logger.debug({ resetLog }, 'git reset log');\n } catch (err) {\n logger.error({ err }, 'Error during git reset --hard');\n throw err;\n }\n}\n\nexport async function forcePushToRemote(\n branchName: string,\n remote: string,\n): Promise<void> {\n try {\n const pushLog = await git.push([remote, branchName, '--force']);\n logger.debug({ pushLog }, 'git push log');\n } catch (err) {\n logger.error({ err }, 'Error during git push --force');\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', `refs/heads/${branch}`]);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore if -- TODO: add test #40625 */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(isString)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug(\n `branch.isBehindBase(): using git to calculate against baseBranch \"${baseBranch}\"`,\n );\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug(\n `branch.isModified(): using git to calculate against baseBranch \"${baseBranch}\"`,\n );\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n // v8 ignore else -- TODO: add test #40625\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { baseBranch, branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBoolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug(\n `branch.isConflicted(): using git to calculate against baseBranch ${baseBranch}`,\n );\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore if -- TODO: add test #40625 */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n await deleteLocalBranch(branchName);\n /* v8 ignore next -- TODO: add test #40625 (always throws) */\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nasync function getCommitDate(ref: LongCommitSha | string): Promise<DateTime> {\n const output = await git.show(['-s', '--format=%cI', ref]);\n return DateTime.fromISO(output.trim()).toUTC();\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await getCommitDate('origin/' + branchName);\n return time.toJSDate();\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport function getBranchFiles(branchName: string): Promise<string[] | null> {\n return getBranchFilesFromRef(`origin/${branchName}`);\n}\n\nexport function getBranchFilesFromCommit(\n referenceCommit: LongCommitSha,\n): Promise<string[] | null> {\n return getBranchFilesFromRef(referenceCommit);\n}\n\nasync function getBranchFilesFromRef(\n refName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([refName, `${refName}^`]),\n );\n return diff.files.map((file) => file.file);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, 'getBranchFilesFromRef error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n\n logWarningIfUnicodeHiddenCharactersInPackageFile(filePath, content);\n\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore if -- TODO: add test #40625 */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n /* v8 ignore else -- TODO: add test #40625 */\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next -- TODO: add test #40625 */\n const addParams =\n fileName === getConfigFileNames()[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n isNonEmptyObject(commitRes.summary) &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n pushOptions,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const gitOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n gitOptions['--no-verify'] = null;\n }\n if (pushOptions) {\n gitOptions['--push-option'] = pushOptions;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, gitOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n incCountValue('HourlyCommits');\n result = true;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n // v8 ignore else -- TODO: add test #40625\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n // v8 ignore else -- TODO: add test #40625\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n /* v8 ignore else -- TODO: add test #40625 */\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n } catch (err) /* v8 ignore next -- TODO: add test #40625 */ {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n /* v8 ignore next -- will never happen */\n const { treeSha } = treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n\nasync function localBranchExists(branchName: string): Promise<boolean> {\n await syncGit();\n const localBranches = await git.branchLocal();\n return localBranches.all.includes(branchName);\n}\n\n/**\n * Synchronize a forked branch with its upstream counterpart.\n *\n * syncForkWithUpstream updates the fork's branch, to match the corresponding branch in the upstream repository.\n * The steps are:\n * 1. Check if the branch exists locally.\n * 2. If the branch exists locally: checkout the local branch.\n * 3. If the branch does _not_ exist locally: checkout the upstream branch.\n * 4. Reset the local branch to match the upstream branch.\n * 5. Force push the (updated) local branch to the origin repository.\n *\n * @param {string} branchName - The name of the branch to synchronize.\n * @returns A promise that resolves to True if the synchronization is successful, or `false` if an error occurs.\n */\nexport async function syncForkWithUpstream(branchName: string): Promise<void> {\n if (!config.upstreamUrl) {\n return;\n }\n logger.debug(\n `Synchronizing fork with \"${RENOVATE_FORK_UPSTREAM}\" remote for branch ${branchName}`,\n );\n const remotes = await getRemotes();\n /* v8 ignore if -- this should not be possible if upstreamUrl exists */\n if (!remotes.some((r) => r === RENOVATE_FORK_UPSTREAM)) {\n throw new Error('No upstream remote exists, cannot sync fork');\n }\n try {\n await git.fetch([RENOVATE_FORK_UPSTREAM]);\n if (await localBranchExists(branchName)) {\n await checkoutBranch(branchName);\n } else {\n await checkoutBranchFromRemote(branchName, RENOVATE_FORK_UPSTREAM);\n }\n await resetHardFromRemote(`${RENOVATE_FORK_UPSTREAM}/${branchName}`);\n await forcePushToRemote(branchName, 'origin');\n } catch (err) /* v8 ignore next -- shouldn't happen */ {\n logger.error({ err }, 'Error synchronizing fork');\n throw new Error(UNKNOWN_ERROR);\n }\n}\n\nexport async function getRemotes(): Promise<string[]> {\n logger.debug('git.getRemotes()');\n try {\n await syncGit();\n const remotes = await git.getRemotes();\n logger.debug(`Found remotes: ${remotes.map((r) => r.name).join(', ')}`);\n return remotes.map((remote) => remote.name);\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, 'Error getting remotes');\n throw err;\n }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
package/renovate-schema.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
-
"title": "JSON schema for Renovate 43.
|
|
3
|
+
"title": "JSON schema for Renovate 43.141.0 config files (https://renovatebot.com/)",
|
|
4
4
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
5
|
-
"x-renovate-version": "43.
|
|
5
|
+
"x-renovate-version": "43.141.0",
|
|
6
6
|
"allowComments": true,
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|