renovate 41.148.1 → 41.148.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config-validator.js +0 -0
- package/dist/renovate.js +0 -0
- package/dist/util/merge-confidence/index.js +3 -1
- package/dist/util/merge-confidence/index.js.map +1 -1
- package/dist/workers/repository/finalize/prune.js +1 -1
- package/dist/workers/repository/finalize/prune.js.map +1 -1
- package/package.json +58 -80
- package/renovate-schema.json +2 -1
package/dist/config-validator.js
CHANGED
File without changes
|
package/dist/renovate.js
CHANGED
File without changes
|
@@ -115,7 +115,9 @@ async function queryApi(datasource, packageName, currentVersion, newVersion) {
|
|
115
115
|
if (is_1.default.nullOrUndefined(apiBaseUrl) || is_1.default.nullOrUndefined(token)) {
|
116
116
|
return 'neutral';
|
117
117
|
}
|
118
|
-
const escapedPackageName = packageName
|
118
|
+
const escapedPackageName = packageName
|
119
|
+
.replace((0, regex_1.regEx)(/\//g), '%2f')
|
120
|
+
.replace((0, regex_1.regEx)(/:/g), '%3A');
|
119
121
|
const url = (0, url_1.joinUrlParts)(apiBaseUrl, 'api/mc/json', datasource, escapedPackageName, currentVersion, newVersion);
|
120
122
|
const cacheKey = `${token}:${url}`;
|
121
123
|
const cachedResult = await packageCache.get(hostType, cacheKey);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/merge-confidence/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { supportedDatasources as presetSupportedDatasources } from '../../config/presets/internal/merge-confidence';\nimport type { AllConfig, UpdateType } from '../../config/types';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as packageCache from '../cache/package';\nimport * as hostRules from '../host-rules';\nimport { Http } from '../http';\nimport { memCacheProvider } from '../http/cache/memory-http-cache-provider';\nimport { regEx } from '../regex';\nimport { ensureTrailingSlash, joinUrlParts } from '../url';\nimport { MERGE_CONFIDENCE } from './common';\nimport type { MergeConfidence } from './types';\n\nconst hostType = 'merge-confidence';\nconst http = new Http(hostType);\nlet token: string | undefined;\nlet apiBaseUrl: string | undefined;\nlet supportedDatasources: string[] = [];\n\nexport const confidenceLevels: Record<MergeConfidence, number> = {\n low: -1,\n neutral: 0,\n high: 1,\n 'very high': 2,\n};\n\nexport function initConfig({\n mergeConfidenceEndpoint,\n mergeConfidenceDatasources,\n}: AllConfig): void {\n apiBaseUrl = getApiBaseUrl(mergeConfidenceEndpoint);\n token = getApiToken();\n\n supportedDatasources =\n mergeConfidenceDatasources ?? presetSupportedDatasources;\n\n if (!is.nullOrUndefined(token)) {\n logger.debug(`Merge confidence token found for ${apiBaseUrl}`);\n }\n}\n\nexport function resetConfig(): void {\n token = undefined;\n apiBaseUrl = undefined;\n supportedDatasources = [];\n}\n\nexport function isMergeConfidence(value: string): value is MergeConfidence {\n return MERGE_CONFIDENCE.includes(value as MergeConfidence);\n}\n\nexport function isActiveConfidenceLevel(confidence: string): boolean {\n return isMergeConfidence(confidence) && confidence !== 'low';\n}\n\nexport function satisfiesConfidenceLevel(\n confidence: MergeConfidence,\n minimumConfidence: MergeConfidence,\n): boolean {\n return confidenceLevels[confidence] >= confidenceLevels[minimumConfidence];\n}\n\nconst updateTypeConfidenceMapping: Record<UpdateType, MergeConfidence | null> =\n {\n pin: 'high',\n digest: 'neutral',\n pinDigest: 'high',\n bump: 'neutral',\n lockFileMaintenance: 'neutral',\n lockfileUpdate: 'neutral',\n rollback: 'neutral',\n replacement: 'neutral',\n major: null,\n minor: null,\n patch: null,\n };\n\n/**\n * Retrieves the merge confidence of a package update if the merge confidence API is enabled. Otherwise, undefined is returned.\n *\n * @param datasource\n * @param packageName\n * @param currentVersion\n * @param newVersion\n * @param updateType\n *\n * @returns The merge confidence level for the given package release.\n * @throws {ExternalHostError} If a request has been made and an error occurs during the request, such as a timeout, connection reset, authentication failure, or internal server error.\n */\nexport async function getMergeConfidenceLevel(\n datasource: string,\n packageName: string,\n currentVersion: string,\n newVersion: string,\n updateType: UpdateType,\n): Promise<MergeConfidence | undefined> {\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n return undefined;\n }\n\n if (!supportedDatasources.includes(datasource)) {\n return undefined;\n }\n\n if (!(currentVersion && newVersion && updateType)) {\n return 'neutral';\n }\n\n const mappedConfidence = updateTypeConfidenceMapping[updateType];\n if (mappedConfidence) {\n return mappedConfidence;\n }\n\n return await queryApi(datasource, packageName, currentVersion, newVersion);\n}\n\n/**\n * Queries the Merge Confidence API with the given package release information.\n *\n * @param datasource\n * @param packageName\n * @param currentVersion\n * @param newVersion\n *\n * @returns The merge confidence level for the given package release.\n * @throws {ExternalHostError} if a timeout or connection reset error, authentication failure, or internal server error occurs during the request.\n *\n * @remarks\n * Results are cached for 60 minutes to reduce the number of API calls.\n */\nasync function queryApi(\n datasource: string,\n packageName: string,\n currentVersion: string,\n newVersion: string,\n): Promise<MergeConfidence> {\n // istanbul ignore if: defensive, already been validated before calling this function\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n return 'neutral';\n }\n\n const escapedPackageName = packageName.replace(regEx(/\\//g), '%2f');\n const url = joinUrlParts(\n apiBaseUrl,\n 'api/mc/json',\n datasource,\n escapedPackageName,\n currentVersion,\n newVersion,\n );\n const cacheKey = `${token}:${url}`;\n const cachedResult = await packageCache.get(hostType, cacheKey);\n\n // istanbul ignore if\n if (cachedResult) {\n logger.debug(\n {\n datasource,\n packageName,\n currentVersion,\n newVersion,\n cachedResult,\n },\n 'using merge confidence cached result',\n );\n return cachedResult;\n }\n\n let confidence: MergeConfidence = 'neutral';\n try {\n const res = (\n await http.getJsonUnchecked<{ confidence: MergeConfidence }>(url, {\n cacheProvider: memCacheProvider,\n })\n ).body;\n if (isMergeConfidence(res.confidence)) {\n confidence = res.confidence;\n }\n } catch (err) {\n apiErrorHandler(err);\n }\n\n await packageCache.set(hostType, cacheKey, confidence, 60);\n return confidence;\n}\n\n/**\n * Checks the health of the Merge Confidence API by attempting to authenticate with it.\n *\n * @returns Resolves when the API health check is completed successfully.\n *\n * @throws {ExternalHostError} if a timeout, connection reset error, authentication failure, or internal server error occurs during the request.\n *\n * @remarks\n * This function first checks that the API base URL and an authentication bearer token are defined before attempting to\n * authenticate with the API. If either the base URL or token is not defined, it will immediately return\n * without making a request.\n */\nexport async function initMergeConfidence(config: AllConfig): Promise<void> {\n initConfig(config);\n\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n logger.trace('merge confidence API usage is disabled');\n return;\n }\n\n const url = joinUrlParts(apiBaseUrl, 'api/mc/availability');\n try {\n await http.get(url);\n } catch (err) {\n apiErrorHandler(err);\n }\n\n logger.debug(\n { supportedDatasources },\n 'merge confidence API - successfully authenticated',\n );\n return;\n}\n\nfunction getApiBaseUrl(mergeConfidenceEndpoint: string | undefined): string {\n const defaultBaseUrl = 'https://developer.mend.io/';\n const baseFromEnv = mergeConfidenceEndpoint ?? defaultBaseUrl;\n\n try {\n const parsedBaseUrl = new URL(baseFromEnv).toString();\n logger.trace(\n { baseUrl: parsedBaseUrl },\n 'using merge confidence API base found in environment variables',\n );\n return ensureTrailingSlash(parsedBaseUrl);\n } catch (err) {\n logger.warn(\n { err, baseFromEnv },\n 'invalid merge confidence API base URL found in environment variables - using default value instead',\n );\n return defaultBaseUrl;\n }\n}\n\nexport function getApiToken(): string | undefined {\n return hostRules.find({\n url: apiBaseUrl,\n hostType,\n })?.token;\n}\n\n/**\n * Handles errors returned by the Merge Confidence API.\n *\n * @param err - The error object returned by the API.\n * @throws {ExternalHostError} if a timeout or connection reset error, authentication failure, or internal server error occurs during the request.\n */\nfunction apiErrorHandler(err: any): void {\n if (err.code === 'ETIMEDOUT' || err.code === 'ECONNRESET') {\n logger.error({ err }, 'merge confidence API request failed - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n if (err.statusCode === 403) {\n logger.error({ err }, 'merge confidence API token rejected - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.error({ err }, 'merge confidence API failure: 5xx - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n logger.warn({ err }, 'error fetching merge confidence data');\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/merge-confidence/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { supportedDatasources as presetSupportedDatasources } from '../../config/presets/internal/merge-confidence';\nimport type { AllConfig, UpdateType } from '../../config/types';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport * as packageCache from '../cache/package';\nimport * as hostRules from '../host-rules';\nimport { Http } from '../http';\nimport { memCacheProvider } from '../http/cache/memory-http-cache-provider';\nimport { regEx } from '../regex';\nimport { ensureTrailingSlash, joinUrlParts } from '../url';\nimport { MERGE_CONFIDENCE } from './common';\nimport type { MergeConfidence } from './types';\n\nconst hostType = 'merge-confidence';\nconst http = new Http(hostType);\nlet token: string | undefined;\nlet apiBaseUrl: string | undefined;\nlet supportedDatasources: string[] = [];\n\nexport const confidenceLevels: Record<MergeConfidence, number> = {\n low: -1,\n neutral: 0,\n high: 1,\n 'very high': 2,\n};\n\nexport function initConfig({\n mergeConfidenceEndpoint,\n mergeConfidenceDatasources,\n}: AllConfig): void {\n apiBaseUrl = getApiBaseUrl(mergeConfidenceEndpoint);\n token = getApiToken();\n\n supportedDatasources =\n mergeConfidenceDatasources ?? presetSupportedDatasources;\n\n if (!is.nullOrUndefined(token)) {\n logger.debug(`Merge confidence token found for ${apiBaseUrl}`);\n }\n}\n\nexport function resetConfig(): void {\n token = undefined;\n apiBaseUrl = undefined;\n supportedDatasources = [];\n}\n\nexport function isMergeConfidence(value: string): value is MergeConfidence {\n return MERGE_CONFIDENCE.includes(value as MergeConfidence);\n}\n\nexport function isActiveConfidenceLevel(confidence: string): boolean {\n return isMergeConfidence(confidence) && confidence !== 'low';\n}\n\nexport function satisfiesConfidenceLevel(\n confidence: MergeConfidence,\n minimumConfidence: MergeConfidence,\n): boolean {\n return confidenceLevels[confidence] >= confidenceLevels[minimumConfidence];\n}\n\nconst updateTypeConfidenceMapping: Record<UpdateType, MergeConfidence | null> =\n {\n pin: 'high',\n digest: 'neutral',\n pinDigest: 'high',\n bump: 'neutral',\n lockFileMaintenance: 'neutral',\n lockfileUpdate: 'neutral',\n rollback: 'neutral',\n replacement: 'neutral',\n major: null,\n minor: null,\n patch: null,\n };\n\n/**\n * Retrieves the merge confidence of a package update if the merge confidence API is enabled. Otherwise, undefined is returned.\n *\n * @param datasource\n * @param packageName\n * @param currentVersion\n * @param newVersion\n * @param updateType\n *\n * @returns The merge confidence level for the given package release.\n * @throws {ExternalHostError} If a request has been made and an error occurs during the request, such as a timeout, connection reset, authentication failure, or internal server error.\n */\nexport async function getMergeConfidenceLevel(\n datasource: string,\n packageName: string,\n currentVersion: string,\n newVersion: string,\n updateType: UpdateType,\n): Promise<MergeConfidence | undefined> {\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n return undefined;\n }\n\n if (!supportedDatasources.includes(datasource)) {\n return undefined;\n }\n\n if (!(currentVersion && newVersion && updateType)) {\n return 'neutral';\n }\n\n const mappedConfidence = updateTypeConfidenceMapping[updateType];\n if (mappedConfidence) {\n return mappedConfidence;\n }\n\n return await queryApi(datasource, packageName, currentVersion, newVersion);\n}\n\n/**\n * Queries the Merge Confidence API with the given package release information.\n *\n * @param datasource\n * @param packageName\n * @param currentVersion\n * @param newVersion\n *\n * @returns The merge confidence level for the given package release.\n * @throws {ExternalHostError} if a timeout or connection reset error, authentication failure, or internal server error occurs during the request.\n *\n * @remarks\n * Results are cached for 60 minutes to reduce the number of API calls.\n */\nasync function queryApi(\n datasource: string,\n packageName: string,\n currentVersion: string,\n newVersion: string,\n): Promise<MergeConfidence> {\n // istanbul ignore if: defensive, already been validated before calling this function\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n return 'neutral';\n }\n\n const escapedPackageName = packageName\n .replace(regEx(/\\//g), '%2f')\n .replace(regEx(/:/g), '%3A');\n const url = joinUrlParts(\n apiBaseUrl,\n 'api/mc/json',\n datasource,\n escapedPackageName,\n currentVersion,\n newVersion,\n );\n const cacheKey = `${token}:${url}`;\n const cachedResult = await packageCache.get(hostType, cacheKey);\n\n // istanbul ignore if\n if (cachedResult) {\n logger.debug(\n {\n datasource,\n packageName,\n currentVersion,\n newVersion,\n cachedResult,\n },\n 'using merge confidence cached result',\n );\n return cachedResult;\n }\n\n let confidence: MergeConfidence = 'neutral';\n try {\n const res = (\n await http.getJsonUnchecked<{ confidence: MergeConfidence }>(url, {\n cacheProvider: memCacheProvider,\n })\n ).body;\n if (isMergeConfidence(res.confidence)) {\n confidence = res.confidence;\n }\n } catch (err) {\n apiErrorHandler(err);\n }\n\n await packageCache.set(hostType, cacheKey, confidence, 60);\n return confidence;\n}\n\n/**\n * Checks the health of the Merge Confidence API by attempting to authenticate with it.\n *\n * @returns Resolves when the API health check is completed successfully.\n *\n * @throws {ExternalHostError} if a timeout, connection reset error, authentication failure, or internal server error occurs during the request.\n *\n * @remarks\n * This function first checks that the API base URL and an authentication bearer token are defined before attempting to\n * authenticate with the API. If either the base URL or token is not defined, it will immediately return\n * without making a request.\n */\nexport async function initMergeConfidence(config: AllConfig): Promise<void> {\n initConfig(config);\n\n if (is.nullOrUndefined(apiBaseUrl) || is.nullOrUndefined(token)) {\n logger.trace('merge confidence API usage is disabled');\n return;\n }\n\n const url = joinUrlParts(apiBaseUrl, 'api/mc/availability');\n try {\n await http.get(url);\n } catch (err) {\n apiErrorHandler(err);\n }\n\n logger.debug(\n { supportedDatasources },\n 'merge confidence API - successfully authenticated',\n );\n return;\n}\n\nfunction getApiBaseUrl(mergeConfidenceEndpoint: string | undefined): string {\n const defaultBaseUrl = 'https://developer.mend.io/';\n const baseFromEnv = mergeConfidenceEndpoint ?? defaultBaseUrl;\n\n try {\n const parsedBaseUrl = new URL(baseFromEnv).toString();\n logger.trace(\n { baseUrl: parsedBaseUrl },\n 'using merge confidence API base found in environment variables',\n );\n return ensureTrailingSlash(parsedBaseUrl);\n } catch (err) {\n logger.warn(\n { err, baseFromEnv },\n 'invalid merge confidence API base URL found in environment variables - using default value instead',\n );\n return defaultBaseUrl;\n }\n}\n\nexport function getApiToken(): string | undefined {\n return hostRules.find({\n url: apiBaseUrl,\n hostType,\n })?.token;\n}\n\n/**\n * Handles errors returned by the Merge Confidence API.\n *\n * @param err - The error object returned by the API.\n * @throws {ExternalHostError} if a timeout or connection reset error, authentication failure, or internal server error occurs during the request.\n */\nfunction apiErrorHandler(err: any): void {\n if (err.code === 'ETIMEDOUT' || err.code === 'ECONNRESET') {\n logger.error({ err }, 'merge confidence API request failed - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n if (err.statusCode === 403) {\n logger.error({ err }, 'merge confidence API token rejected - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n if (err.statusCode >= 500 && err.statusCode < 600) {\n logger.error({ err }, 'merge confidence API failure: 5xx - aborting run');\n throw new ExternalHostError(err, hostType);\n }\n\n logger.warn({ err }, 'error fetching merge confidence data');\n}\n"]}
|
@@ -74,7 +74,7 @@ async function cleanUpBranches(config, remainingBranches) {
|
|
74
74
|
}
|
75
75
|
}
|
76
76
|
else if (branchIsModified) {
|
77
|
-
logger_1.logger.debug('Orphan Branch is modified - skipping branch deletion');
|
77
|
+
logger_1.logger.debug({ branch: branchName }, 'Orphan Branch is modified - skipping branch deletion');
|
78
78
|
}
|
79
79
|
else if (global_1.GlobalConfig.get('dryRun')) {
|
80
80
|
logger_1.logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../../lib/workers/repository/finalize/prune.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport type { RenovateConfig } from '../../../config/types';\nimport { REPOSITORY_CHANGED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { platform } from '../../../modules/platform';\nimport { ensureComment } from '../../../modules/platform/comment';\nimport { scm } from '../../../modules/platform/scm';\nimport { getBranchList, setUserRepoConfig } from '../../../util/git';\nimport { escapeRegExp, regEx } from '../../../util/regex';\nimport { uniqueStrings } from '../../../util/string';\nimport { getReconfigureBranchName } from '../reconfigure/utils';\n\nasync function cleanUpBranches(\n config: RenovateConfig,\n remainingBranches: string[],\n): Promise<void> {\n if (!config.pruneStaleBranches) {\n logger.debug('Branch/PR pruning is disabled - skipping');\n return;\n }\n // set Git author in case the repository is not initialized yet\n setUserRepoConfig(config);\n\n // calculate regex to extract base branch from branch name\n const baseBranchRe = calculateBaseBranchRegex(config);\n\n for (const branchName of remainingBranches) {\n try {\n // get base branch from branch name if base branches are configured\n // use default branch if no base branches are configured\n // use defaul branch name if no match (can happen when base branches are configured later)\n const baseBranch =\n baseBranchRe?.exec(branchName)?.[1] ?? config.defaultBranch!;\n const pr = await platform.findPr({\n branchName,\n state: 'open',\n targetBranch: baseBranch,\n });\n const branchIsModified = await scm.isBranchModified(\n branchName,\n baseBranch,\n );\n if (pr) {\n if (branchIsModified) {\n logger.debug(\n { prNo: pr.number, prTitle: pr.title },\n 'Branch is modified - skipping PR autoclosing',\n );\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR title and ensure comment.`);\n } else {\n if (!pr.title.endsWith('- abandoned')) {\n const newPrTitle = pr.title + ' - abandoned';\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'open',\n });\n }\n\n await ensureComment({\n number: pr.number,\n topic: 'Autoclosing Skipped',\n content:\n 'This PR has been flagged for autoclosing. However, it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.',\n });\n }\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(\n { prNo: pr.number, prTitle: pr.title },\n `DRY-RUN: Would autoclose PR`,\n );\n } else {\n logger.info(\n { branchName, prNo: pr.number, prTitle: pr.title },\n 'Autoclosing PR',\n );\n let newPrTitle = pr.title;\n if (!pr.title.endsWith('- autoclosed')) {\n newPrTitle += ' - autoclosed';\n }\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'closed',\n });\n await scm.deleteBranch(branchName);\n }\n } else if (branchIsModified) {\n logger.debug('Orphan Branch is modified - skipping branch deletion');\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`);\n } else {\n logger.info({ branch: branchName }, `Deleting orphan branch`);\n await scm.deleteBranch(branchName);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.message === 'config-validation') {\n logger.debug(\n 'Cannot prune branch due to collision between tags and branch names',\n );\n } else if (err.message?.includes(\"bad revision 'origin/\")) {\n logger.debug(\n { branchName },\n 'Branch not found on origin when attempting to prune',\n );\n } else if (err.message !== REPOSITORY_CHANGED) {\n logger.warn({ err, branch: branchName }, 'Error pruning branch');\n }\n }\n }\n}\n\n/**\n * Calculates a {RegExp} to extract the base branch from a branch name if base branches are configured.\n * @param config Renovate configuration\n */\nfunction calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {\n if (!config.baseBranchPatterns?.length) {\n return null;\n }\n\n // calculate possible branch prefixes and escape for regex\n const branchPrefixes = [config.branchPrefix, config.branchPrefixOld]\n .filter(is.nonEmptyStringAndNotWhitespace)\n .filter(uniqueStrings)\n .map(escapeRegExp);\n\n // calculate possible base branches and escape for regex\n const baseBranches = config.baseBranchPatterns.map(escapeRegExp);\n\n // create regex to extract base branche from branch name\n const baseBranchRe = regEx(\n `^(?:${branchPrefixes.join('|')})(${baseBranches.join('|')})-`,\n );\n\n return baseBranchRe;\n}\n\nexport async function pruneStaleBranches(\n config: RenovateConfig,\n branchList: string[] | null | undefined,\n): Promise<void> {\n logger.debug('Removing any stale branches');\n logger.trace({ config }, `pruneStaleBranches`);\n // TODO: types (#22198)\n logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded!}`);\n if (!branchList) {\n logger.debug('No branchList');\n return;\n }\n // TODO: types (#22198)\n let renovateBranches = getBranchList().filter(\n (branchName) =>\n branchName.startsWith(config.branchPrefix!) &&\n branchName !== getReconfigureBranchName(config.branchPrefix!),\n );\n if (!renovateBranches?.length) {\n logger.debug('No renovate branches found');\n return;\n }\n logger.debug(\n {\n branchList: branchList?.sort(),\n renovateBranches: renovateBranches?.sort(),\n },\n 'Branch lists',\n );\n // TODO: types (#22198)\n const lockFileBranch = `${config.branchPrefix!}lock-file-maintenance`;\n renovateBranches = renovateBranches.filter(\n (branch) => branch !== lockFileBranch,\n );\n const remainingBranches = renovateBranches.filter(\n (branch) => !branchList.includes(branch),\n );\n logger.debug(`remainingBranches=${String(remainingBranches)}`);\n if (remainingBranches.length === 0) {\n logger.debug('No branches to clean up');\n return;\n }\n\n await cleanUpBranches(config, remainingBranches);\n}\n"]}
|
1
|
+
{"version":3,"file":"prune.js","sourceRoot":"","sources":["../../../../lib/workers/repository/finalize/prune.ts"],"names":[],"mappings":";;AA+IA,gDA4CC;;AA3LD,kEAAkC;AAClC,mDAAsD;AAEtD,sEAAuE;AACvE,4CAAyC;AACzC,wDAAqD;AACrD,+DAAkE;AAClE,uDAAoD;AACpD,2CAAqE;AACrE,+CAA0D;AAC1D,iDAAqD;AACrD,gDAAgE;AAEhE,KAAK,UAAU,eAAe,CAC5B,MAAsB,EACtB,iBAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC/B,eAAM,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IACD,+DAA+D;IAC/D,IAAA,uBAAiB,EAAC,MAAM,CAAC,CAAC;IAE1B,0DAA0D;IAC1D,MAAM,YAAY,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEtD,KAAK,MAAM,UAAU,IAAI,iBAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC;YACH,mEAAmE;YACnE,wDAAwD;YACxD,0FAA0F;YAC1F,MAAM,UAAU,GACd,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,aAAc,CAAC;YAC/D,MAAM,EAAE,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC;gBAC/B,UAAU;gBACV,KAAK,EAAE,MAAM;gBACb,YAAY,EAAE,UAAU;aACzB,CAAC,CAAC;YACH,MAAM,gBAAgB,GAAG,MAAM,SAAG,CAAC,gBAAgB,CACjD,UAAU,EACV,UAAU,CACX,CAAC;YACF,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,gBAAgB,EAAE,CAAC;oBACrB,eAAM,CAAC,KAAK,CACV,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,EACtC,8CAA8C,CAC/C,CAAC;oBACF,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC/B,eAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;4BACtC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,GAAG,cAAc,CAAC;4BAC7C,MAAM,mBAAQ,CAAC,QAAQ,CAAC;gCACtB,MAAM,EAAE,EAAE,CAAC,MAAM;gCACjB,OAAO,EAAE,UAAU;gCACnB,KAAK,EAAE,MAAM;6BACd,CAAC,CAAC;wBACL,CAAC;wBAED,MAAM,IAAA,uBAAa,EAAC;4BAClB,MAAM,EAAE,EAAE,CAAC,MAAM;4BACjB,KAAK,EAAE,qBAAqB;4BAC5B,OAAO,EACL,iMAAiM;yBACpM,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;qBAAM,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACtC,eAAM,CAAC,IAAI,CACT,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,EACtC,6BAA6B,CAC9B,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,EAClD,gBAAgB,CACjB,CAAC;oBACF,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;oBAC1B,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;wBACvC,UAAU,IAAI,eAAe,CAAC;oBAChC,CAAC;oBACD,MAAM,mBAAQ,CAAC,QAAQ,CAAC;wBACtB,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,OAAO,EAAE,UAAU;wBACnB,KAAK,EAAE,QAAQ;qBAChB,CAAC,CAAC;oBACH,MAAM,SAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;iBAAM,IAAI,gBAAgB,EAAE,CAAC;gBAC5B,eAAM,CAAC,KAAK,CACV,EAAE,MAAM,EAAE,UAAU,EAAE,EACtB,sDAAsD,CACvD,CAAC;YACJ,CAAC;iBAAM,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtC,eAAM,CAAC,IAAI,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBAC9D,MAAM,SAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;YACxC,IAAI,GAAG,CAAC,OAAO,KAAK,mBAAmB,EAAE,CAAC;gBACxC,eAAM,CAAC,KAAK,CACV,oEAAoE,CACrE,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;gBAC1D,eAAM,CAAC,KAAK,CACV,EAAE,UAAU,EAAE,EACd,qDAAqD,CACtD,CAAC;YACJ,CAAC;iBAAM,IAAI,GAAG,CAAC,OAAO,KAAK,mCAAkB,EAAE,CAAC;gBAC9C,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,sBAAsB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAAC,MAAsB;IACtD,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0DAA0D;IAC1D,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,eAAe,CAAC;SACjE,MAAM,CAAC,YAAE,CAAC,8BAA8B,CAAC;SACzC,MAAM,CAAC,sBAAa,CAAC;SACrB,GAAG,CAAC,oBAAY,CAAC,CAAC;IAErB,wDAAwD;IACxD,MAAM,YAAY,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;IAEjE,wDAAwD;IACxD,MAAM,YAAY,GAAG,IAAA,aAAK,EACxB,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAC/D,CAAC;IAEF,OAAO,YAAY,CAAC;AACtB,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,UAAuC;IAEvC,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC5C,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC;IAC/C,uBAAuB;IACvB,eAAM,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,eAAgB,EAAE,CAAC,CAAC;IAClE,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,uBAAuB;IACvB,IAAI,gBAAgB,GAAG,IAAA,mBAAa,GAAE,CAAC,MAAM,CAC3C,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,YAAa,CAAC;QAC3C,UAAU,KAAK,IAAA,gCAAwB,EAAC,MAAM,CAAC,YAAa,CAAC,CAChE,CAAC;IACF,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC9B,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO;IACT,CAAC;IACD,eAAM,CAAC,KAAK,CACV;QACE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE;QAC9B,gBAAgB,EAAE,gBAAgB,EAAE,IAAI,EAAE;KAC3C,EACD,cAAc,CACf,CAAC;IACF,uBAAuB;IACvB,MAAM,cAAc,GAAG,GAAG,MAAM,CAAC,YAAa,uBAAuB,CAAC;IACtE,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,CACxC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CACtC,CAAC;IACF,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAC/C,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzC,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAC/D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,eAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACnD,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport type { RenovateConfig } from '../../../config/types';\nimport { REPOSITORY_CHANGED } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport { platform } from '../../../modules/platform';\nimport { ensureComment } from '../../../modules/platform/comment';\nimport { scm } from '../../../modules/platform/scm';\nimport { getBranchList, setUserRepoConfig } from '../../../util/git';\nimport { escapeRegExp, regEx } from '../../../util/regex';\nimport { uniqueStrings } from '../../../util/string';\nimport { getReconfigureBranchName } from '../reconfigure/utils';\n\nasync function cleanUpBranches(\n config: RenovateConfig,\n remainingBranches: string[],\n): Promise<void> {\n if (!config.pruneStaleBranches) {\n logger.debug('Branch/PR pruning is disabled - skipping');\n return;\n }\n // set Git author in case the repository is not initialized yet\n setUserRepoConfig(config);\n\n // calculate regex to extract base branch from branch name\n const baseBranchRe = calculateBaseBranchRegex(config);\n\n for (const branchName of remainingBranches) {\n try {\n // get base branch from branch name if base branches are configured\n // use default branch if no base branches are configured\n // use defaul branch name if no match (can happen when base branches are configured later)\n const baseBranch =\n baseBranchRe?.exec(branchName)?.[1] ?? config.defaultBranch!;\n const pr = await platform.findPr({\n branchName,\n state: 'open',\n targetBranch: baseBranch,\n });\n const branchIsModified = await scm.isBranchModified(\n branchName,\n baseBranch,\n );\n if (pr) {\n if (branchIsModified) {\n logger.debug(\n { prNo: pr.number, prTitle: pr.title },\n 'Branch is modified - skipping PR autoclosing',\n );\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR title and ensure comment.`);\n } else {\n if (!pr.title.endsWith('- abandoned')) {\n const newPrTitle = pr.title + ' - abandoned';\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'open',\n });\n }\n\n await ensureComment({\n number: pr.number,\n topic: 'Autoclosing Skipped',\n content:\n 'This PR has been flagged for autoclosing. However, it is being skipped due to the branch being already modified. Please close/delete it manually or report a bug if you think this is in error.',\n });\n }\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(\n { prNo: pr.number, prTitle: pr.title },\n `DRY-RUN: Would autoclose PR`,\n );\n } else {\n logger.info(\n { branchName, prNo: pr.number, prTitle: pr.title },\n 'Autoclosing PR',\n );\n let newPrTitle = pr.title;\n if (!pr.title.endsWith('- autoclosed')) {\n newPrTitle += ' - autoclosed';\n }\n await platform.updatePr({\n number: pr.number,\n prTitle: newPrTitle,\n state: 'closed',\n });\n await scm.deleteBranch(branchName);\n }\n } else if (branchIsModified) {\n logger.debug(\n { branch: branchName },\n 'Orphan Branch is modified - skipping branch deletion',\n );\n } else if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would delete orphan branch ${branchName}`);\n } else {\n logger.info({ branch: branchName }, `Deleting orphan branch`);\n await scm.deleteBranch(branchName);\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.message === 'config-validation') {\n logger.debug(\n 'Cannot prune branch due to collision between tags and branch names',\n );\n } else if (err.message?.includes(\"bad revision 'origin/\")) {\n logger.debug(\n { branchName },\n 'Branch not found on origin when attempting to prune',\n );\n } else if (err.message !== REPOSITORY_CHANGED) {\n logger.warn({ err, branch: branchName }, 'Error pruning branch');\n }\n }\n }\n}\n\n/**\n * Calculates a {RegExp} to extract the base branch from a branch name if base branches are configured.\n * @param config Renovate configuration\n */\nfunction calculateBaseBranchRegex(config: RenovateConfig): RegExp | null {\n if (!config.baseBranchPatterns?.length) {\n return null;\n }\n\n // calculate possible branch prefixes and escape for regex\n const branchPrefixes = [config.branchPrefix, config.branchPrefixOld]\n .filter(is.nonEmptyStringAndNotWhitespace)\n .filter(uniqueStrings)\n .map(escapeRegExp);\n\n // calculate possible base branches and escape for regex\n const baseBranches = config.baseBranchPatterns.map(escapeRegExp);\n\n // create regex to extract base branche from branch name\n const baseBranchRe = regEx(\n `^(?:${branchPrefixes.join('|')})(${baseBranches.join('|')})-`,\n );\n\n return baseBranchRe;\n}\n\nexport async function pruneStaleBranches(\n config: RenovateConfig,\n branchList: string[] | null | undefined,\n): Promise<void> {\n logger.debug('Removing any stale branches');\n logger.trace({ config }, `pruneStaleBranches`);\n // TODO: types (#22198)\n logger.debug(`config.repoIsOnboarded=${config.repoIsOnboarded!}`);\n if (!branchList) {\n logger.debug('No branchList');\n return;\n }\n // TODO: types (#22198)\n let renovateBranches = getBranchList().filter(\n (branchName) =>\n branchName.startsWith(config.branchPrefix!) &&\n branchName !== getReconfigureBranchName(config.branchPrefix!),\n );\n if (!renovateBranches?.length) {\n logger.debug('No renovate branches found');\n return;\n }\n logger.debug(\n {\n branchList: branchList?.sort(),\n renovateBranches: renovateBranches?.sort(),\n },\n 'Branch lists',\n );\n // TODO: types (#22198)\n const lockFileBranch = `${config.branchPrefix!}lock-file-maintenance`;\n renovateBranches = renovateBranches.filter(\n (branch) => branch !== lockFileBranch,\n );\n const remainingBranches = renovateBranches.filter(\n (branch) => !branchList.includes(branch),\n );\n logger.debug(`remainingBranches=${String(remainingBranches)}`);\n if (remainingBranches.length === 0) {\n logger.debug('No branches to clean up');\n return;\n }\n\n await cleanUpBranches(config, remainingBranches);\n}\n"]}
|
package/package.json
CHANGED
@@ -1,68 +1,12 @@
|
|
1
1
|
{
|
2
2
|
"name": "renovate",
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
4
|
-
"version": "41.148.
|
4
|
+
"version": "41.148.3",
|
5
5
|
"type": "commonjs",
|
6
6
|
"bin": {
|
7
7
|
"renovate": "dist/renovate.js",
|
8
8
|
"renovate-config-validator": "dist/config-validator.js"
|
9
9
|
},
|
10
|
-
"scripts": {
|
11
|
-
"build": "run-s clean 'generate:*' 'compile:*' create-json-schema",
|
12
|
-
"build:docker": "tsx tools/docker.ts",
|
13
|
-
"build:docs": "tsx tools/generate-docs.ts",
|
14
|
-
"clean": "rimraf dist tmp",
|
15
|
-
"clean-cache": "node tools/clean-cache.mjs",
|
16
|
-
"compile:ts": "tsc -p tsconfig.app.json",
|
17
|
-
"config-validator": "tsx lib/config-validator.ts",
|
18
|
-
"create-json-schema": "tsx tools/generate-schema.ts && prettier --write --cache 'renovate-schema.json'",
|
19
|
-
"debug": "tsx --inspect-brk lib/renovate.ts",
|
20
|
-
"doc-fix": "run-s markdown-lint-fix prettier-fix",
|
21
|
-
"doc-fix-everything": "run-s doc-fix doc-fence-check lint-documentation",
|
22
|
-
"doc-fence-check": "tsx tools/check-fenced-code.ts",
|
23
|
-
"lint-documentation": "vitest run --coverage false test/docs/**.spec.ts",
|
24
|
-
"lint-other": "vitest run --coverage false test/other/**.spec.ts",
|
25
|
-
"eslint": "eslint . --cache --cache-location .cache/eslint",
|
26
|
-
"eslint-fix": "eslint --cache --cache-location .cache/eslint --fix .",
|
27
|
-
"eslint-ci": "eslint . --cache --cache-strategy content --cache-location .cache/eslint --format gha",
|
28
|
-
"generate": "run-s 'generate:*'",
|
29
|
-
"generate:imports": "node tools/generate-imports.mjs",
|
30
|
-
"git-check": "node tools/check-git-version.mjs",
|
31
|
-
"jest": "GIT_ALLOW_PROTOCOL=file LOG_LEVEL=fatal vitest run --logHeapUsage",
|
32
|
-
"vitest": "GIT_ALLOW_PROTOCOL=file LOG_LEVEL=fatal vitest run --logHeapUsage",
|
33
|
-
"lint": "run-s ls-lint type-check eslint prettier markdown-lint git-check doc-fence-check",
|
34
|
-
"lint-fix": "run-s eslint-fix prettier-fix markdown-lint-fix",
|
35
|
-
"ls-lint": "ls-lint",
|
36
|
-
"markdown-lint": "markdownlint-cli2",
|
37
|
-
"markdown-lint-fix": "markdownlint-cli2 --fix",
|
38
|
-
"mkdocs": "tsx tools/mkdocs.ts",
|
39
|
-
"prepare": "run-s 'prepare:*'",
|
40
|
-
"prepare:husky": "husky",
|
41
|
-
"prepare:generate": "run-s 'generate:*'",
|
42
|
-
"prepare:deps": "node tools/prepare-deps.mjs",
|
43
|
-
"prestart": "run-s 'generate:*'",
|
44
|
-
"pretest": "run-s 'generate:*'",
|
45
|
-
"prettier": "prettier --cache --check '**/*.{ts,js,mjs,json,md,yml}'",
|
46
|
-
"prettier-fix": "prettier --write --cache '**/*.{ts,js,mjs,json,md,yml}'",
|
47
|
-
"release:prepare": "tsx tools/prepare-release.ts",
|
48
|
-
"release:publish": "tsx tools/publish-release.ts",
|
49
|
-
"start": "tsx lib/renovate.ts",
|
50
|
-
"test": "run-s lint test-schema jest",
|
51
|
-
"test-dirty": "git diff --exit-code",
|
52
|
-
"test-e2e": "run-s 'test-e2e:*'",
|
53
|
-
"test-e2e:pack": "pnpm pack",
|
54
|
-
"test-e2e:install": "cd test/e2e && pnpm --ignore-workspace install --no-lockfile --prod",
|
55
|
-
"test-e2e:run": "cd test/e2e && pnpm test",
|
56
|
-
"test-schema": "run-s create-json-schema",
|
57
|
-
"test:docs": "node --test tools/docs/test/**/*.mjs",
|
58
|
-
"schedule-test-shards": "SCHEDULE_TEST_SHARDS=true tsx tools/test-shards.ts",
|
59
|
-
"tsc": "tsc",
|
60
|
-
"type-check": "run-s 'generate:*' 'tsc --noEmit {@}' --",
|
61
|
-
"update-static-data": "run-s 'update-static-data:*'",
|
62
|
-
"update-static-data:distro-info": "node tools/static-data/generate-distro-info.mjs",
|
63
|
-
"update-static-data:lambda-node-schedule": "node tools/static-data/generate-lambda-node-schedule.mjs",
|
64
|
-
"update-static-data:node-schedule": "node tools/static-data/generate-node-schedule.mjs"
|
65
|
-
},
|
66
10
|
"repository": {
|
67
11
|
"type": "git",
|
68
12
|
"url": "git+https://github.com/renovatebot/renovate.git"
|
@@ -174,7 +118,7 @@
|
|
174
118
|
"@qnighy/marshal": "0.1.3",
|
175
119
|
"@renovatebot/detect-tools": "1.2.4",
|
176
120
|
"@renovatebot/kbpgp": "4.0.3",
|
177
|
-
"@renovatebot/osv-offline": "1.
|
121
|
+
"@renovatebot/osv-offline": "1.7.7",
|
178
122
|
"@renovatebot/pep440": "4.2.1",
|
179
123
|
"@renovatebot/ruby-semver": "4.1.2",
|
180
124
|
"@sindresorhus/is": "7.1.0",
|
@@ -272,6 +216,7 @@
|
|
272
216
|
},
|
273
217
|
"devDependencies": {
|
274
218
|
"@containerbase/eslint-plugin": "1.1.14",
|
219
|
+
"@containerbase/semantic-release-pnpm": "1.2.5",
|
275
220
|
"@eslint/js": "9.35.0",
|
276
221
|
"@hyrious/marshal": "0.3.3",
|
277
222
|
"@ls-lint/ls-lint": "2.3.1",
|
@@ -354,30 +299,63 @@
|
|
354
299
|
"vitest": "3.2.4",
|
355
300
|
"vitest-mock-extended": "3.1.0"
|
356
301
|
},
|
357
|
-
"packageManager": "pnpm@10.18.1",
|
358
302
|
"files": [
|
359
303
|
"dist",
|
360
304
|
"renovate-schema.json"
|
361
305
|
],
|
362
|
-
"
|
363
|
-
"
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
"
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
"
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
"
|
380
|
-
|
381
|
-
|
306
|
+
"scripts": {
|
307
|
+
"build": "run-s clean 'generate:*' 'compile:*' create-json-schema",
|
308
|
+
"build:docker": "tsx tools/docker.ts",
|
309
|
+
"build:docs": "tsx tools/generate-docs.ts",
|
310
|
+
"clean": "rimraf dist tmp",
|
311
|
+
"clean-cache": "node tools/clean-cache.mjs",
|
312
|
+
"compile:ts": "tsc -p tsconfig.app.json",
|
313
|
+
"config-validator": "tsx lib/config-validator.ts",
|
314
|
+
"create-json-schema": "tsx tools/generate-schema.ts && prettier --write --cache 'renovate-schema.json'",
|
315
|
+
"debug": "tsx --inspect-brk lib/renovate.ts",
|
316
|
+
"doc-fix": "run-s markdown-lint-fix prettier-fix",
|
317
|
+
"doc-fix-everything": "run-s doc-fix doc-fence-check lint-documentation",
|
318
|
+
"doc-fence-check": "tsx tools/check-fenced-code.ts",
|
319
|
+
"lint-documentation": "vitest run --coverage false test/docs/**.spec.ts",
|
320
|
+
"lint-other": "vitest run --coverage false test/other/**.spec.ts",
|
321
|
+
"eslint": "eslint . --cache --cache-location .cache/eslint",
|
322
|
+
"eslint-fix": "eslint --cache --cache-location .cache/eslint --fix .",
|
323
|
+
"eslint-ci": "eslint . --cache --cache-strategy content --cache-location .cache/eslint --format gha",
|
324
|
+
"generate": "run-s 'generate:*'",
|
325
|
+
"generate:imports": "node tools/generate-imports.mjs",
|
326
|
+
"git-check": "node tools/check-git-version.mjs",
|
327
|
+
"jest": "GIT_ALLOW_PROTOCOL=file LOG_LEVEL=fatal vitest run --logHeapUsage",
|
328
|
+
"vitest": "GIT_ALLOW_PROTOCOL=file LOG_LEVEL=fatal vitest run --logHeapUsage",
|
329
|
+
"lint": "run-s ls-lint type-check eslint prettier markdown-lint git-check doc-fence-check",
|
330
|
+
"lint-fix": "run-s eslint-fix prettier-fix markdown-lint-fix",
|
331
|
+
"ls-lint": "ls-lint",
|
332
|
+
"markdown-lint": "markdownlint-cli2",
|
333
|
+
"markdown-lint-fix": "markdownlint-cli2 --fix",
|
334
|
+
"mkdocs": "tsx tools/mkdocs.ts",
|
335
|
+
"prepare:husky": "husky",
|
336
|
+
"prepare:generate": "run-s 'generate:*'",
|
337
|
+
"prepare:deps": "node tools/prepare-deps.mjs",
|
338
|
+
"prestart": "run-s 'generate:*'",
|
339
|
+
"pretest": "run-s 'generate:*'",
|
340
|
+
"prettier": "prettier --cache --check '**/*.{ts,js,mjs,json,md,yml}'",
|
341
|
+
"prettier-fix": "prettier --write --cache '**/*.{ts,js,mjs,json,md,yml}'",
|
342
|
+
"release:prepare": "tsx tools/prepare-release.ts",
|
343
|
+
"release:publish": "tsx tools/publish-release.ts",
|
344
|
+
"start": "tsx lib/renovate.ts",
|
345
|
+
"test": "run-s lint test-schema jest",
|
346
|
+
"test-dirty": "git diff --exit-code",
|
347
|
+
"test-e2e": "run-s 'test-e2e:*'",
|
348
|
+
"test-e2e:pack": "pnpm pack",
|
349
|
+
"test-e2e:install": "cd test/e2e && pnpm --ignore-workspace install --no-lockfile --prod",
|
350
|
+
"test-e2e:run": "cd test/e2e && pnpm test",
|
351
|
+
"test-schema": "run-s create-json-schema",
|
352
|
+
"test:docs": "node --test tools/docs/test/**/*.mjs",
|
353
|
+
"schedule-test-shards": "SCHEDULE_TEST_SHARDS=true tsx tools/test-shards.ts",
|
354
|
+
"tsc": "tsc",
|
355
|
+
"type-check": "run-s 'generate:*' 'tsc --noEmit {@}' --",
|
356
|
+
"update-static-data": "run-s 'update-static-data:*'",
|
357
|
+
"update-static-data:distro-info": "node tools/static-data/generate-distro-info.mjs",
|
358
|
+
"update-static-data:lambda-node-schedule": "node tools/static-data/generate-lambda-node-schedule.mjs",
|
359
|
+
"update-static-data:node-schedule": "node tools/static-data/generate-node-schedule.mjs"
|
382
360
|
}
|
383
|
-
}
|
361
|
+
}
|
package/renovate-schema.json
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
{
|
2
|
-
"title": "JSON schema for Renovate config files (https://renovatebot.com/)",
|
2
|
+
"title": "JSON schema for Renovate 41.148.3 config files (https://renovatebot.com/)",
|
3
3
|
"$schema": "http://json-schema.org/draft-04/schema#",
|
4
|
+
"x-renovate-version": "41.148.3",
|
4
5
|
"type": "object",
|
5
6
|
"properties": {
|
6
7
|
"abandonmentThreshold": {
|