renovate 41.30.3 → 41.30.5
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/modules/platform/gitea/index.d.ts +1 -1
- package/dist/modules/platform/types.d.ts +6 -1
- package/dist/modules/platform/types.js.map +1 -1
- package/dist/workers/repository/config-migration/pr/index.js +1 -1
- package/dist/workers/repository/config-migration/pr/index.js.map +1 -1
- package/dist/workers/repository/dependency-dashboard.js +1 -1
- package/dist/workers/repository/dependency-dashboard.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/index.js +1 -1
- package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
- package/dist/workers/repository/update/branch/index.js +1 -1
- package/dist/workers/repository/update/branch/index.js.map +1 -1
- package/dist/workers/repository/update/pr/body/index.js +1 -1
- package/dist/workers/repository/update/pr/body/index.js.map +1 -1
- package/dist/workers/repository/update/pr/index.js +1 -1
- package/dist/workers/repository/update/pr/index.js.map +1 -1
- package/package.json +2 -2
@@ -3,4 +3,4 @@ import type { AutodiscoverConfig, BranchStatusConfig, CreatePRConfig, EnsureComm
|
|
3
3
|
export declare const id = "gitea";
|
4
4
|
export declare function resetPlatform(): void;
|
5
5
|
export declare function maxBodyLength(): number;
|
6
|
-
export declare const addAssignees: (number: number, assignees: string[]) => Promise<void>, addReviewers: (number: number, reviewers: string[]) => Promise<void>, createPr: (prConfig: CreatePRConfig) => Promise<Pr | null>, deleteLabel: (number: number, label: string) => Promise<void>, ensureComment: (ensureComment: EnsureCommentConfig) => Promise<boolean>, ensureCommentRemoval: (ensureCommentRemoval: import("../types").EnsureCommentRemovalConfigByTopic | import("../types").EnsureCommentRemovalConfigByContent) => Promise<void>, ensureIssue: (issueConfig: EnsureIssueConfig) => Promise<import("../types").EnsureIssueResult | null>, ensureIssueClosing: (title: string) => Promise<void>, findIssue: (title: string) => Promise<Issue | null>, findPr: (findPRConfig: FindPRConfig) => Promise<Pr | null>, getBranchPr: (branchName: string, targetBranch?: string) => Promise<Pr | null>, getBranchStatus: (branchName: string, internalChecksAsSuccess: boolean) => Promise<BranchStatus>, getBranchStatusCheck: (branchName: string, context: string | null | undefined) => Promise<BranchStatus | null>, getIssue: ((number: number, memCache?: boolean) => Promise<Issue | null>) | undefined, getRawFile: (fileName: string, repoName?: string, branchOrTag?: string) => Promise<string | null>, getJsonFile: (fileName: string, repoName?: string, branchOrTag?: string) => Promise<any>, getIssueList: () => Promise<Issue[]>, getPr: (number: number) => Promise<Pr | null>, massageMarkdown: (prBody: string) => string, getPrList: () => Promise<Pr[]>, getRepos: (config?: AutodiscoverConfig) => Promise<string[]>, initPlatform: (config: PlatformParams) => Promise<PlatformResult>, initRepo: (config: RepoParams) => Promise<RepoResult>, mergePr: (config: MergePRConfig) => Promise<boolean>, setBranchStatus: (branchStatusConfig: BranchStatusConfig) => Promise<void>, updatePr: (prConfig: UpdatePrConfig) => Promise<void>;
|
6
|
+
export declare const addAssignees: (number: number, assignees: string[]) => Promise<void>, addReviewers: (number: number, reviewers: string[]) => Promise<void>, createPr: (prConfig: CreatePRConfig) => Promise<Pr | null>, deleteLabel: (number: number, label: string) => Promise<void>, ensureComment: (ensureComment: EnsureCommentConfig) => Promise<boolean>, ensureCommentRemoval: (ensureCommentRemoval: import("../types").EnsureCommentRemovalConfigByTopic | import("../types").EnsureCommentRemovalConfigByContent) => Promise<void>, ensureIssue: (issueConfig: EnsureIssueConfig) => Promise<import("../types").EnsureIssueResult | null>, ensureIssueClosing: (title: string) => Promise<void>, findIssue: (title: string) => Promise<Issue | null>, findPr: (findPRConfig: FindPRConfig) => Promise<Pr | null>, getBranchPr: (branchName: string, targetBranch?: string) => Promise<Pr | null>, getBranchStatus: (branchName: string, internalChecksAsSuccess: boolean) => Promise<BranchStatus>, getBranchStatusCheck: (branchName: string, context: string | null | undefined) => Promise<BranchStatus | null>, getIssue: ((number: number, memCache?: boolean) => Promise<Issue | null>) | undefined, getRawFile: (fileName: string, repoName?: string, branchOrTag?: string) => Promise<string | null>, getJsonFile: (fileName: string, repoName?: string, branchOrTag?: string) => Promise<any>, getIssueList: () => Promise<Issue[]>, getPr: (number: number) => Promise<Pr | null>, massageMarkdown: (prBody: string, rebaseLabel?: string) => string, getPrList: () => Promise<Pr[]>, getRepos: (config?: AutodiscoverConfig) => Promise<string[]>, initPlatform: (config: PlatformParams) => Promise<PlatformResult>, initRepo: (config: RepoParams) => Promise<RepoResult>, mergePr: (config: MergePRConfig) => Promise<boolean>, setBranchStatus: (branchStatusConfig: BranchStatusConfig) => Promise<void>, updatePr: (prConfig: UpdatePrConfig) => Promise<void>;
|
@@ -205,7 +205,12 @@ export interface Platform {
|
|
205
205
|
getPrList(): Promise<Pr[]>;
|
206
206
|
ensureIssueClosing(title: string): Promise<void>;
|
207
207
|
ensureIssue(issueConfig: EnsureIssueConfig): Promise<EnsureIssueResult | null>;
|
208
|
-
massageMarkdown(prBody: string
|
208
|
+
massageMarkdown(prBody: string,
|
209
|
+
/**
|
210
|
+
* Useful for suggesting the use of rebase label when there is no better
|
211
|
+
* way, e.g. for Gerrit.
|
212
|
+
*/
|
213
|
+
rebaseLabel?: string): string;
|
209
214
|
updatePr(prConfig: UpdatePrConfig): Promise<void>;
|
210
215
|
mergePr(config: MergePRConfig): Promise<boolean>;
|
211
216
|
addReviewers(number: number, reviewers: string[]): Promise<void>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/modules/platform/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MergeStrategy } from '../../config/types';\nimport type { BranchStatus, HostRule, VulnerabilityAlert } from '../../types';\nimport type { CommitFilesConfig, LongCommitSha } from '../../util/git/types';\n\ntype VulnerabilityKey = string;\ntype VulnerabilityRangeKey = string;\ntype VulnerabilityPatch = string;\nexport type AggregatedVulnerabilities = Record<\n VulnerabilityKey,\n Record<VulnerabilityRangeKey, VulnerabilityPatch | null>\n>;\n\nexport interface PlatformParams {\n endpoint?: string;\n token?: string;\n username?: string;\n password?: string;\n gitAuthor?: string;\n}\n\nexport interface PlatformResult {\n endpoint: string;\n renovateUsername?: string;\n token?: string;\n gitAuthor?: string;\n /*\n * return these only if _additional_ rules/hosts are required\n */\n hostRules?: HostRule[];\n}\n\nexport interface RepoResult {\n defaultBranch: string;\n isFork: boolean;\n repoFingerprint: string;\n}\n\nexport type GitUrlOption = 'default' | 'ssh' | 'endpoint';\n\nexport interface RepoParams {\n repository: string;\n endpoint?: string;\n gitUrl?: GitUrlOption;\n forkCreation?: boolean;\n forkOrg?: string;\n forkToken?: string;\n forkProcessing?: 'enabled' | 'disabled';\n renovateUsername?: string;\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n ignorePrAuthor?: boolean;\n bbUseDevelopmentBranch?: boolean;\n includeMirrors?: boolean;\n}\n\nexport interface PrDebugData {\n createdInVer: string;\n updatedInVer: string;\n targetBranch: string;\n labels?: string[];\n}\n\nexport interface PrBodyStruct {\n hash: string;\n rawConfigHash?: string;\n rebaseRequested?: boolean;\n debugData?: PrDebugData;\n}\n\n/**\n *\n */\nexport interface Pr {\n bodyStruct?: PrBodyStruct;\n sourceBranch: string;\n cannotMergeReason?: string; // for reflecting platform policies which may prevent merging\n createdAt?: string;\n closedAt?: string;\n hasAssignees?: boolean;\n labels?: string[];\n number: number;\n reviewers?: string[];\n sha?: LongCommitSha;\n sourceRepo?: string;\n state: string;\n targetBranch?: string;\n title: string;\n isDraft?: boolean;\n}\n\n/**\n * TODO: Proper typing\n */\nexport interface Issue {\n body?: string;\n number?: number;\n state?: string;\n title?: string;\n}\nexport interface PlatformPrOptions {\n autoApprove?: boolean;\n automergeStrategy?: MergeStrategy;\n azureWorkItemId?: number;\n bbUseDefaultReviewers?: boolean;\n bbAutoResolvePrTasks?: boolean;\n gitLabIgnoreApprovals?: boolean;\n usePlatformAutomerge?: boolean;\n forkModeDisallowMaintainerEdits?: boolean;\n}\n\nexport interface CreatePRConfig {\n sourceBranch: string;\n targetBranch: string;\n prTitle: string;\n prBody: string;\n labels?: string[] | null;\n platformPrOptions?: PlatformPrOptions;\n draftPR?: boolean;\n milestone?: number;\n}\nexport interface UpdatePrConfig {\n number: number;\n platformPrOptions?: PlatformPrOptions;\n prTitle: string;\n prBody?: string;\n state?: 'open' | 'closed';\n targetBranch?: string;\n\n /**\n * This field allows for label management and is designed to\n * accommodate the different label update methods on various platforms.\n *\n * - For Gitea, labels are updated by replacing the entire labels array.\n * - In the case of GitHub and GitLab, specific endpoints exist\n * for adding and removing labels.\n */\n labels?: string[] | null;\n\n /**\n * Specifies an array of labels to be added.\n * @see {@link labels}\n */\n addLabels?: string[] | null;\n\n /**\n * Specifies an array of labels to be removed.\n * @see {@link labels}\n */\n removeLabels?: string[] | null;\n}\nexport interface ReattemptPlatformAutomergeConfig {\n number: number;\n platformPrOptions?: PlatformPrOptions;\n}\nexport interface EnsureIssueConfig {\n title: string;\n reuseTitle?: string;\n body: string;\n labels?: string[];\n once?: boolean;\n shouldReOpen?: boolean;\n confidential?: boolean;\n}\nexport interface BranchStatusConfig {\n branchName: string;\n context: string;\n description: string;\n state: BranchStatus;\n url?: string;\n}\nexport interface FindPRConfig {\n branchName: string;\n prTitle?: string | null;\n state?: 'open' | 'closed' | '!open' | 'all';\n refreshCache?: boolean;\n targetBranch?: string | null;\n includeOtherAuthors?: boolean;\n}\nexport interface MergePRConfig {\n branchName?: string;\n id: number;\n strategy?: MergeStrategy;\n}\nexport interface EnsureCommentConfig {\n number: number;\n topic: string | null;\n content: string;\n}\n\nexport interface EnsureCommentRemovalConfigByTopic {\n type: 'by-topic';\n number: number;\n topic: string;\n}\nexport interface EnsureCommentRemovalConfigByContent {\n type: 'by-content';\n number: number;\n content: string;\n}\nexport type EnsureCommentRemovalConfig =\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent;\n\nexport type EnsureIssueResult = 'updated' | 'created';\n\nexport type RepoSortMethod =\n | 'alpha'\n | 'created'\n | 'updated'\n | 'size'\n | 'id'\n | null;\n\nexport type SortMethod = 'asc' | 'desc' | null;\nexport interface AutodiscoverConfig {\n topics?: string[];\n sort?: RepoSortMethod;\n order?: SortMethod;\n includeMirrors?: boolean;\n namespaces?: string[];\n projects?: string[];\n}\n\nexport interface FileOwnerRule {\n usernames: string[];\n pattern: string;\n score: number;\n match: (path: string) => boolean;\n}\n\nexport interface Platform {\n findIssue(title: string): Promise<Issue | null>;\n getIssueList(): Promise<Issue[]>;\n getIssue?(number: number, memCache?: boolean): Promise<Issue | null>;\n getVulnerabilityAlerts?(): Promise<VulnerabilityAlert[]>;\n getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<string | null>;\n getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<any>;\n initRepo(config: RepoParams): Promise<RepoResult>;\n getPrList(): Promise<Pr[]>;\n ensureIssueClosing(title: string): Promise<void>;\n ensureIssue(\n issueConfig: EnsureIssueConfig,\n ): Promise<EnsureIssueResult | null>;\n massageMarkdown(prBody: string): string;\n updatePr(prConfig: UpdatePrConfig): Promise<void>;\n mergePr(config: MergePRConfig): Promise<boolean>;\n addReviewers(number: number, reviewers: string[]): Promise<void>;\n addAssignees(number: number, assignees: string[]): Promise<void>;\n createPr(prConfig: CreatePRConfig): Promise<Pr | null>;\n getRepos(config?: AutodiscoverConfig): Promise<string[]>;\n getBranchForceRebase?(branchName: string): Promise<boolean>;\n deleteLabel(number: number, label: string): Promise<void>;\n addLabel?(number: number, label: string): Promise<void>;\n setBranchStatus(branchStatusConfig: BranchStatusConfig): Promise<void>;\n getBranchStatusCheck(\n branchName: string,\n // TODO: can be undefined or null ? #22198\n context: string | null | undefined,\n ): Promise<BranchStatus | null>;\n ensureCommentRemoval(\n ensureCommentRemoval:\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent,\n ): Promise<void>;\n ensureComment(ensureComment: EnsureCommentConfig): Promise<boolean>;\n getPr(number: number): Promise<Pr | null>;\n findPr(findPRConfig: FindPRConfig): Promise<Pr | null>;\n refreshPr?(number: number): Promise<void>;\n reattemptPlatformAutomerge?(\n prConfig: ReattemptPlatformAutomergeConfig,\n ): Promise<void>;\n getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ): Promise<BranchStatus>;\n getBranchPr(branchName: string, targetBranch?: string): Promise<Pr | null>;\n tryReuseAutoclosedPr?(pr: Pr): Promise<Pr | null>;\n initPlatform(config: PlatformParams): Promise<PlatformResult>;\n filterUnavailableUsers?(users: string[]): Promise<string[]>;\n commitFiles?(config: CommitFilesConfig): Promise<LongCommitSha | null>;\n expandGroupMembers?(reviewersOrAssignees: string[]): Promise<string[]>;\n extractRulesFromCodeOwnersLines?(cleanedLines: string[]): FileOwnerRule[];\n\n maxBodyLength(): number;\n labelCharLimit?(): number;\n}\n\nexport interface PlatformScm {\n isBranchBehindBase(branchName: string, baseBranch: string): Promise<boolean>;\n isBranchModified(branchName: string, baseBranch: string): Promise<boolean>;\n isBranchConflicted(baseBranch: string, branch: string): Promise<boolean>;\n branchExists(branchName: string): Promise<boolean>;\n getBranchCommit(branchName: string): Promise<LongCommitSha | null>;\n deleteBranch(branchName: string): Promise<void>;\n commitAndPush(commitConfig: CommitFilesConfig): Promise<LongCommitSha | null>;\n getFileList(): Promise<string[]>;\n checkoutBranch(branchName: string): Promise<LongCommitSha>;\n mergeToLocal(branchName: string): Promise<void>;\n mergeAndPush(branchName: string): Promise<void>;\n syncForkWithUpstream?(baseBranch: string): Promise<void>;\n}\n"]}
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/modules/platform/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { MergeStrategy } from '../../config/types';\nimport type { BranchStatus, HostRule, VulnerabilityAlert } from '../../types';\nimport type { CommitFilesConfig, LongCommitSha } from '../../util/git/types';\n\ntype VulnerabilityKey = string;\ntype VulnerabilityRangeKey = string;\ntype VulnerabilityPatch = string;\nexport type AggregatedVulnerabilities = Record<\n VulnerabilityKey,\n Record<VulnerabilityRangeKey, VulnerabilityPatch | null>\n>;\n\nexport interface PlatformParams {\n endpoint?: string;\n token?: string;\n username?: string;\n password?: string;\n gitAuthor?: string;\n}\n\nexport interface PlatformResult {\n endpoint: string;\n renovateUsername?: string;\n token?: string;\n gitAuthor?: string;\n /*\n * return these only if _additional_ rules/hosts are required\n */\n hostRules?: HostRule[];\n}\n\nexport interface RepoResult {\n defaultBranch: string;\n isFork: boolean;\n repoFingerprint: string;\n}\n\nexport type GitUrlOption = 'default' | 'ssh' | 'endpoint';\n\nexport interface RepoParams {\n repository: string;\n endpoint?: string;\n gitUrl?: GitUrlOption;\n forkCreation?: boolean;\n forkOrg?: string;\n forkToken?: string;\n forkProcessing?: 'enabled' | 'disabled';\n renovateUsername?: string;\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n ignorePrAuthor?: boolean;\n bbUseDevelopmentBranch?: boolean;\n includeMirrors?: boolean;\n}\n\nexport interface PrDebugData {\n createdInVer: string;\n updatedInVer: string;\n targetBranch: string;\n labels?: string[];\n}\n\nexport interface PrBodyStruct {\n hash: string;\n rawConfigHash?: string;\n rebaseRequested?: boolean;\n debugData?: PrDebugData;\n}\n\n/**\n *\n */\nexport interface Pr {\n bodyStruct?: PrBodyStruct;\n sourceBranch: string;\n cannotMergeReason?: string; // for reflecting platform policies which may prevent merging\n createdAt?: string;\n closedAt?: string;\n hasAssignees?: boolean;\n labels?: string[];\n number: number;\n reviewers?: string[];\n sha?: LongCommitSha;\n sourceRepo?: string;\n state: string;\n targetBranch?: string;\n title: string;\n isDraft?: boolean;\n}\n\n/**\n * TODO: Proper typing\n */\nexport interface Issue {\n body?: string;\n number?: number;\n state?: string;\n title?: string;\n}\nexport interface PlatformPrOptions {\n autoApprove?: boolean;\n automergeStrategy?: MergeStrategy;\n azureWorkItemId?: number;\n bbUseDefaultReviewers?: boolean;\n bbAutoResolvePrTasks?: boolean;\n gitLabIgnoreApprovals?: boolean;\n usePlatformAutomerge?: boolean;\n forkModeDisallowMaintainerEdits?: boolean;\n}\n\nexport interface CreatePRConfig {\n sourceBranch: string;\n targetBranch: string;\n prTitle: string;\n prBody: string;\n labels?: string[] | null;\n platformPrOptions?: PlatformPrOptions;\n draftPR?: boolean;\n milestone?: number;\n}\nexport interface UpdatePrConfig {\n number: number;\n platformPrOptions?: PlatformPrOptions;\n prTitle: string;\n prBody?: string;\n state?: 'open' | 'closed';\n targetBranch?: string;\n\n /**\n * This field allows for label management and is designed to\n * accommodate the different label update methods on various platforms.\n *\n * - For Gitea, labels are updated by replacing the entire labels array.\n * - In the case of GitHub and GitLab, specific endpoints exist\n * for adding and removing labels.\n */\n labels?: string[] | null;\n\n /**\n * Specifies an array of labels to be added.\n * @see {@link labels}\n */\n addLabels?: string[] | null;\n\n /**\n * Specifies an array of labels to be removed.\n * @see {@link labels}\n */\n removeLabels?: string[] | null;\n}\nexport interface ReattemptPlatformAutomergeConfig {\n number: number;\n platformPrOptions?: PlatformPrOptions;\n}\nexport interface EnsureIssueConfig {\n title: string;\n reuseTitle?: string;\n body: string;\n labels?: string[];\n once?: boolean;\n shouldReOpen?: boolean;\n confidential?: boolean;\n}\nexport interface BranchStatusConfig {\n branchName: string;\n context: string;\n description: string;\n state: BranchStatus;\n url?: string;\n}\nexport interface FindPRConfig {\n branchName: string;\n prTitle?: string | null;\n state?: 'open' | 'closed' | '!open' | 'all';\n refreshCache?: boolean;\n targetBranch?: string | null;\n includeOtherAuthors?: boolean;\n}\nexport interface MergePRConfig {\n branchName?: string;\n id: number;\n strategy?: MergeStrategy;\n}\nexport interface EnsureCommentConfig {\n number: number;\n topic: string | null;\n content: string;\n}\n\nexport interface EnsureCommentRemovalConfigByTopic {\n type: 'by-topic';\n number: number;\n topic: string;\n}\nexport interface EnsureCommentRemovalConfigByContent {\n type: 'by-content';\n number: number;\n content: string;\n}\nexport type EnsureCommentRemovalConfig =\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent;\n\nexport type EnsureIssueResult = 'updated' | 'created';\n\nexport type RepoSortMethod =\n | 'alpha'\n | 'created'\n | 'updated'\n | 'size'\n | 'id'\n | null;\n\nexport type SortMethod = 'asc' | 'desc' | null;\nexport interface AutodiscoverConfig {\n topics?: string[];\n sort?: RepoSortMethod;\n order?: SortMethod;\n includeMirrors?: boolean;\n namespaces?: string[];\n projects?: string[];\n}\n\nexport interface FileOwnerRule {\n usernames: string[];\n pattern: string;\n score: number;\n match: (path: string) => boolean;\n}\n\nexport interface Platform {\n findIssue(title: string): Promise<Issue | null>;\n getIssueList(): Promise<Issue[]>;\n getIssue?(number: number, memCache?: boolean): Promise<Issue | null>;\n getVulnerabilityAlerts?(): Promise<VulnerabilityAlert[]>;\n getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<string | null>;\n getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n ): Promise<any>;\n initRepo(config: RepoParams): Promise<RepoResult>;\n getPrList(): Promise<Pr[]>;\n ensureIssueClosing(title: string): Promise<void>;\n ensureIssue(\n issueConfig: EnsureIssueConfig,\n ): Promise<EnsureIssueResult | null>;\n massageMarkdown(\n prBody: string,\n /**\n * Useful for suggesting the use of rebase label when there is no better\n * way, e.g. for Gerrit.\n */\n rebaseLabel?: string,\n ): string;\n updatePr(prConfig: UpdatePrConfig): Promise<void>;\n mergePr(config: MergePRConfig): Promise<boolean>;\n addReviewers(number: number, reviewers: string[]): Promise<void>;\n addAssignees(number: number, assignees: string[]): Promise<void>;\n createPr(prConfig: CreatePRConfig): Promise<Pr | null>;\n getRepos(config?: AutodiscoverConfig): Promise<string[]>;\n getBranchForceRebase?(branchName: string): Promise<boolean>;\n deleteLabel(number: number, label: string): Promise<void>;\n addLabel?(number: number, label: string): Promise<void>;\n setBranchStatus(branchStatusConfig: BranchStatusConfig): Promise<void>;\n getBranchStatusCheck(\n branchName: string,\n // TODO: can be undefined or null ? #22198\n context: string | null | undefined,\n ): Promise<BranchStatus | null>;\n ensureCommentRemoval(\n ensureCommentRemoval:\n | EnsureCommentRemovalConfigByTopic\n | EnsureCommentRemovalConfigByContent,\n ): Promise<void>;\n ensureComment(ensureComment: EnsureCommentConfig): Promise<boolean>;\n getPr(number: number): Promise<Pr | null>;\n findPr(findPRConfig: FindPRConfig): Promise<Pr | null>;\n refreshPr?(number: number): Promise<void>;\n reattemptPlatformAutomerge?(\n prConfig: ReattemptPlatformAutomergeConfig,\n ): Promise<void>;\n getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n ): Promise<BranchStatus>;\n getBranchPr(branchName: string, targetBranch?: string): Promise<Pr | null>;\n tryReuseAutoclosedPr?(pr: Pr): Promise<Pr | null>;\n initPlatform(config: PlatformParams): Promise<PlatformResult>;\n filterUnavailableUsers?(users: string[]): Promise<string[]>;\n commitFiles?(config: CommitFilesConfig): Promise<LongCommitSha | null>;\n expandGroupMembers?(reviewersOrAssignees: string[]): Promise<string[]>;\n extractRulesFromCodeOwnersLines?(cleanedLines: string[]): FileOwnerRule[];\n\n maxBodyLength(): number;\n labelCharLimit?(): number;\n}\n\nexport interface PlatformScm {\n isBranchBehindBase(branchName: string, baseBranch: string): Promise<boolean>;\n isBranchModified(branchName: string, baseBranch: string): Promise<boolean>;\n isBranchConflicted(baseBranch: string, branch: string): Promise<boolean>;\n branchExists(branchName: string): Promise<boolean>;\n getBranchCommit(branchName: string): Promise<LongCommitSha | null>;\n deleteBranch(branchName: string): Promise<void>;\n commitAndPush(commitConfig: CommitFilesConfig): Promise<LongCommitSha | null>;\n getFileList(): Promise<string[]>;\n checkoutBranch(branchName: string): Promise<LongCommitSha>;\n mergeToLocal(branchName: string): Promise<void>;\n mergeAndPush(branchName: string): Promise<void>;\n syncForkWithUpstream?(baseBranch: string): Promise<void>;\n}\n"]}
|
@@ -46,7 +46,7 @@ ${filename.endsWith('.json5')
|
|
46
46
|
prBody = `${prBody}\n---\n\n${template.compile(config.prFooter, config)}\n`;
|
47
47
|
}
|
48
48
|
logger_1.logger.trace({ prBody }, 'prBody');
|
49
|
-
prBody = platform_1.platform.massageMarkdown(prBody);
|
49
|
+
prBody = platform_1.platform.massageMarkdown(prBody, config.rebaseLabel);
|
50
50
|
if (existingPr) {
|
51
51
|
logger_1.logger.debug('Found open migration PR');
|
52
52
|
// Check if existing PR needs updating
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/config-migration/pr/index.ts"],"names":[],"mappings":";;AAmBA,0DAoHC;;AAvID,kEAAkC;AAClC,sDAAyD;AAEzD,+CAA4C;AAE5C,2DAAwD;AACxD,kEAAgE;AAChE,0DAAuD;AACvD,kDAAiD;AACjD,oDAAuD;AACvD,4EAAsD;AACtD,8CAAoD;AACpD,wCAAuD;AACvD,mDAAuD;AACvD,+DAA+D;AAC/D,6DAA+E;AAE/E,sCAAmD;AAE5C,KAAK,UAAU,uBAAuB,CAC3C,MAAsB,EACtB,kBAAgC;IAEhC,eAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAA,kBAAY,EAC3B,IAAA,qBAAY,EAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,EAChD,wCAAwC,CACzC,CAAC;IACF,MAAM,UAAU,GAAG,IAAA,+BAAsB,EAAC,MAAM,CAAC,CAAC;IAClD,MAAM,oBAAoB,GAAG,IAAI,oDAAmC,CAClE,MAAM,EACN,kBAAkB,CAAC,QAAQ,CAC5B,CAAC;IAEF,MAAM,OAAO,GAAG,oBAAoB,CAAC,UAAU,EAAE,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,mBAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,CAAC;IAC7C,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG;;gRAEiQ,CAAC;IAC/Q,MAAM,IAAI,IAAA,eAAO,EACf;;EAGF,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;QACzB,CAAC,CAAC,sBAAsB,QAAQ,KAAK;YACnC,0EAA0E;QAC5E,CAAC,CAAC,EACN;;;;2GAKM,MAAM,CAAC,YAAY,EAAE,IACvB,QAAQ,CACT,CAAC;IAEF,IAAI,YAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,MAAM,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,YAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,YAAY,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9E,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEnC,MAAM,GAAG,mBAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/config-migration/pr/index.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 { logger } from '../../../../logger';\nimport type { Pr } from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { hashBody } from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { emojify } from '../../../../util/emoji';\nimport { coerceString } from '../../../../util/string';\nimport * as template from '../../../../util/template';\nimport { joinUrlParts } from '../../../../util/url';\nimport { getPlatformPrOptions } from '../../update/pr';\nimport { prepareLabels } from '../../update/pr/labels';\nimport { addParticipants } from '../../update/pr/participants';\nimport { ConfigMigrationCommitMessageFactory } from '../branch/commit-message';\nimport type { MigratedData } from '../branch/migrated-data';\nimport { getMigrationBranchName } from '../common';\n\nexport async function ensureConfigMigrationPr(\n config: RenovateConfig,\n migratedConfigData: MigratedData,\n): Promise<Pr | null> {\n logger.debug('ensureConfigMigrationPr()');\n const docsLink = joinUrlParts(\n coerceString(config.productLinks?.documentation),\n 'configuration-options/#configmigration',\n );\n const branchName = getMigrationBranchName(config);\n const commitMessageFactory = new ConfigMigrationCommitMessageFactory(\n config,\n migratedConfigData.filename,\n );\n\n const prTitle = commitMessageFactory.getPrTitle();\n const existingPr = await platform.getBranchPr(branchName, config.baseBranch);\n const filename = migratedConfigData.filename;\n logger.debug('Filling in config migration PR template');\n let prBody = `The Renovate config in this repository needs migrating. Typically this is because one or more configuration options you are using have been renamed.\n\n You don't need to merge this PR right away, because Renovate will continue to migrate these fields internally each time it runs. But later some of these fields may be fully deprecated and the migrations removed. So it's a good idea to merge this migration PR soon. \\n\\n`;\n prBody += emojify(\n `\n\n${\n filename.endsWith('.json5')\n ? `#### [PLEASE NOTE](${docsLink}): ` +\n `JSON5 config file migrated! All comments & trailing commas were removed.`\n : ''\n}\n\n:no_bell: **Ignore**: Close this PR and you won't be reminded about config migration again, but one day your current config may no longer be valid.\n\n:question: Got questions? Does something look wrong to you? Please don't hesitate to [request help here](${\n config.productLinks?.help\n }).\\n\\n`,\n );\n\n if (is.string(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (is.string(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n logger.trace({ prBody }, 'prBody');\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open migration PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (\n existingPr.bodyStruct?.hash === prBodyHash &&\n existingPr.title === prTitle\n ) {\n logger.debug(`Pr does not need updating, PrNo: ${existingPr.number}`);\n return existingPr;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update migration PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Migration PR updated');\n }\n return existingPr;\n }\n logger.debug('Creating migration PR');\n const labels = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create migration PR');\n } else {\n const pr = await platform.createPr({\n sourceBranch: branchName,\n // TODO #22198\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info({ pr: pr?.number }, 'Migration PR created');\n if (pr) {\n await addParticipants(config, pr);\n }\n\n return pr;\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n { err },\n 'Migration PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(branchName);\n return null;\n }\n throw err;\n }\n\n return null;\n}\n"]}
|
@@ -434,7 +434,7 @@ async function ensureDependencyDashboard(config, allBranches, packageFiles = {},
|
|
434
434
|
await platform_1.platform.ensureIssue({
|
435
435
|
title: config.dependencyDashboardTitle,
|
436
436
|
reuseTitle,
|
437
|
-
body: platform_1.platform.massageMarkdown(issueBody),
|
437
|
+
body: platform_1.platform.massageMarkdown(issueBody, config.rebaseLabel),
|
438
438
|
labels: config.dependencyDashboardLabels,
|
439
439
|
confidential: config.confidential,
|
440
440
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"dependency-dashboard.js","sourceRoot":"","sources":["../../../lib/workers/repository/dependency-dashboard.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport { logger } from '../../logger';\nimport type { PackageFile } from '../../modules/manager/types';\nimport { platform } from '../../modules/platform';\nimport { coerceArray } from '../../util/array';\nimport { regEx } from '../../util/regex';\nimport { coerceString } from '../../util/string';\nimport * as template from '../../util/template';\nimport type { BranchConfig, SelectAllConfig } from '../types';\nimport { extractRepoProblems } from './common';\nimport type { ConfigMigrationResult } from './config-migration';\nimport { getDepWarningsDashboard } from './errors-warnings';\nimport { PackageFiles } from './package-files';\nimport type { Vulnerability } from './process/types';\nimport { Vulnerabilities } from './process/vulnerabilities';\n\ninterface DependencyDashboard {\n dependencyDashboardChecks: Record<string, string>;\n dependencyDashboardRebaseAllOpen: boolean;\n dependencyDashboardAllPending: boolean;\n dependencyDashboardAllRateLimited: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ' - \\\\[ \\\\] <!-- unlimit-branch=([^\\\\s]+) -->',\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ' - \\\\[ \\\\] <!-- approve-branch=([^\\\\s]+) -->',\n 'g',\n);\nconst generalBranchRe = regEx(' <!-- ([a-zA-Z]+)-branch=([^\\\\s]+) -->');\nconst markedBranchesRe = regEx(\n ' - \\\\[x\\\\] <!-- ([a-zA-Z]+)-branch=([^\\\\s]+) -->',\n 'g',\n);\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- create-all-rate-limited-prs -->');\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- approve-all-pending-prs -->');\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- rebase-all-open-prs -->');\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes('<!-- config-migration-pr-info -->')) {\n return 'migration-pr-exists';\n }\n\n if (issueBody.includes(' - [x] <!-- create-config-migration-pr -->')) {\n return 'checked';\n }\n\n if (issueBody.includes(' - [ ] <!-- create-config-migration-pr -->')) {\n return 'unchecked';\n }\n\n return 'no-checkbox';\n}\n\nfunction selectAllRelevantBranches(issueBody: string): string[] {\n const checkedBranches = [];\n if (checkOpenAllRateLimitedPR(issueBody)) {\n for (const match of issueBody.matchAll(rateLimitedRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkApproveAllPendingPR(issueBody)) {\n for (const match of issueBody.matchAll(pendingApprovalRe)) {\n checkedBranches.push(match[0]);\n }\n }\n return checkedBranches;\n}\n\nfunction getAllSelectedBranches(\n issueBody: string,\n dependencyDashboardChecks: Record<string, string>,\n): Record<string, string> {\n const allRelevantBranches = selectAllRelevantBranches(issueBody);\n for (const branch of allRelevantBranches) {\n const [, type, branchName] = generalBranchRe.exec(branch)!;\n dependencyDashboardChecks[branchName] = type;\n }\n return dependencyDashboardChecks;\n}\n\nfunction getCheckedBranches(issueBody: string): Record<string, string> {\n let dependencyDashboardChecks: Record<string, string> = {};\n for (const [, type, branchName] of issueBody.matchAll(markedBranchesRe)) {\n dependencyDashboardChecks[branchName] = type;\n }\n dependencyDashboardChecks = getAllSelectedBranches(\n issueBody,\n dependencyDashboardChecks,\n );\n return dependencyDashboardChecks;\n}\n\nfunction parseDashboardIssue(issueBody: string): DependencyDashboard {\n const dependencyDashboardChecks = getCheckedBranches(issueBody);\n const dependencyDashboardRebaseAllOpen = checkRebaseAll(issueBody);\n const dependencyDashboardAllPending = checkApproveAllPendingPR(issueBody);\n const dependencyDashboardAllRateLimited =\n checkOpenAllRateLimitedPR(issueBody);\n dependencyDashboardChecks.configMigrationCheckboxState =\n getConfigMigrationCheckboxState(issueBody);\n return {\n dependencyDashboardChecks,\n dependencyDashboardRebaseAllOpen,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardAllPending: false,\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllRateLimited: false,\n };\n const stringifiedConfig = JSON.stringify(config);\n if (\n config.dependencyDashboard === true ||\n stringifiedConfig.includes('\"dependencyDashboardApproval\":true') ||\n stringifiedConfig.includes('\"prCreation\":\"approval\"')\n ) {\n config.dependencyDashboardTitle =\n config.dependencyDashboardTitle ?? `Dependency Dashboard`;\n const issue = await platform.findIssue(config.dependencyDashboardTitle);\n if (issue) {\n config.dependencyDashboardIssue = issue.number;\n dashboardChecks = parseDashboardIssue(issue.body ?? '');\n }\n }\n\n if (config.checkedBranches) {\n const checkedBranchesRec: Record<string, string> = Object.fromEntries(\n config.checkedBranches.map((branchName) => [branchName, 'global-config']),\n );\n dashboardChecks.dependencyDashboardChecks = {\n ...dashboardChecks.dependencyDashboardChecks,\n ...checkedBranchesRec,\n };\n }\n\n Object.assign(config, dashboardChecks);\n}\n\nfunction getListItem(branch: BranchConfig, type: string): string {\n let item = ' - [ ] ';\n item += `<!-- ${type}-branch=${branch.branchName} -->`;\n if (branch.prNo) {\n // TODO: types (#22198)\n item += `[${branch.prTitle!}](../pull/${branch.prNo})`;\n } else {\n item += branch.prTitle;\n }\n const uniquePackages = [\n // TODO: types (#22198)\n ...new Set(branch.upgrades.map((upgrade) => `\\`${upgrade.depName!}\\``)),\n ];\n if (uniquePackages.length < 2) {\n return item + '\\n';\n }\n return item + ' (' + uniquePackages.join(', ') + ')\\n';\n}\n\nfunction appendRepoProblems(config: RenovateConfig, issueBody: string): string {\n let newIssueBody = issueBody;\n const repoProblems = extractRepoProblems(config.repository);\n if (repoProblems.size) {\n newIssueBody += '## Repository problems\\n\\n';\n const repoProblemsHeader =\n config.customizeDashboard?.repoProblemsHeader ??\n 'Renovate tried to run on this repository, but found these problems.';\n newIssueBody += template.compile(repoProblemsHeader, config) + '\\n\\n';\n\n for (const repoProblem of repoProblems) {\n newIssueBody += ` - ${repoProblem}\\n`;\n }\n newIssueBody += '\\n';\n }\n return newIssueBody;\n}\n\nexport async function ensureDependencyDashboard(\n config: SelectAllConfig,\n allBranches: BranchConfig[],\n packageFiles: Record<string, PackageFile[]> = {},\n configMigrationRes: ConfigMigrationResult,\n): Promise<void> {\n logger.debug('ensureDependencyDashboard()');\n if (config.mode === 'silent') {\n logger.debug(\n 'Dependency Dashboard issue is not created, updated or closed when mode=silent',\n );\n return;\n }\n // legacy/migrated issue\n const reuseTitle = 'Update Dependencies (Renovate Bot)';\n const branches = allBranches.filter(\n (branch) =>\n branch.result !== 'automerged' &&\n !branch.upgrades?.every((upgrade) => upgrade.remediationNotPossible),\n );\n if (\n !(\n config.dependencyDashboard === true ||\n config.dependencyDashboardApproval === true ||\n config.packageRules?.some((rule) => rule.dependencyDashboardApproval) ===\n true ||\n branches.some(\n (branch) =>\n !!branch.dependencyDashboardApproval ||\n !!branch.dependencyDashboardPrApproval,\n )\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n // istanbul ignore if\n if (config.repoIsOnboarded === false) {\n logger.debug('Repo is onboarding - skipping dependency dashboard');\n return;\n }\n logger.debug('Ensuring Dependency Dashboard');\n\n // Check packageFiles for any deprecations\n let hasDeprecations = false;\n const deprecatedPackages: Record<string, Record<string, boolean>> = {};\n logger.debug('Checking packageFiles for deprecated packages');\n if (is.nonEmptyObject(packageFiles)) {\n for (const [manager, fileNames] of Object.entries(packageFiles)) {\n for (const fileName of fileNames) {\n for (const dep of fileName.deps) {\n const name = dep.packageName ?? dep.depName;\n const hasReplacement = !!dep.updates?.find(\n (updates) => updates.updateType === 'replacement',\n );\n if (name && (dep.deprecationMessage ?? hasReplacement)) {\n hasDeprecations = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= hasReplacement;\n }\n }\n }\n }\n }\n\n const hasBranches = is.nonEmptyArray(branches);\n if (config.dependencyDashboardAutoclose && !hasBranches && !hasDeprecations) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n let issueBody = '';\n\n if (config.dependencyDashboardHeader?.length) {\n issueBody +=\n template.compile(config.dependencyDashboardHeader, config) + '\\n\\n';\n }\n\n if (configMigrationRes.result === 'pr-exists') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n `<!-- config-migration-pr-info --> See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (error)\\n\\n' +\n `<!-- config-migration-pr-info --> The Config Migration branch exists but has been modified by another user. Renovate will not push to this branch unless it is first deleted. \\n\\n See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'add-checkbox') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n ' - [ ] <!-- create-config-migration-pr --> Select this checkbox to let Renovate create an automated Config Migration PR.' +\n '\\n\\n';\n }\n\n issueBody = appendRepoProblems(config, issueBody);\n\n if (hasDeprecations) {\n issueBody += '> ⚠ **Warning**\\n> \\n';\n issueBody += 'These dependencies are deprecated:\\n\\n';\n issueBody += '| Datasource | Name | Replacement PR? |\\n';\n issueBody += '|------------|------|--------------|\\n';\n for (const manager of Object.keys(deprecatedPackages).sort()) {\n const deps = deprecatedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const hasReplacement = deps[depName];\n issueBody += `| ${manager} | \\`${depName}\\` | ${\n hasReplacement\n ? ''\n : ''\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n const pendingApprovals = branches.filter(\n (branch) => branch.result === 'needs-approval',\n );\n if (pendingApprovals.length) {\n issueBody += '## Pending Approval\\n\\n';\n issueBody += `These branches will be created by Renovate only once you click their checkbox below.\\n\\n`;\n for (const branch of pendingApprovals) {\n issueBody += getListItem(branch, 'approve');\n }\n if (pendingApprovals.length > 1) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- approve-all-pending-prs -->';\n issueBody += '🔐 **Create all pending approval PRs at once** 🔐\\n';\n }\n issueBody += '\\n';\n }\n const awaitingSchedule = branches.filter(\n (branch) => branch.result === 'not-scheduled',\n );\n if (awaitingSchedule.length) {\n issueBody += '## Awaiting Schedule\\n\\n';\n issueBody +=\n 'These updates are awaiting their schedule. Click on a checkbox to get an update now.\\n\\n';\n for (const branch of awaitingSchedule) {\n issueBody += getListItem(branch, 'unschedule');\n }\n issueBody += '\\n';\n }\n const rateLimited = branches.filter(\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-limit-reached',\n );\n if (rateLimited.length) {\n issueBody += '## Rate-Limited\\n\\n';\n issueBody +=\n 'These updates are currently rate-limited. Click on a checkbox below to force their creation now.\\n\\n';\n for (const branch of rateLimited) {\n issueBody += getListItem(branch, 'unlimit');\n }\n if (rateLimited.length > 1) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- create-all-rate-limited-prs -->';\n issueBody += '🔐 **Create all rate-limited PRs at once** 🔐\\n';\n }\n issueBody += '\\n';\n }\n const errorList = branches.filter((branch) => branch.result === 'error');\n if (errorList.length) {\n issueBody += '## Errored\\n\\n';\n issueBody +=\n 'These updates encountered an error and will be retried. Click on a checkbox below to force a retry now.\\n\\n';\n for (const branch of errorList) {\n issueBody += getListItem(branch, 'retry');\n }\n issueBody += '\\n';\n }\n const awaitingPr = branches.filter(\n (branch) => branch.result === 'needs-pr-approval',\n );\n if (awaitingPr.length) {\n issueBody += '## PR Creation Approval Required\\n\\n';\n issueBody +=\n \"These branches exist but PRs won't be created until you approve them by clicking on a checkbox.\\n\\n\";\n for (const branch of awaitingPr) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n const prEdited = branches.filter((branch) => branch.result === 'pr-edited');\n if (prEdited.length) {\n issueBody += '## Edited/Blocked\\n\\n';\n issueBody += `These updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox.\\n\\n`;\n for (const branch of prEdited) {\n issueBody += getListItem(branch, 'rebase');\n }\n issueBody += '\\n';\n }\n const prPending = branches.filter((branch) => branch.result === 'pending');\n if (prPending.length) {\n issueBody += '## Pending Status Checks\\n\\n';\n issueBody += `These updates await pending status checks. To force their creation now, click the checkbox below.\\n\\n`;\n for (const branch of prPending) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n const prPendingBranchAutomerge = branches.filter(\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n );\n if (prPendingBranchAutomerge.length) {\n issueBody += '## Pending Branch Automerge\\n\\n';\n issueBody += `These updates await pending status checks before automerging. Click on a checkbox to abort the branch automerge, and create a PR instead.\\n\\n`;\n for (const branch of prPendingBranchAutomerge) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n\n const warn = getDepWarningsDashboard(packageFiles, config);\n if (warn) {\n issueBody += warn;\n issueBody += '\\n';\n }\n\n const otherRes = [\n 'pending',\n 'needs-approval',\n 'needs-pr-approval',\n 'not-scheduled',\n 'pr-limit-reached',\n 'commit-limit-reached',\n 'branch-limit-reached',\n 'already-existed',\n 'error',\n 'automerged',\n 'pr-edited',\n ];\n let inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n const otherBranches = inProgress.filter(\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n );\n // istanbul ignore if\n if (otherBranches.length) {\n issueBody += '## Other Branches\\n\\n';\n issueBody += `These updates are pending. To force PRs open, click the checkbox below.\\n\\n`;\n for (const branch of otherBranches) {\n issueBody += getListItem(branch, 'other');\n }\n issueBody += '\\n';\n }\n inProgress = inProgress.filter(\n (branch) => branch.prNo && !branch.prBlockedBy,\n );\n if (inProgress.length) {\n issueBody += '## Open\\n\\n';\n issueBody +=\n 'These updates have all been created already. Click a checkbox below to force a retry/rebase of any.\\n\\n';\n for (const branch of inProgress) {\n issueBody += getListItem(branch, 'rebase');\n }\n if (inProgress.length > 2) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- rebase-all-open-prs -->';\n issueBody += '**Click on this checkbox to rebase all open PRs at once**';\n issueBody += '\\n';\n }\n issueBody += '\\n';\n }\n const alreadyExisted = branches.filter(\n (branch) => branch.result === 'already-existed',\n );\n if (alreadyExisted.length) {\n issueBody += '## Ignored or Blocked\\n\\n';\n issueBody +=\n 'These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.\\n\\n';\n for (const branch of alreadyExisted) {\n issueBody += getListItem(branch, 'recreate');\n }\n issueBody += '\\n';\n }\n\n if (!hasBranches) {\n issueBody +=\n 'This repository currently has no open or pending branches.\\n\\n';\n }\n\n // add CVE section\n issueBody += await getDashboardMarkdownVulnerabilities(config, packageFiles);\n\n // fit the detected dependencies section\n const footer = getFooter(config);\n issueBody += PackageFiles.getDashboardMarkdown(\n platform.maxBodyLength() - issueBody.length - footer.length,\n );\n\n issueBody += footer;\n\n if (config.dependencyDashboardIssue) {\n // If we're not changing the dashboard issue then we can skip checking if the user changed it\n // The cached issue we get back here will reflect its state at the _start_ of our run\n const cachedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n );\n if (cachedIssue?.body === issueBody) {\n logger.debug('No changes to dependency dashboard issue needed');\n return;\n }\n\n // Skip cache when getting the issue to ensure we get the latest body,\n // including any updates the user made after we started the run\n const updatedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n false,\n );\n if (updatedIssue) {\n const { dependencyDashboardChecks } = parseDashboardIssue(\n coerceString(updatedIssue.body),\n );\n for (const branchName of Object.keys(config.dependencyDashboardChecks!)) {\n delete dependencyDashboardChecks[branchName];\n }\n for (const branchName of Object.keys(dependencyDashboardChecks)) {\n const checkText = `- [ ] <!-- ${dependencyDashboardChecks[branchName]}-branch=${branchName} -->`;\n issueBody = issueBody.replace(\n checkText,\n checkText.replace('[ ]', '[x]'),\n );\n }\n }\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would ensure Dependency Dashboard',\n );\n } else {\n await platform.ensureIssue({\n title: config.dependencyDashboardTitle!,\n reuseTitle,\n body: platform.massageMarkdown(issueBody),\n labels: config.dependencyDashboardLabels,\n confidential: config.confidential,\n });\n }\n}\n\nexport function getAbandonedPackagesMd(\n packageFiles: Record<string, PackageFile[]>,\n): string {\n const abandonedPackages: Record<\n string,\n Record<string, string | undefined | null>\n > = {};\n let abandonedCount = 0;\n\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n for (const packageFile of managerPackageFiles) {\n for (const dep of coerceArray(packageFile.deps)) {\n if (dep.depName && dep.isAbandoned) {\n abandonedCount++;\n abandonedPackages[manager] = abandonedPackages[manager] || {};\n abandonedPackages[manager][dep.depName] = dep.mostRecentTimestamp;\n }\n }\n }\n }\n\n if (abandonedCount === 0) {\n return '';\n }\n\n let abandonedMd = '> ℹ **Note**\\n> \\n';\n abandonedMd +=\n 'These dependencies have not received updates for an extended period and may be unmaintained:\\n\\n';\n\n abandonedMd += '<details>\\n';\n abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\\n\\n`;\n abandonedMd += '| Datasource | Name | Last Updated |\\n';\n abandonedMd += '|------------|------|-------------|\\n';\n\n for (const manager of Object.keys(abandonedPackages).sort()) {\n const deps = abandonedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const mostRecentTimestamp = deps[depName];\n const formattedDate = mostRecentTimestamp\n ? DateTime.fromISO(mostRecentTimestamp).toFormat('yyyy-MM-dd')\n : 'unknown';\n abandonedMd += `| ${manager} | \\`${depName}\\` | \\`${formattedDate}\\` |\\n`;\n }\n }\n\n abandonedMd += '\\n</details>\\n\\n';\n abandonedMd +=\n 'Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release.\\n';\n abandonedMd +=\n 'Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\\n\\n';\n\n return abandonedMd + '\\n';\n}\n\nfunction getFooter(config: RenovateConfig): string {\n let footer = '';\n if (config.dependencyDashboardFooter?.length) {\n footer +=\n '---\\n' +\n template.compile(config.dependencyDashboardFooter, config) +\n '\\n';\n }\n\n return footer;\n}\n\nexport async function getDashboardMarkdownVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<string> {\n let result = '';\n\n if (\n is.nullOrUndefined(config.dependencyDashboardOSVVulnerabilitySummary) ||\n config.dependencyDashboardOSVVulnerabilitySummary === 'none'\n ) {\n return result;\n }\n\n result += '## Vulnerabilities\\n\\n';\n\n const vulnerabilityFetcher = await Vulnerabilities.create();\n const vulnerabilities = await vulnerabilityFetcher.fetchVulnerabilities(\n config,\n packageFiles,\n );\n\n if (vulnerabilities.length === 0) {\n result +=\n 'Renovate has not found any CVEs on [osv.dev](https://osv.dev).\\n\\n';\n return result;\n }\n\n const unresolvedVulnerabilities = vulnerabilities.filter((value) =>\n is.nullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += `\\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (is.truthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n';\n } else {\n result +=\n ' CVEs have possible Renovate fixes.\\nSee [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\\n';\n }\n\n let renderedVulnerabilities: Vulnerability[];\n switch (config.dependencyDashboardOSVVulnerabilitySummary) {\n // filter vulnerabilities to display based on configuration\n case 'unresolved':\n renderedVulnerabilities = unresolvedVulnerabilities;\n break;\n default:\n renderedVulnerabilities = vulnerabilities;\n }\n\n const managerRecords: Record<\n string,\n Record<string, Record<string, Vulnerability[]>>\n > = {};\n for (const vulnerability of renderedVulnerabilities) {\n const { manager, packageFile } = vulnerability.packageFileConfig;\n if (is.nullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (is.nullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n is.nullOrUndefined(\n managerRecords[manager!][packageFile][vulnerability.packageName],\n )\n ) {\n managerRecords[manager!][packageFile][vulnerability.packageName] = [];\n }\n managerRecords[manager!][packageFile][vulnerability.packageName].push(\n vulnerability,\n );\n }\n\n for (const [manager, packageFileRecords] of Object.entries(managerRecords)) {\n result += `<details><summary>${manager}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageFile, packageNameRecords] of Object.entries(\n packageFileRecords,\n )) {\n result += `<details><summary>${packageFile}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageName, cves] of Object.entries(packageNameRecords)) {\n result += `<details><summary>${packageName}</summary>\\n<blockquote>\\n\\n`;\n for (const vul of cves) {\n const id = vul.vulnerability.id;\n const suffix = is.nonEmptyString(vul.fixedVersion)\n ? ` (fixed in ${vul.fixedVersion})`\n : '';\n result += `- [${id}](https://osv.dev/vulnerability/${id})${suffix}\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n\n return result;\n}\n"]}
|
1
|
+
{"version":3,"file":"dependency-dashboard.js","sourceRoot":"","sources":["../../../lib/workers/repository/dependency-dashboard.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport { logger } from '../../logger';\nimport type { PackageFile } from '../../modules/manager/types';\nimport { platform } from '../../modules/platform';\nimport { coerceArray } from '../../util/array';\nimport { regEx } from '../../util/regex';\nimport { coerceString } from '../../util/string';\nimport * as template from '../../util/template';\nimport type { BranchConfig, SelectAllConfig } from '../types';\nimport { extractRepoProblems } from './common';\nimport type { ConfigMigrationResult } from './config-migration';\nimport { getDepWarningsDashboard } from './errors-warnings';\nimport { PackageFiles } from './package-files';\nimport type { Vulnerability } from './process/types';\nimport { Vulnerabilities } from './process/vulnerabilities';\n\ninterface DependencyDashboard {\n dependencyDashboardChecks: Record<string, string>;\n dependencyDashboardRebaseAllOpen: boolean;\n dependencyDashboardAllPending: boolean;\n dependencyDashboardAllRateLimited: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ' - \\\\[ \\\\] <!-- unlimit-branch=([^\\\\s]+) -->',\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ' - \\\\[ \\\\] <!-- approve-branch=([^\\\\s]+) -->',\n 'g',\n);\nconst generalBranchRe = regEx(' <!-- ([a-zA-Z]+)-branch=([^\\\\s]+) -->');\nconst markedBranchesRe = regEx(\n ' - \\\\[x\\\\] <!-- ([a-zA-Z]+)-branch=([^\\\\s]+) -->',\n 'g',\n);\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- create-all-rate-limited-prs -->');\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- approve-all-pending-prs -->');\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return issueBody.includes(' - [x] <!-- rebase-all-open-prs -->');\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes('<!-- config-migration-pr-info -->')) {\n return 'migration-pr-exists';\n }\n\n if (issueBody.includes(' - [x] <!-- create-config-migration-pr -->')) {\n return 'checked';\n }\n\n if (issueBody.includes(' - [ ] <!-- create-config-migration-pr -->')) {\n return 'unchecked';\n }\n\n return 'no-checkbox';\n}\n\nfunction selectAllRelevantBranches(issueBody: string): string[] {\n const checkedBranches = [];\n if (checkOpenAllRateLimitedPR(issueBody)) {\n for (const match of issueBody.matchAll(rateLimitedRe)) {\n checkedBranches.push(match[0]);\n }\n }\n if (checkApproveAllPendingPR(issueBody)) {\n for (const match of issueBody.matchAll(pendingApprovalRe)) {\n checkedBranches.push(match[0]);\n }\n }\n return checkedBranches;\n}\n\nfunction getAllSelectedBranches(\n issueBody: string,\n dependencyDashboardChecks: Record<string, string>,\n): Record<string, string> {\n const allRelevantBranches = selectAllRelevantBranches(issueBody);\n for (const branch of allRelevantBranches) {\n const [, type, branchName] = generalBranchRe.exec(branch)!;\n dependencyDashboardChecks[branchName] = type;\n }\n return dependencyDashboardChecks;\n}\n\nfunction getCheckedBranches(issueBody: string): Record<string, string> {\n let dependencyDashboardChecks: Record<string, string> = {};\n for (const [, type, branchName] of issueBody.matchAll(markedBranchesRe)) {\n dependencyDashboardChecks[branchName] = type;\n }\n dependencyDashboardChecks = getAllSelectedBranches(\n issueBody,\n dependencyDashboardChecks,\n );\n return dependencyDashboardChecks;\n}\n\nfunction parseDashboardIssue(issueBody: string): DependencyDashboard {\n const dependencyDashboardChecks = getCheckedBranches(issueBody);\n const dependencyDashboardRebaseAllOpen = checkRebaseAll(issueBody);\n const dependencyDashboardAllPending = checkApproveAllPendingPR(issueBody);\n const dependencyDashboardAllRateLimited =\n checkOpenAllRateLimitedPR(issueBody);\n dependencyDashboardChecks.configMigrationCheckboxState =\n getConfigMigrationCheckboxState(issueBody);\n return {\n dependencyDashboardChecks,\n dependencyDashboardRebaseAllOpen,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardAllPending: false,\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllRateLimited: false,\n };\n const stringifiedConfig = JSON.stringify(config);\n if (\n config.dependencyDashboard === true ||\n stringifiedConfig.includes('\"dependencyDashboardApproval\":true') ||\n stringifiedConfig.includes('\"prCreation\":\"approval\"')\n ) {\n config.dependencyDashboardTitle =\n config.dependencyDashboardTitle ?? `Dependency Dashboard`;\n const issue = await platform.findIssue(config.dependencyDashboardTitle);\n if (issue) {\n config.dependencyDashboardIssue = issue.number;\n dashboardChecks = parseDashboardIssue(issue.body ?? '');\n }\n }\n\n if (config.checkedBranches) {\n const checkedBranchesRec: Record<string, string> = Object.fromEntries(\n config.checkedBranches.map((branchName) => [branchName, 'global-config']),\n );\n dashboardChecks.dependencyDashboardChecks = {\n ...dashboardChecks.dependencyDashboardChecks,\n ...checkedBranchesRec,\n };\n }\n\n Object.assign(config, dashboardChecks);\n}\n\nfunction getListItem(branch: BranchConfig, type: string): string {\n let item = ' - [ ] ';\n item += `<!-- ${type}-branch=${branch.branchName} -->`;\n if (branch.prNo) {\n // TODO: types (#22198)\n item += `[${branch.prTitle!}](../pull/${branch.prNo})`;\n } else {\n item += branch.prTitle;\n }\n const uniquePackages = [\n // TODO: types (#22198)\n ...new Set(branch.upgrades.map((upgrade) => `\\`${upgrade.depName!}\\``)),\n ];\n if (uniquePackages.length < 2) {\n return item + '\\n';\n }\n return item + ' (' + uniquePackages.join(', ') + ')\\n';\n}\n\nfunction appendRepoProblems(config: RenovateConfig, issueBody: string): string {\n let newIssueBody = issueBody;\n const repoProblems = extractRepoProblems(config.repository);\n if (repoProblems.size) {\n newIssueBody += '## Repository problems\\n\\n';\n const repoProblemsHeader =\n config.customizeDashboard?.repoProblemsHeader ??\n 'Renovate tried to run on this repository, but found these problems.';\n newIssueBody += template.compile(repoProblemsHeader, config) + '\\n\\n';\n\n for (const repoProblem of repoProblems) {\n newIssueBody += ` - ${repoProblem}\\n`;\n }\n newIssueBody += '\\n';\n }\n return newIssueBody;\n}\n\nexport async function ensureDependencyDashboard(\n config: SelectAllConfig,\n allBranches: BranchConfig[],\n packageFiles: Record<string, PackageFile[]> = {},\n configMigrationRes: ConfigMigrationResult,\n): Promise<void> {\n logger.debug('ensureDependencyDashboard()');\n if (config.mode === 'silent') {\n logger.debug(\n 'Dependency Dashboard issue is not created, updated or closed when mode=silent',\n );\n return;\n }\n // legacy/migrated issue\n const reuseTitle = 'Update Dependencies (Renovate Bot)';\n const branches = allBranches.filter(\n (branch) =>\n branch.result !== 'automerged' &&\n !branch.upgrades?.every((upgrade) => upgrade.remediationNotPossible),\n );\n if (\n !(\n config.dependencyDashboard === true ||\n config.dependencyDashboardApproval === true ||\n config.packageRules?.some((rule) => rule.dependencyDashboardApproval) ===\n true ||\n branches.some(\n (branch) =>\n !!branch.dependencyDashboardApproval ||\n !!branch.dependencyDashboardPrApproval,\n )\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n // istanbul ignore if\n if (config.repoIsOnboarded === false) {\n logger.debug('Repo is onboarding - skipping dependency dashboard');\n return;\n }\n logger.debug('Ensuring Dependency Dashboard');\n\n // Check packageFiles for any deprecations\n let hasDeprecations = false;\n const deprecatedPackages: Record<string, Record<string, boolean>> = {};\n logger.debug('Checking packageFiles for deprecated packages');\n if (is.nonEmptyObject(packageFiles)) {\n for (const [manager, fileNames] of Object.entries(packageFiles)) {\n for (const fileName of fileNames) {\n for (const dep of fileName.deps) {\n const name = dep.packageName ?? dep.depName;\n const hasReplacement = !!dep.updates?.find(\n (updates) => updates.updateType === 'replacement',\n );\n if (name && (dep.deprecationMessage ?? hasReplacement)) {\n hasDeprecations = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= hasReplacement;\n }\n }\n }\n }\n }\n\n const hasBranches = is.nonEmptyArray(branches);\n if (config.dependencyDashboardAutoclose && !hasBranches && !hasDeprecations) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would close Dependency Dashboard',\n );\n } else {\n logger.debug('Closing Dependency Dashboard');\n await platform.ensureIssueClosing(config.dependencyDashboardTitle!);\n }\n return;\n }\n let issueBody = '';\n\n if (config.dependencyDashboardHeader?.length) {\n issueBody +=\n template.compile(config.dependencyDashboardHeader, config) + '\\n\\n';\n }\n\n if (configMigrationRes.result === 'pr-exists') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n `<!-- config-migration-pr-info --> See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (error)\\n\\n' +\n `<!-- config-migration-pr-info --> The Config Migration branch exists but has been modified by another user. Renovate will not push to this branch unless it is first deleted. \\n\\n See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'add-checkbox') {\n issueBody +=\n '## Config Migration Needed\\n\\n' +\n ' - [ ] <!-- create-config-migration-pr --> Select this checkbox to let Renovate create an automated Config Migration PR.' +\n '\\n\\n';\n }\n\n issueBody = appendRepoProblems(config, issueBody);\n\n if (hasDeprecations) {\n issueBody += '> ⚠ **Warning**\\n> \\n';\n issueBody += 'These dependencies are deprecated:\\n\\n';\n issueBody += '| Datasource | Name | Replacement PR? |\\n';\n issueBody += '|------------|------|--------------|\\n';\n for (const manager of Object.keys(deprecatedPackages).sort()) {\n const deps = deprecatedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const hasReplacement = deps[depName];\n issueBody += `| ${manager} | \\`${depName}\\` | ${\n hasReplacement\n ? ''\n : ''\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n const pendingApprovals = branches.filter(\n (branch) => branch.result === 'needs-approval',\n );\n if (pendingApprovals.length) {\n issueBody += '## Pending Approval\\n\\n';\n issueBody += `These branches will be created by Renovate only once you click their checkbox below.\\n\\n`;\n for (const branch of pendingApprovals) {\n issueBody += getListItem(branch, 'approve');\n }\n if (pendingApprovals.length > 1) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- approve-all-pending-prs -->';\n issueBody += '🔐 **Create all pending approval PRs at once** 🔐\\n';\n }\n issueBody += '\\n';\n }\n const awaitingSchedule = branches.filter(\n (branch) => branch.result === 'not-scheduled',\n );\n if (awaitingSchedule.length) {\n issueBody += '## Awaiting Schedule\\n\\n';\n issueBody +=\n 'These updates are awaiting their schedule. Click on a checkbox to get an update now.\\n\\n';\n for (const branch of awaitingSchedule) {\n issueBody += getListItem(branch, 'unschedule');\n }\n issueBody += '\\n';\n }\n const rateLimited = branches.filter(\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-limit-reached',\n );\n if (rateLimited.length) {\n issueBody += '## Rate-Limited\\n\\n';\n issueBody +=\n 'These updates are currently rate-limited. Click on a checkbox below to force their creation now.\\n\\n';\n for (const branch of rateLimited) {\n issueBody += getListItem(branch, 'unlimit');\n }\n if (rateLimited.length > 1) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- create-all-rate-limited-prs -->';\n issueBody += '🔐 **Create all rate-limited PRs at once** 🔐\\n';\n }\n issueBody += '\\n';\n }\n const errorList = branches.filter((branch) => branch.result === 'error');\n if (errorList.length) {\n issueBody += '## Errored\\n\\n';\n issueBody +=\n 'These updates encountered an error and will be retried. Click on a checkbox below to force a retry now.\\n\\n';\n for (const branch of errorList) {\n issueBody += getListItem(branch, 'retry');\n }\n issueBody += '\\n';\n }\n const awaitingPr = branches.filter(\n (branch) => branch.result === 'needs-pr-approval',\n );\n if (awaitingPr.length) {\n issueBody += '## PR Creation Approval Required\\n\\n';\n issueBody +=\n \"These branches exist but PRs won't be created until you approve them by clicking on a checkbox.\\n\\n\";\n for (const branch of awaitingPr) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n const prEdited = branches.filter((branch) => branch.result === 'pr-edited');\n if (prEdited.length) {\n issueBody += '## Edited/Blocked\\n\\n';\n issueBody += `These updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox.\\n\\n`;\n for (const branch of prEdited) {\n issueBody += getListItem(branch, 'rebase');\n }\n issueBody += '\\n';\n }\n const prPending = branches.filter((branch) => branch.result === 'pending');\n if (prPending.length) {\n issueBody += '## Pending Status Checks\\n\\n';\n issueBody += `These updates await pending status checks. To force their creation now, click the checkbox below.\\n\\n`;\n for (const branch of prPending) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n const prPendingBranchAutomerge = branches.filter(\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n );\n if (prPendingBranchAutomerge.length) {\n issueBody += '## Pending Branch Automerge\\n\\n';\n issueBody += `These updates await pending status checks before automerging. Click on a checkbox to abort the branch automerge, and create a PR instead.\\n\\n`;\n for (const branch of prPendingBranchAutomerge) {\n issueBody += getListItem(branch, 'approvePr');\n }\n issueBody += '\\n';\n }\n\n const warn = getDepWarningsDashboard(packageFiles, config);\n if (warn) {\n issueBody += warn;\n issueBody += '\\n';\n }\n\n const otherRes = [\n 'pending',\n 'needs-approval',\n 'needs-pr-approval',\n 'not-scheduled',\n 'pr-limit-reached',\n 'commit-limit-reached',\n 'branch-limit-reached',\n 'already-existed',\n 'error',\n 'automerged',\n 'pr-edited',\n ];\n let inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n const otherBranches = inProgress.filter(\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n );\n // istanbul ignore if\n if (otherBranches.length) {\n issueBody += '## Other Branches\\n\\n';\n issueBody += `These updates are pending. To force PRs open, click the checkbox below.\\n\\n`;\n for (const branch of otherBranches) {\n issueBody += getListItem(branch, 'other');\n }\n issueBody += '\\n';\n }\n inProgress = inProgress.filter(\n (branch) => branch.prNo && !branch.prBlockedBy,\n );\n if (inProgress.length) {\n issueBody += '## Open\\n\\n';\n issueBody +=\n 'These updates have all been created already. Click a checkbox below to force a retry/rebase of any.\\n\\n';\n for (const branch of inProgress) {\n issueBody += getListItem(branch, 'rebase');\n }\n if (inProgress.length > 2) {\n issueBody += ' - [ ] ';\n issueBody += '<!-- rebase-all-open-prs -->';\n issueBody += '**Click on this checkbox to rebase all open PRs at once**';\n issueBody += '\\n';\n }\n issueBody += '\\n';\n }\n const alreadyExisted = branches.filter(\n (branch) => branch.result === 'already-existed',\n );\n if (alreadyExisted.length) {\n issueBody += '## Ignored or Blocked\\n\\n';\n issueBody +=\n 'These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.\\n\\n';\n for (const branch of alreadyExisted) {\n issueBody += getListItem(branch, 'recreate');\n }\n issueBody += '\\n';\n }\n\n if (!hasBranches) {\n issueBody +=\n 'This repository currently has no open or pending branches.\\n\\n';\n }\n\n // add CVE section\n issueBody += await getDashboardMarkdownVulnerabilities(config, packageFiles);\n\n // fit the detected dependencies section\n const footer = getFooter(config);\n issueBody += PackageFiles.getDashboardMarkdown(\n platform.maxBodyLength() - issueBody.length - footer.length,\n );\n\n issueBody += footer;\n\n if (config.dependencyDashboardIssue) {\n // If we're not changing the dashboard issue then we can skip checking if the user changed it\n // The cached issue we get back here will reflect its state at the _start_ of our run\n const cachedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n );\n if (cachedIssue?.body === issueBody) {\n logger.debug('No changes to dependency dashboard issue needed');\n return;\n }\n\n // Skip cache when getting the issue to ensure we get the latest body,\n // including any updates the user made after we started the run\n const updatedIssue = await platform.getIssue?.(\n config.dependencyDashboardIssue,\n false,\n );\n if (updatedIssue) {\n const { dependencyDashboardChecks } = parseDashboardIssue(\n coerceString(updatedIssue.body),\n );\n for (const branchName of Object.keys(config.dependencyDashboardChecks!)) {\n delete dependencyDashboardChecks[branchName];\n }\n for (const branchName of Object.keys(dependencyDashboardChecks)) {\n const checkText = `- [ ] <!-- ${dependencyDashboardChecks[branchName]}-branch=${branchName} -->`;\n issueBody = issueBody.replace(\n checkText,\n checkText.replace('[ ]', '[x]'),\n );\n }\n }\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n { title: config.dependencyDashboardTitle },\n 'DRY-RUN: Would ensure Dependency Dashboard',\n );\n } else {\n await platform.ensureIssue({\n title: config.dependencyDashboardTitle!,\n reuseTitle,\n body: platform.massageMarkdown(issueBody, config.rebaseLabel),\n labels: config.dependencyDashboardLabels,\n confidential: config.confidential,\n });\n }\n}\n\nexport function getAbandonedPackagesMd(\n packageFiles: Record<string, PackageFile[]>,\n): string {\n const abandonedPackages: Record<\n string,\n Record<string, string | undefined | null>\n > = {};\n let abandonedCount = 0;\n\n for (const [manager, managerPackageFiles] of Object.entries(packageFiles)) {\n for (const packageFile of managerPackageFiles) {\n for (const dep of coerceArray(packageFile.deps)) {\n if (dep.depName && dep.isAbandoned) {\n abandonedCount++;\n abandonedPackages[manager] = abandonedPackages[manager] || {};\n abandonedPackages[manager][dep.depName] = dep.mostRecentTimestamp;\n }\n }\n }\n }\n\n if (abandonedCount === 0) {\n return '';\n }\n\n let abandonedMd = '> ℹ **Note**\\n> \\n';\n abandonedMd +=\n 'These dependencies have not received updates for an extended period and may be unmaintained:\\n\\n';\n\n abandonedMd += '<details>\\n';\n abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\\n\\n`;\n abandonedMd += '| Datasource | Name | Last Updated |\\n';\n abandonedMd += '|------------|------|-------------|\\n';\n\n for (const manager of Object.keys(abandonedPackages).sort()) {\n const deps = abandonedPackages[manager];\n for (const depName of Object.keys(deps).sort()) {\n const mostRecentTimestamp = deps[depName];\n const formattedDate = mostRecentTimestamp\n ? DateTime.fromISO(mostRecentTimestamp).toFormat('yyyy-MM-dd')\n : 'unknown';\n abandonedMd += `| ${manager} | \\`${depName}\\` | \\`${formattedDate}\\` |\\n`;\n }\n }\n\n abandonedMd += '\\n</details>\\n\\n';\n abandonedMd +=\n 'Packages are marked as abandoned when they exceed the [`abandonmentThreshold`](https://docs.renovatebot.com/configuration-options/#abandonmentthreshold) since their last release.\\n';\n abandonedMd +=\n 'Unlike deprecated packages with official notices, abandonment is detected by release inactivity.\\n\\n';\n\n return abandonedMd + '\\n';\n}\n\nfunction getFooter(config: RenovateConfig): string {\n let footer = '';\n if (config.dependencyDashboardFooter?.length) {\n footer +=\n '---\\n' +\n template.compile(config.dependencyDashboardFooter, config) +\n '\\n';\n }\n\n return footer;\n}\n\nexport async function getDashboardMarkdownVulnerabilities(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]>,\n): Promise<string> {\n let result = '';\n\n if (\n is.nullOrUndefined(config.dependencyDashboardOSVVulnerabilitySummary) ||\n config.dependencyDashboardOSVVulnerabilitySummary === 'none'\n ) {\n return result;\n }\n\n result += '## Vulnerabilities\\n\\n';\n\n const vulnerabilityFetcher = await Vulnerabilities.create();\n const vulnerabilities = await vulnerabilityFetcher.fetchVulnerabilities(\n config,\n packageFiles,\n );\n\n if (vulnerabilities.length === 0) {\n result +=\n 'Renovate has not found any CVEs on [osv.dev](https://osv.dev).\\n\\n';\n return result;\n }\n\n const unresolvedVulnerabilities = vulnerabilities.filter((value) =>\n is.nullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += `\\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (is.truthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n';\n } else {\n result +=\n ' CVEs have possible Renovate fixes.\\nSee [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\\n';\n }\n\n let renderedVulnerabilities: Vulnerability[];\n switch (config.dependencyDashboardOSVVulnerabilitySummary) {\n // filter vulnerabilities to display based on configuration\n case 'unresolved':\n renderedVulnerabilities = unresolvedVulnerabilities;\n break;\n default:\n renderedVulnerabilities = vulnerabilities;\n }\n\n const managerRecords: Record<\n string,\n Record<string, Record<string, Vulnerability[]>>\n > = {};\n for (const vulnerability of renderedVulnerabilities) {\n const { manager, packageFile } = vulnerability.packageFileConfig;\n if (is.nullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (is.nullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n is.nullOrUndefined(\n managerRecords[manager!][packageFile][vulnerability.packageName],\n )\n ) {\n managerRecords[manager!][packageFile][vulnerability.packageName] = [];\n }\n managerRecords[manager!][packageFile][vulnerability.packageName].push(\n vulnerability,\n );\n }\n\n for (const [manager, packageFileRecords] of Object.entries(managerRecords)) {\n result += `<details><summary>${manager}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageFile, packageNameRecords] of Object.entries(\n packageFileRecords,\n )) {\n result += `<details><summary>${packageFile}</summary>\\n<blockquote>\\n\\n`;\n for (const [packageName, cves] of Object.entries(packageNameRecords)) {\n result += `<details><summary>${packageName}</summary>\\n<blockquote>\\n\\n`;\n for (const vul of cves) {\n const id = vul.vulnerability.id;\n const suffix = is.nonEmptyString(vul.fixedVersion)\n ? ` (fixed in ${vul.fixedVersion})`\n : '';\n result += `- [${id}](https://osv.dev/vulnerability/${id})${suffix}\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n result += `</blockquote>\\n</details>\\n\\n`;\n }\n\n return result;\n}\n"]}
|
@@ -105,7 +105,7 @@ If you need any further assistance then you can also [request help here](${confi
|
|
105
105
|
}
|
106
106
|
prBody += onboardingConfigHashComment;
|
107
107
|
logger_1.logger.trace('prBody:\n' + prBody);
|
108
|
-
prBody = platform_1.platform.massageMarkdown(prBody);
|
108
|
+
prBody = platform_1.platform.massageMarkdown(prBody, config.rebaseLabel);
|
109
109
|
if (existingPr) {
|
110
110
|
logger_1.logger.debug('Found open onboarding PR');
|
111
111
|
// Check if existing PR needs updating
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/pr/index.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 { logger } from '../../../../logger';\nimport type { PackageFile } from '../../../../modules/manager/types';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { hashBody } from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { emojify } from '../../../../util/emoji';\nimport { getFile } from '../../../../util/git';\nimport { toSha256 } from '../../../../util/hash';\nimport * as template from '../../../../util/template';\nimport type { BranchConfig } from '../../../types';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings';\nimport { getPlatformPrOptions } from '../../update/pr';\nimport { prepareLabels } from '../../update/pr/labels';\nimport { addParticipants } from '../../update/pr/participants';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common';\nimport { getBaseBranchDesc } from './base-branch';\nimport { getConfigDesc } from './config-description';\nimport { getExpectedPrList } from './pr-list';\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n OnboardingState.onboardingCacheValid ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const existingPr = await platform.getBranchPr(\n config.onboardingBranch!,\n config.defaultBranch,\n );\n if (existingPr) {\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n config.onboardingBranch!,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n const onboardingConfigHashComment =\n await getOnboardingConfigHashComment(config);\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n config.productLinks!.homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n config.requireConfig === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n config.productLinks!.documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n config.productLinks!.help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n if (packageFiles && Object.entries(packageFiles).length) {\n let files: string[] = [];\n for (const [manager, managerFiles] of Object.entries(packageFiles)) {\n files = files.concat(\n managerFiles.map((file) => ` * \\`${file.packageFile}\\` (${manager})`),\n );\n }\n prBody =\n prBody.replace(\n '{{PACKAGE FILES}}',\n '### Detected Package Files\\n\\n' + files.join('\\n'),\n ) + '\\n';\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n prBody = prBody.replace('{{PRLIST}}\\n', getExpectedPrList(config, branches));\n if (is.string(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (is.string(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n logger.trace('prBody:\\n' + prBody);\n\n prBody = platform.massageMarkdown(prBody);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : config.onboardingPrTitle!;\n const pr = await platform.createPr({\n sourceBranch: config.onboardingBranch!,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(config.onboardingBranch!);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(\n config: RenovateConfig,\n): Promise<string> {\n const configFile = getDefaultConfigFileName(config);\n const existingContents =\n (await getFile(configFile, config.onboardingBranch)) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/pr/index.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 { logger } from '../../../../logger';\nimport type { PackageFile } from '../../../../modules/manager/types';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { hashBody } from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { emojify } from '../../../../util/emoji';\nimport { getFile } from '../../../../util/git';\nimport { toSha256 } from '../../../../util/hash';\nimport * as template from '../../../../util/template';\nimport type { BranchConfig } from '../../../types';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings';\nimport { getPlatformPrOptions } from '../../update/pr';\nimport { prepareLabels } from '../../update/pr/labels';\nimport { addParticipants } from '../../update/pr/participants';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common';\nimport { getBaseBranchDesc } from './base-branch';\nimport { getConfigDesc } from './config-description';\nimport { getExpectedPrList } from './pr-list';\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n OnboardingState.onboardingCacheValid ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const existingPr = await platform.getBranchPr(\n config.onboardingBranch!,\n config.defaultBranch,\n );\n if (existingPr) {\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n config.onboardingBranch!,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n const onboardingConfigHashComment =\n await getOnboardingConfigHashComment(config);\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n config.productLinks!.homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n config.requireConfig === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n config.productLinks!.documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n config.productLinks!.help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n if (packageFiles && Object.entries(packageFiles).length) {\n let files: string[] = [];\n for (const [manager, managerFiles] of Object.entries(packageFiles)) {\n files = files.concat(\n managerFiles.map((file) => ` * \\`${file.packageFile}\\` (${manager})`),\n );\n }\n prBody =\n prBody.replace(\n '{{PACKAGE FILES}}',\n '### Detected Package Files\\n\\n' + files.join('\\n'),\n ) + '\\n';\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n prBody = prBody.replace('{{PRLIST}}\\n', getExpectedPrList(config, branches));\n if (is.string(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (is.string(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n logger.trace('prBody:\\n' + prBody);\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : config.onboardingPrTitle!;\n const pr = await platform.createPr({\n sourceBranch: config.onboardingBranch!,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(config.onboardingBranch!);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(\n config: RenovateConfig,\n): Promise<string> {\n const configFile = getDefaultConfigFileName(config);\n const existingContents =\n (await getFile(configFile, config.onboardingBranch)) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"]}
|
@@ -706,7 +706,7 @@ async function processBranch(branchConfig) {
|
|
706
706
|
content += `##### File name: ${error.lockFile}\n\n`;
|
707
707
|
content += `\`\`\`\n${error.stderr}\n\`\`\`\n\n`;
|
708
708
|
});
|
709
|
-
content = platform_1.platform.massageMarkdown(content);
|
709
|
+
content = platform_1.platform.massageMarkdown(content, config.rebaseLabel);
|
710
710
|
if (!(config.suppressNotifications.includes('artifactErrors') ||
|
711
711
|
config.suppressNotifications.includes('lockFileErrors'))) {
|
712
712
|
if (global_1.GlobalConfig.get('dryRun')) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/index.ts"],"names":[],"mappings":";;AAqHA,sCA+0BC;;AAp8BD,kEAAkC;AAClC,iCAAiC;AACjC,sDAAyD;AAEzD,yEAW8C;AAC9C,+CAAwD;AACxD,6EAAiF;AAEjF,2DAAwD;AACxD,kEAG8C;AAC9C,0DAAuD;AACvD,sFAAiF;AACjF,gDAAqD;AACrD,kDAAiD;AACjD,wEAI2C;AAC3C,oDAAuD;AACvD,8DAAoD;AACpD,4EAAsD;AACtD,mDAAkE;AAElE,+CAAkD;AAClD,8BAAuD;AACvD,+CAAiD;AACjD,2CAAqD;AACrD,2CAAiD;AACjD,mDAA+C;AAC/C,qDAAoD;AACpD,qCAA+C;AAC/C,4GAAyE;AACzE,+CAAuD;AACvD,uDAAqE;AACrE,mCAAoD;AACpD,yCAA4C;AAC5C,mDAA8D;AAE9D,KAAK,UAAU,WAAW,CACxB,MAAsB,EACtB,QAAY;IAEZ,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1D,IAAI,WAAW,EAAE,CAAC;QAChB,eAAM,CAAC,KAAK,CACV,6CAA6C,QAAQ,CAAC,MAAM,EAAE,CAC/D,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAY,CAAC,CAAC;IACrE,IAAI,WAAW,EAAE,CAAC;QAChB,eAAM,CAAC,KAAK,CACV,8CAA8C,QAAQ,CAAC,MAAM,EAAE,CAChE,CAAC;QACF,qBAAqB;QACrB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CACT,+BAA+B,MAAM,CAAC,WAAY,UAChD,QAAQ,CAAC,MACX,EAAE,CACH,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,mBAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,WAAY,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IAC/D,IAAI,eAAe,EAAE,CAAC;QACpB,eAAM,CAAC,KAAK,CACV,gDAAgD,QAAQ,CAAC,MAAM,EAAE,CAClE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IACpD,IAAI,CAAC;QACH,MAAM,SAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,2BAA2B,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,EAAM;IACrC,MAAM,eAAe,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC;IAC/D,IAAI,eAAe,IAAI,EAAE,CAAC,YAAY,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC,YAAY,KAAK,eAAe,CAAC;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAWM,KAAK,UAAU,aAAa,CACjC,YAA0B;IAE1B,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,MAAM,GAAiB,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/C,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC;IAC5C,IAAI,YAAY,GAAG,MAAM,SAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,eAAe,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,CAAC,eAAe,EAAE,CAAC;QACpE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAC1C,MAAM,CAAC,YAAa,EACpB,MAAM,CAAC,eAAgB,CACxB,CAAC;QACF,YAAY,GAAG,MAAM,SAAG,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;YAC/B,eAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,GAAG,MAAM,mBAAQ,CAAC,WAAW,CACvC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;IACF,eAAM,CAAC,KAAK,CAAC,gBAAgB,YAAY,EAAE,CAAC,CAAC;IAC7C,MAAM,wBAAwB,GAC5B,MAAM,CAAC,yBAAyB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACxD,eAAM,CAAC,KAAK,CAAC,4BAA4B,wBAAyB,EAAE,CAAC,CAAC;IACtE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,eAAe,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,eAAM,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACjD,MAAM,kBAAkB,GAAG,IAAA,eAAO,EAAC,mCAAmC,CAAC,CAAC;IACxE,MAAM,mBAAmB,GAAG,IAAA,eAAO,EACjC,6CAA6C,CAC9C,CAAC;IACF,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,UAAU,GACd,CAAC,QAAQ,IAAI,MAAM,CAAC,SAAS;YAC3B,CAAC,CAAC,MAAM,IAAA,iCAAgB,EAAC,MAAM,CAAC;YAChC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,UAAU,EAAE,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CAAC,gBAAgB,UAAU,CAAC,MAAM,wBAAwB,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,eAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;gBACrE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;gBACzB,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACrC,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,QAAQ,IAAI,UAAU,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAChE,eAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAC3B,4CAA4C,CAC7C,CAAC;YACF,MAAM,IAAA,gCAAc,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;YACzC,OAAO;gBACL,YAAY,EAAE,KAAK;gBACnB,IAAI,EAAE,UAAU,CAAC,MAAM;gBACvB,MAAM,EAAE,iBAAiB;aAC1B,CAAC;QACJ,CAAC;QACD,IACE,CAAC,YAAY;YACb,YAAY,CAAC,aAAa;YAC1B,CAAC,wBAAwB,EACzB,CAAC;YACD,eAAM,CAAC,KAAK,CACV,UAAU,MAAM,CAAC,UAAU,gEAAgE,CAC5F,CAAC;YACF,OAAO;gBACL,YAAY,EAAE,KAAK;gBACnB,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC1D,eAAM,CAAC,KAAK,CACV,UAAU,MAAM,CAAC,UAAU,2CAA2C,CACvE,CAAC;gBACF,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;oBACtB,MAAM,EAAE,gBAAgB;iBACzB,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,2BAA2B,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBACpE,eAAM,CAAC,KAAK,CACV,UAAU,MAAM,CAAC,UAAU,gEAAgE,CAC5F,CAAC;gBACF,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;oBACtB,MAAM,EAAE,gBAAgB;iBACzB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,eAAM,CAAC,KAAK,CACV,kBAAkB,IAAA,iBAAQ,EAAC,eAAe,CAAC,4BAA4B,IAAA,iBAAQ,EAAC,UAAU,CAAC,sBAAsB,IAAA,iBAAQ,EAAC,WAAW,CAAC,EAAE,CACzI,CAAC;QAEF,IACE,CAAC,YAAY;YACb,IAAA,uBAAc,EAAC,UAAU,EAAE,YAAY,CAAC;YACxC,CAAC,wBAAwB;YACzB,CAAC,MAAM,CAAC,oBAAoB,EAC5B,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO;gBACL,YAAY;gBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QACD,IACE,IAAA,uBAAc,EAAC,SAAS,CAAC;YACzB,CAAC,wBAAwB;YACzB,CAAC,MAAM,CAAC,oBAAoB,EAC5B,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACxD,OAAO;gBACL,YAAY;gBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,sBAAsB;aAC/B,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACjB,sCAAsC;YACtC,MAAM,CAAC,YAAY,GAAG,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAC9C,MAAM,CAAC,iBAAkB,CAC1B,CAAC;YAEF,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC;YAEhE,IAAI,YAAY,IAAI,CAAC,wBAAwB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACrE,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,eAAM,CAAC,IAAI,CACT,2EAA2E,CAC5E,CAAC;oBACF,OAAO;wBACL,YAAY,EAAE,IAAI;wBAClB,IAAI,EAAE,QAAQ,EAAE,MAAM;wBACtB,MAAM,EAAE,SAAS;qBAClB,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC/C,MAAM,gBAAgB,GAAG,MAAM,SAAG,CAAC,gBAAgB,CACjD,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,CAClB,CAAC;YACF,IAAI,QAAQ,EAAE,CAAC;gBACb,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBACzC,IAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;oBAC9B,eAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,mCAAkB,CAAC,CAAC;gBACtC,CAAC;gBACD,IAAI,gBAAgB,IAAI,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1D,eAAM,CAAC,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC5D,MAAM,IAAA,kCAAgB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBACzC,IAAI,CAAC,CAAC,CAAC,CAAC,wBAAwB,IAAI,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;wBAC5D,OAAO;4BACL,YAAY;4BACZ,IAAI,EAAE,QAAQ,CAAC,MAAM;4BACrB,MAAM,EAAE,WAAW;yBACpB,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,gBAAgB,EAAE,CAAC;gBAC5B,MAAM,KAAK,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC;oBAClC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,KAAK,EAAE,OAAO;oBACd,YAAY,EAAE,MAAM,CAAC,UAAU;iBAChC,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,eAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;oBAClE,OAAO;wBACL,YAAY;wBACZ,MAAM,EAAE,WAAW;qBACpB,CAAC;gBACJ,CAAC;gBACD,MAAM,SAAS,GAAG,MAAM,SAAG,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAG,CAAC;gBAC5B,IAAI,CAAC,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBACxC,eAAM,CAAC,KAAK,CACV,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAClD,sDAAsD,CACvD,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,KAAK,CACV,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAClD,uCAAuC,CACxC,CAAC;oBACF,OAAO;wBACL,YAAY;wBACZ,MAAM,EAAE,WAAW;qBACpB,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,iBAAiB;QACjB,MAAM,CAAC,cAAc,GAAG,IAAA,yBAAc,EAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,eAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAChE,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;oBACtB,MAAM,EAAE,eAAe;iBACxB,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;gBACnE,eAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC9D,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;oBACtB,MAAM,EAAE,sBAAsB;iBAC/B,CAAC;YACJ,CAAC;YACD,IACE,CAAC,QAAQ;gBACT,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,iEAAiE;cAC1H,CAAC;gBACD,eAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACrD,OAAO;oBACL,YAAY;oBACZ,MAAM,EAAE,eAAe;iBACxB,CAAC;YACJ,CAAC;YACD,eAAM,CAAC,KAAK,CACV,qEAAqE,CACtE,CAAC;QACJ,CAAC;QACD,kBAAkB;QAClB,IACE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,CAAC,OAAO,EAAE,EAAE,CACV,CAAC,YAAE,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC3C,YAAE,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAA,0CAAuB,EAAC,OAAO,CAAC,iBAAkB,CAAC,CACtD,EACD,CAAC;YACD,0EAA0E;YAC1E,0DAA0D;YAC1D,MAAM,CAAC,eAAe,GAAG,OAAO,CAAC;YACjC,kEAAkE;YAClE,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtC,IACE,YAAE,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC;oBAC5C,OAAO,CAAC,gBAAgB,EACxB,CAAC;oBACD,MAAM,WAAW,GAAG,IAAA,mBAAY,EAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;oBAC3D,IAAI,WAAW,GAAG,IAAA,qBAAY,EAAC,IAAA,kBAAI,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;wBAChE,eAAM,CAAC,KAAK,CACV;4BACE,OAAO,EAAE,OAAO,CAAC,OAAO;4BACxB,WAAW;4BACX,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;yBAC7C,EACD,2CAA2C,CAC5C,CAAC;wBACF,MAAM,CAAC,eAAe,GAAG,QAAQ,CAAC;wBAClC,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAW,CAAC;gBACvC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAQ,CAAC;gBACjC,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAkB,CAAC;gBACrD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAW,CAAC;gBACvC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAe,CAAC;gBAC/C,MAAM,UAAU,GAAG,OAAO,CAAC,UAAW,CAAC;gBACvC,IAAI,IAAA,0CAAuB,EAAC,iBAAiB,CAAC,EAAE,CAAC;oBAC/C,MAAM,UAAU,GACd,CAAC,MAAM,IAAA,0CAAuB,EAC5B,UAAU,EACV,OAAO,EACP,cAAc,EACd,UAAU,EACV,UAAU,CACX,CAAC,IAAI,SAAS,CAAC;oBAClB,IAAI,IAAA,2CAAwB,EAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC;wBAC5D,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,EAC1C,gDAAgD,CACjD,CAAC;wBACF,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC;wBACnC,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;YACD,+DAA+D;YAC/D,IACE,CAAC,wBAAwB;gBACzB,CAAC,YAAY;gBACb,MAAM,CAAC,eAAe,KAAK,QAAQ;gBACnC,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAW,CAAC,EAC9D,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;gBACF,OAAO;oBACL,YAAY;oBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;oBACtB,MAAM,EAAE,SAAS;iBAClB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,mBAAmB,GACrB,wBAAwB,KAAK,QAAQ;YACrC,CAAC,CAAC,MAAM,CAAC,gCAAgC;YACzC,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;QAC3B,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,6BAA6B,CAAC;QACvE,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC,iCAAiC,CAAC;QAC3E,IAAI,mBAAmB,EAAE,CAAC;YACxB,eAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1C,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;aAAM,IAAI,wBAAwB,KAAK,eAAe,EAAE,CAAC;YACxD,eAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;YACnC,mBAAmB,GAAG,IAAI,CAAC;QAC7B,CAAC;aAAM,IAAI,uBAAuB,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CACV,wEAAwE,CACzE,CAAC;QACJ,CAAC;aAAM,IAAI,uBAAuB,EAAE,CAAC;YACnC,eAAM,CAAC,KAAK,CACV,6EAA6E,CAC9E,CAAC;QACJ,CAAC;aAAM,IACL,YAAY;YACZ,MAAM,CAAC,UAAU,KAAK,OAAO;YAC7B,CAAC,CAAC,gBAAgB,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YACnE,CAAC,wBAAwB,EACzB,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;YACjE,OAAO;gBACL,YAAY;gBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC;QACD,iGAAiG;QACjG,qGAAqG;aAChG,IACH,QAAQ,EAAE,YAAY;YACtB,QAAQ,CAAC,YAAY,KAAK,MAAM,CAAC,UAAU,EAC3C,CAAC;YACD,eAAM,CAAC,KAAK,CACV,gEAAgE,CACjE,CAAC;YACF,MAAM,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,IAAA,iCAAyB,EAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QACD,uBAAuB;QACvB,eAAM,CAAC,KAAK,CAAC,8BAA8B,MAAM,CAAC,mBAAoB,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,CAAC,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7D,MAAM,SAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,GAAG,GAAG,MAAM,IAAA,oCAAsB,EAAC,MAAM,CAAC,CAAC;YACjD,qBAAqB;YACrB,IAAI,GAAG,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAChD,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;YAC/B,IAAI,MAAM,CAAC,mBAAmB,EAAE,MAAM,EAAE,CAAC;gBACvC,eAAM,CAAC,KAAK,CACV,WAAW,MAAM,CAAC,mBAAmB,CAAC,MAAM,gBAAgB,CAC7D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,eAAe,GAAG,MAAM,IAAA,gCAAkB,EAC9C,MAAM,EACN,YAAY,CAAC,YAAa,CAC3B,CAAC;YACF,MAAM,CAAC,cAAc,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,MAAM,CAC1D,eAAe,CAAC,cAAc,CAC/B,CAAC;YACF,MAAM,CAAC,gBAAgB,GAAG,CAAC,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9D,eAAe,CAAC,gBAAgB,CACjC,CAAC;YACF,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;gBACpC,eAAM,CAAC,KAAK,CACV;oBACE,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACtD;iBACF,EACD,WAAW,MAAM,CAAC,gBAAgB,CAAC,MAAM,aAAa,CACvD,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,eAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,IAAA,2BAAe,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YAED,MAAM,yBAAyB,GAC7B,MAAM,IAAA,uCAA0B,EAAC,MAAM,CAAC,CAAC;YAE3C,IAAI,yBAAyB,KAAK,IAAI,EAAE,CAAC;gBACvC,MAAM,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,yBAAyB,CAAC;gBACvE,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;gBAC3C,MAAM,CAAC,cAAc,GAAG,cAAc,CAAC;YACzC,CAAC;YAED,iGAAiG;YACjG,MAAM,IAAA,4BAAY,EAAC,MAAM,CAAC,CAAC;YAE3B,IAAA,mBAAU,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAEpB,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;gBAClC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,eAAM,CAAC,KAAK,CAAC,oBAAoB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBAC7D,MAAM,gBAAgB,GAAG,gBAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;oBACnE,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,gBAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;wBAC3D,eAAM,CAAC,KAAK,CACV,0DAA0D,CAC3D,CAAC;oBACJ,CAAC;yBAAM,IAAI,YAAY,EAAE,CAAC;wBACxB,eAAM,CAAC,KAAK,CACV,iEAAiE,CAClE,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,eAAM,CAAC,KAAK,CACV,yDAAyD,CAC1D,CAAC;wBACF,MAAM,IAAI,KAAK,CAAC,uCAAsB,CAAC,CAAC;oBAC1C,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,gBAAgB,EAAE,MAAM,IAAI,QAAQ,EAAE,CAAC;gBACvD,2GAA2G;gBAC3G,qBAAqB;gBACrB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/B,eAAM,CAAC,IAAI,CACT,gDAAgD,QAAQ,CAAC,MAAM,EAAE,CAClE,CAAC;gBACJ,CAAC;qBAAM,CAAC;oBACN,qFAAqF;oBACrF,MAAM,IAAA,8BAAoB,EAAC;wBACzB,IAAI,EAAE,UAAU;wBAChB,MAAM,EAAE,QAAQ,CAAC,MAAM;wBACvB,KAAK,EAAE,kBAAkB;qBAC1B,CAAC,CAAC;oBAEH,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;wBACpC,MAAM,IAAA,8BAAoB,EAAC;4BACzB,IAAI,EAAE,UAAU;4BAChB,MAAM,EAAE,QAAQ,CAAC,MAAM;4BACvB,KAAK,EAAE,mBAAmB;yBAC3B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,cAAc,GAAG,mBAAmB,IAAI,CAAC,YAAY,CAAC;YAE5D,MAAM,CAAC,YAAY;gBACjB,YAAY;oBACZ,CAAC,MAAM,SAAG,CAAC,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,WAAW,GAAG,cAAc,IAAI,MAAM,CAAC,YAAY,CAAC;YAE3D,iEAAiE;YACjE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,gCAAgC;gBAChC,MAAM,CAAC,aAAa,GAAG,GAAG,MAAM,CAAC,aAAc,OAAO,QAAQ,CAAC,OAAO,CACpE,MAAM,CAAC,UAAU,EACjB;oBACE,GAAG,MAAM;oBACT,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO;oBACnC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;iBACtC,CACF,EAAE,CAAC;gBAEJ,eAAM,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;YACzE,CAAC;YAED,SAAS,GAAG,MAAM,IAAA,4BAAmB,EAAC,MAAM,CAAC,CAAC;YAC9C,mHAAmH;YACnH,kFAAkF;YAClF,MAAM,SAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5C,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,iBAAiB,GAAG,IAAA,yBAAoB,EAAC,MAAM,CAAC,CAAC;YACvD,IACE,iBAAiB,CAAC,oBAAoB;gBACtC,mBAAQ,CAAC,0BAA0B,EACnC,CAAC;gBACD,MAAM,mBAAQ,CAAC,0BAA0B,CAAC;oBACxC,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,iBAAiB;iBAClB,CAAC,CAAC;YACL,CAAC;YACD,qBAAqB;YACrB,IAAI,mBAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,MAAM,mBAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY,EAAE,CAAC;YAChC,OAAO;gBACL,YAAY;gBACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aAClB,CAAC;QACJ,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YACpD,eAAM,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,sBAAsB;QACtB,MAAM,IAAA,kCAAsB,EAAC,MAAM,CAAC,CAAC;QACrC,MAAM,IAAA,4BAAY,EAAC,MAAM,CAAC,CAAC;QAC3B,MAAM,IAAA,6BAAa,EAAC,MAAM,CAAC,CAAC;QAE5B,mFAAmF;QACnF,0EAA0E;QAC1E,kDAAkD;QAClD,IACE,CAAC,QAAQ;YACT,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM;YAC9B,CAAC,mBAAmB;YACpB,SAAS;YACT,MAAM,CAAC,UAAU,KAAK,WAAW,EACjC,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,uCAAuC,SAAS,EAAE,CAAC,CAAC;YACjE,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,eAAe;gBACf,MAAM,EAAE,SAAS;gBACjB,SAAS;aACV,CAAC;QACJ,CAAC;QAED,uGAAuG;QACvG,kEAAkE;QAClE,uFAAuF;QACvF,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;YACzE,MAAM,WAAW,GAAG,MAAM,IAAA,8BAAkB,EAAC,MAAM,CAAC,CAAC;YACrD,eAAM,CAAC,KAAK,CAAC,eAAe,WAAW,EAAE,CAAC,CAAC;YAC3C,IAAI,WAAW,KAAK,YAAY,EAAE,CAAC;gBACjC,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC/B,eAAM,CAAC,IAAI,CAAC,8BAA8B,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;gBAClE,CAAC;qBAAM,CAAC;oBACN,MAAM,oBAAoB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChD,CAAC;gBACD,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACjD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;YACvD,CAAC;YACD,IAAI,WAAW,KAAK,cAAc,EAAE,CAAC;gBACnC,eAAM,CAAC,KAAK,CACV,kFAAkF,CACnF,CAAC;gBACF,OAAO;oBACL,YAAY;oBACZ,MAAM,EAAE,eAAe;oBACvB,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,IACE,WAAW,KAAK,OAAO;gBACvB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAW,CAAC;gBACpD,CAAC,CAAC,gBAAgB,IAAI,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EACnE,CAAC;gBACD,eAAM,CAAC,IAAI,CACT,2HAA2H,CAC5H,CAAC;gBACF,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,6BAA6B,GAAG,WAAW,CAAC;YACrD,CAAC;YACD,IACE,WAAW,KAAK,+BAA+B;gBAC/C,WAAW,KAAK,qBAAqB;gBACrC,WAAW,KAAK,QAAQ,EACxB,CAAC;gBACD,eAAM,CAAC,KAAK,CACV,8CAA8C,WAAW,EAAE,CAC5D,CAAC;gBACF,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;gBACtB,MAAM,CAAC,6BAA6B,GAAG,WAAW,CAAC;YACrD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;YAC3B,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,mCAAkB,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,6CAA4B,EAAE,CAAC;YACjD,eAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,mCAAkB,EAAE,CAAC;YACvC,eAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACpD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,sCAAsC,CAAC,EAAE,CAAC;YACpE,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yCAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IACE,GAAG,CAAC,OAAO,EAAE,UAAU,CACrB,+DAA+D,CAChE,EACD,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,yCAAwB,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,yCAAwB,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,kDAAiC,EAAE,CAAC;YACtD,eAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAC1D,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,uCAAsB,EAAE,CAAC;YAC3C,eAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,+CAA8B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,+CAA8B,EAAE,CAAC;YACnD,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC5C,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,wCAAwC,CAAC,EAAE,CAAC;YACrE,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,OAAO,KAAK,0CAAyB,EAAE,CAAC;YAC9C,eAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACvD,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9C,qFAAqF;YACrF,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,eAAe;gBACf,IAAI,EAAE,QAAQ,EAAE,MAAM;gBACtB,MAAM,EAAE,OAAO;gBACf,SAAS;aACV,CAAC;QACJ,CAAC;aAAM,IACL,GAAG,CAAC,QAAQ;YACZ,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EACpD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8CAA6B,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACxD,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,wCAAwC,CAAC,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,mCAAkB,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,kCAAiB,EAAE,CAAC;YAC7C,eAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACnD,MAAM,GAAG,CAAC;QACZ,CAAC;aAAM,IAAI,GAAG,CAAC,OAAO,KAAK,gCAAe,EAAE,CAAC;YAC3C,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACjD,MAAM,GAAG,CAAC;QACZ,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,YAAY,uCAAiB,CAAC,EAAE,CAAC;YAC/C,eAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAChD,CAAC;QACD,iEAAiE;QACjE,OAAO;YACL,YAAY;YACZ,IAAI,EAAE,QAAQ,EAAE,MAAM;YACtB,MAAM,EAAE,OAAO;YACf,SAAS;SACV,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,eAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5B,eAAM,CAAC,KAAK,CACV,aAAa,MAAM,CAAC,MAAO,CAAC,MAAM,eAChC,MAAM,CAAC,QAAS,CAAC,MACnB,WAAW,CACZ,CAAC;QACF,MAAM,cAAc,GAAG,MAAM,IAAA,aAAQ,EAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,cAAc,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YACzC,MAAM,EAAE,WAAW,EAAE,GAAG,cAAc,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC;YAChB,IAAI,WAAW,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAC;gBAClE,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;gBACxD,OAAO;oBACL,YAAY;oBACZ,WAAW;oBACX,MAAM,EAAE,kBAAkB;oBAC1B,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,2DAA2D;YAC3D,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;gBACpC,OAAO;oBACL,YAAY;oBACZ,WAAW;oBACX,MAAM,EAAE,mBAAmB;oBAC3B,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,KAAK,eAAe,EAAE,CAAC;gBACpC,OAAO;oBACL,YAAY;oBACZ,WAAW;oBACX,MAAM,EAAE,SAAS;oBACjB,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,KAAK,iBAAiB,EAAE,CAAC;gBACtC,OAAO;oBACL,YAAY;oBACZ,WAAW;oBACX,MAAM,EAAE,MAAM;oBACd,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;gBAC5B,OAAO;oBACL,YAAY;oBACZ,WAAW;oBACX,MAAM,EAAE,OAAO;oBACf,SAAS;iBACV,CAAC;YACJ,CAAC;YACD,eAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,4BAA4B,CAAC,CAAC;YAC3D,OAAO;gBACL,YAAY;gBACZ,WAAW;gBACX,MAAM,EAAE,OAAO;gBACf,SAAS;aACV,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,EAAE,EAAE,EAAE,GAAG,cAAc,CAAC;YAC9B,QAAQ,GAAG,EAAE,CAAC;YACd,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;gBAClC,eAAM,CAAC,IAAI,CACT,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,EACzC,gBAAgB,CACjB,CAAC;gBACF,IAAI,OAAO,GAAG,4BAA4B,CAAC;gBAC3C,OAAO;oBACL,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;gBACjE,OAAO;oBACL,2EAA2E,CAAC;gBAC9E,OAAO,IAAI,IAAA,eAAO,EAChB,iHAAiH,CAClH,CAAC;gBACF,OAAO;oBACL,kEAAkE,CAAC;gBACrE,OAAO,IAAI,wCAAwC,CAAC;gBACpD,OAAO;oBACL,6DAA6D,CAAC;gBAChE,OAAO;oBACL,+EAA+E,CAAC;gBAClF,OAAO,IAAI,0DAA0D,CAAC;gBACtE,uBAAuB;gBACvB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtC,OAAO,IAAI,oBAAoB,KAAK,CAAC,QAAS,MAAM,CAAC;oBACrD,OAAO,IAAI,WAAW,KAAK,CAAC,MAAO,cAAc,CAAC;gBACpD,CAAC,CAAC,CAAC;gBACH,OAAO,GAAG,mBAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC5C,IACE,CAAC,CACC,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC;oBACxD,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CACzD,EACD,CAAC;oBACD,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC/B,eAAM,CAAC,IAAI,CACT,wDAAwD,EAAE,CAAC,MAAM,EAAE,CACpE,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,IAAA,uBAAa,EAAC;4BAClB,MAAM,EAAE,EAAE,CAAC,MAAM;4BACjB,KAAK,EAAE,kBAAkB;4BACzB,OAAO;yBACR,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;oBACnC,MAAM,YAAY,GAAa,EAAE,CAAC;oBAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;wBAC5C,YAAY,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;wBACrD,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACpC,CAAC;oBACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC1C,MAAM,IAAA,uBAAa,EAAC;wBAClB,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,KAAK,EAAE,mBAAmB;wBAC1B,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;gBAED,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC/C,8EAA8E;oBAC9E,IAAI,MAAM,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBAC9C,eAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;wBACpC,MAAM,iBAAiB,GAAG,MAAM,IAAA,0BAAc,EAAC,EAAE,EAAE,MAAM,CAAC,CAAC;wBAC3D,IAAI,iBAAiB,EAAE,UAAU,EAAE,CAAC;4BAClC,OAAO;gCACL,YAAY;gCACZ,MAAM,EAAE,YAAY;gCACpB,SAAS;6BACV,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,eAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,0BAA0B,CAAC,CAAC;QACxC,IACE,GAAG,YAAY,uCAAiB;YAChC,CAAC,6CAA4B,EAAE,mCAAkB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EACxE,CAAC;YACD,eAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACpC,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,2EAA2E;QAC3E,eAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,YAAY,EAAE,IAAI;YAClB,eAAe;YACf,IAAI,EAAE,QAAQ,EAAE,MAAM;YACtB,MAAM,EAAE,YAAY;YACpB,SAAS;SACV,CAAC;IACJ,CAAC;IACD,OAAO;QACL,YAAY;QACZ,eAAe;QACf,IAAI,EAAE,QAAQ,EAAE,MAAM;QACtB,MAAM,EAAE,MAAM;QACd,SAAS;KACV,CAAC;AACJ,CAAC","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n CONFIG_VALIDATION,\n MANAGER_LOCKFILE_ERROR,\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n WORKER_FILE_UPDATE_FAILED,\n} from '../../../../constants/error-messages';\nimport { logger, removeMeta } from '../../../../logger';\nimport { getAdditionalFiles } from '../../../../modules/manager/npm/post-update';\nimport type { Pr } from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport {\n ensureComment,\n ensureCommentRemoval,\n} from '../../../../modules/platform/comment';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedMs } from '../../../../util/date';\nimport { emojify } from '../../../../util/emoji';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence';\nimport { coerceNumber } from '../../../../util/number';\nimport { toMs } from '../../../../util/pretty-time';\nimport * as template from '../../../../util/template';\nimport { getCount, isLimitReached } from '../../../global/limits';\nimport type { BranchConfig, BranchResult, PrBlockedBy } from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { ensurePr, getPlatformPrOptions } from '../pr';\nimport { checkAutoMerge } from '../pr/automerge';\nimport { setArtifactErrorStatus } from './artifacts';\nimport { tryBranchAutomerge } from './automerge';\nimport { bumpVersions } from './bump-versions';\nimport { prAlreadyExisted } from './check-existing';\nimport { commitFilesToBranch } from './commit';\nimport executePostUpgradeCommands from './execute-post-upgrade-commands';\nimport { getUpdatedPackageFiles } from './get-updated';\nimport { handleClosedPr, handleModifiedPr } from './handle-existing';\nimport { shouldReuseExistingBranch } from './reuse';\nimport { isScheduledNow } from './schedule';\nimport { setConfidence, setStability } from './status-checks';\n\nasync function rebaseCheck(\n config: RenovateConfig,\n branchPr: Pr,\n): Promise<boolean> {\n const titleRebase = branchPr.title?.startsWith('rebase!');\n if (titleRebase) {\n logger.debug(\n `Manual rebase requested via PR title for #${branchPr.number}`,\n );\n return true;\n }\n const labelRebase = !!branchPr.labels?.includes(config.rebaseLabel!);\n if (labelRebase) {\n logger.debug(\n `Manual rebase requested via PR labels for #${branchPr.number}`,\n );\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would delete label ${config.rebaseLabel!} from #${\n branchPr.number\n }`,\n );\n } else {\n await platform.deleteLabel(branchPr.number, config.rebaseLabel!);\n }\n return true;\n }\n const prRebaseChecked = !!branchPr.bodyStruct?.rebaseRequested;\n if (prRebaseChecked) {\n logger.debug(\n `Manual rebase requested via PR checkbox for #${branchPr.number}`,\n );\n return true;\n }\n\n return false;\n}\n\nasync function deleteBranchSilently(branchName: string): Promise<void> {\n try {\n await scm.deleteBranch(branchName);\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ branchName, err }, 'Branch auto-remove failed');\n }\n}\n\nfunction userChangedTargetBranch(pr: Pr): boolean {\n const oldTargetBranch = pr.bodyStruct?.debugData?.targetBranch;\n if (oldTargetBranch && pr.targetBranch) {\n return pr.targetBranch !== oldTargetBranch;\n }\n return false;\n}\n\nexport interface ProcessBranchResult {\n branchExists: boolean;\n updatesVerified?: boolean;\n prBlockedBy?: PrBlockedBy;\n prNo?: number;\n result: BranchResult;\n commitSha?: string | null;\n}\n\nexport async function processBranch(\n branchConfig: BranchConfig,\n): Promise<ProcessBranchResult> {\n let commitSha: string | null = null;\n let config: BranchConfig = { ...branchConfig };\n logger.trace({ config }, 'processBranch()');\n let branchExists = await scm.branchExists(config.branchName);\n let updatesVerified = false;\n if (!branchExists && config.branchPrefix !== config.branchPrefixOld) {\n const branchName = config.branchName.replace(\n config.branchPrefix!,\n config.branchPrefixOld!,\n );\n branchExists = await scm.branchExists(branchName);\n if (branchExists) {\n config.branchName = branchName;\n logger.debug('Found existing branch with branchPrefixOld');\n }\n }\n\n let branchPr = await platform.getBranchPr(\n config.branchName,\n config.baseBranch,\n );\n logger.debug(`branchExists=${branchExists}`);\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n logger.debug(`dependencyDashboardCheck=${dependencyDashboardCheck!}`);\n if (branchPr) {\n config.rebaseRequested = await rebaseCheck(config, branchPr);\n logger.debug(`PR rebase requested=${config.rebaseRequested}`);\n }\n const keepUpdatedLabel = config.keepUpdatedLabel;\n const artifactErrorTopic = emojify(':warning: Artifact update problem');\n const artifactNoticeTopic = emojify(\n ':information_source: Artifact update notice',\n );\n try {\n // Check if branch already existed\n const existingPr =\n !branchPr || config.automerge\n ? await prAlreadyExisted(config)\n : undefined;\n if (existingPr?.state === 'merged') {\n logger.debug(`Matching PR #${existingPr.number} was merged previously`);\n if (config.automerge) {\n logger.debug('Disabling automerge because PR was merged previously');\n config.automerge = false;\n config.automergedPreviously = true;\n }\n } else if (!branchPr && existingPr && !dependencyDashboardCheck) {\n logger.debug(\n { prTitle: config.prTitle },\n 'Closed PR already exists. Skipping branch.',\n );\n await handleClosedPr(config, existingPr);\n return {\n branchExists: false,\n prNo: existingPr.number,\n result: 'already-existed',\n };\n }\n if (\n !branchExists &&\n branchConfig.pendingChecks &&\n !dependencyDashboardCheck\n ) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because internalChecksFilter was not met`,\n );\n return {\n branchExists: false,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n if (!branchExists) {\n if (config.mode === 'silent' && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because mode=silent`,\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'needs-approval',\n };\n }\n if (config.dependencyDashboardApproval && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because dependencyDashboardApproval=true`,\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'needs-approval',\n };\n }\n }\n\n logger.debug(\n `Open PR Count: ${getCount('ConcurrentPRs')}, Existing Branch Count: ${getCount('Branches')}, Hourly PR Count: ${getCount('HourlyPRs')}`,\n );\n\n if (\n !branchExists &&\n isLimitReached('Branches', branchConfig) &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached branch limit - skipping branch creation');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'branch-limit-reached',\n };\n }\n if (\n isLimitReached('Commits') &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached commits limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-limit-reached',\n };\n }\n if (branchExists) {\n // check if branch is labelled to stop\n config.stopUpdating = branchPr?.labels?.includes(\n config.stopUpdatingLabel!,\n );\n\n const prRebaseChecked = !!branchPr?.bodyStruct?.rebaseRequested;\n\n if (branchExists && !dependencyDashboardCheck && config.stopUpdating) {\n if (!prRebaseChecked) {\n logger.info(\n 'Branch updating is skipped because stopUpdatingLabel is present in config',\n );\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n }\n\n logger.debug('Checking if PR has been edited');\n const branchIsModified = await scm.isBranchModified(\n config.branchName,\n config.baseBranch,\n );\n if (branchPr) {\n logger.debug('Found existing branch PR');\n if (branchPr.state !== 'open') {\n logger.debug(\n 'PR has been closed or merged since this run started - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n if (branchIsModified || userChangedTargetBranch(branchPr)) {\n logger.debug(`PR has been edited, PrNo:${branchPr.number}`);\n await handleModifiedPr(config, branchPr);\n if (!(!!dependencyDashboardCheck || config.rebaseRequested)) {\n return {\n branchExists,\n prNo: branchPr.number,\n result: 'pr-edited',\n };\n }\n }\n } else if (branchIsModified) {\n const oldPr = await platform.findPr({\n branchName: config.branchName,\n state: '!open',\n targetBranch: config.baseBranch,\n });\n if (!oldPr) {\n logger.debug('Branch has been edited but found no PR - skipping');\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n const branchSha = await scm.getBranchCommit(config.branchName);\n const oldPrSha = oldPr?.sha;\n if (!oldPrSha || oldPrSha === branchSha) {\n logger.debug(\n { oldPrNumber: oldPr.number, oldPrSha, branchSha },\n 'Found old PR matching this branch - will override it',\n );\n } else {\n logger.debug(\n { oldPrNumber: oldPr.number, oldPrSha, branchSha },\n 'Found old PR but the SHA is different',\n );\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n }\n }\n\n // Check schedule\n config.isScheduledNow = isScheduledNow(config, 'schedule');\n if (!config.isScheduledNow && !dependencyDashboardCheck) {\n if (!branchExists) {\n logger.debug('Skipping branch creation as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'not-scheduled',\n };\n }\n if (config.updateNotScheduled === false && !config.rebaseRequested) {\n logger.debug('Skipping branch update as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'update-not-scheduled',\n };\n }\n if (\n !branchPr &&\n !(config.automerge && config.automergeType === 'branch') // if branch is configured for automerge there's no need for a PR\n ) {\n logger.debug('Skipping PR creation out of schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n logger.debug(\n 'Branch + PR exists but is not scheduled -- will update if necessary',\n );\n }\n //stability checks\n if (\n config.upgrades.some(\n (upgrade) =>\n (is.nonEmptyString(upgrade.minimumReleaseAge) &&\n is.nonEmptyString(upgrade.releaseTimestamp)) ||\n isActiveConfidenceLevel(upgrade.minimumConfidence!),\n )\n ) {\n // Only set a stability status check if one or more of the updates contain\n // both a minimumReleaseAge setting and a releaseTimestamp\n config.stabilityStatus = 'green';\n // Default to 'success' but set 'pending' if any update is pending\n for (const upgrade of config.upgrades) {\n if (\n is.nonEmptyString(upgrade.minimumReleaseAge) &&\n upgrade.releaseTimestamp\n ) {\n const timeElapsed = getElapsedMs(upgrade.releaseTimestamp);\n if (timeElapsed < coerceNumber(toMs(upgrade.minimumReleaseAge))) {\n logger.debug(\n {\n depName: upgrade.depName,\n timeElapsed,\n minimumReleaseAge: upgrade.minimumReleaseAge,\n },\n 'Update has not passed minimum release age',\n );\n config.stabilityStatus = 'yellow';\n continue;\n }\n }\n const datasource = upgrade.datasource!;\n const depName = upgrade.depName!;\n const minimumConfidence = upgrade.minimumConfidence!;\n const updateType = upgrade.updateType!;\n const currentVersion = upgrade.currentVersion!;\n const newVersion = upgrade.newVersion!;\n if (isActiveConfidenceLevel(minimumConfidence)) {\n const confidence =\n (await getMergeConfidenceLevel(\n datasource,\n depName,\n currentVersion,\n newVersion,\n updateType,\n )) ?? 'neutral';\n if (satisfiesConfidenceLevel(confidence, minimumConfidence)) {\n config.confidenceStatus = 'green';\n } else {\n logger.debug(\n { depName, confidence, minimumConfidence },\n 'Update does not meet minimum confidence scores',\n );\n config.confidenceStatus = 'yellow';\n continue;\n }\n }\n }\n // Don't create a branch if we know it will be status 'pending'\n if (\n !dependencyDashboardCheck &&\n !branchExists &&\n config.stabilityStatus === 'yellow' &&\n ['not-pending', 'status-success'].includes(config.prCreation!)\n ) {\n logger.debug(\n 'Skipping branch creation due to internal status checks not met',\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n }\n\n let userRebaseRequested =\n dependencyDashboardCheck === 'rebase' ||\n !!config.dependencyDashboardRebaseAllOpen ||\n !!config.rebaseRequested;\n const userApproveAllPendingPR = !!config.dependencyDashboardAllPending;\n const userOpenAllRateLimtedPR = !!config.dependencyDashboardAllRateLimited;\n if (userRebaseRequested) {\n logger.debug('User has requested rebase');\n config.reuseExistingBranch = false;\n } else if (dependencyDashboardCheck === 'global-config') {\n logger.debug(`Manual create/rebase requested via checkedBranches`);\n config.reuseExistingBranch = false;\n userRebaseRequested = true;\n } else if (userApproveAllPendingPR) {\n logger.debug(\n 'A user manually approved all pending PRs via the Dependency Dashboard.',\n );\n } else if (userOpenAllRateLimtedPR) {\n logger.debug(\n 'A user manually approved all rate-limited PRs via the Dependency Dashboard.',\n );\n } else if (\n branchExists &&\n config.rebaseWhen === 'never' &&\n !(keepUpdatedLabel && branchPr?.labels?.includes(keepUpdatedLabel)) &&\n !dependencyDashboardCheck\n ) {\n logger.debug('rebaseWhen=never so skipping branch update check');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n // if the base branch has been changed by user in renovate config, rebase onto the new baseBranch\n // we have already confirmed earlier that branch isn't modified, so its safe to use targetBranch here\n else if (\n branchPr?.targetBranch &&\n branchPr.targetBranch !== config.baseBranch\n ) {\n logger.debug(\n 'Base branch changed by user, rebasing the branch onto new base',\n );\n config.reuseExistingBranch = false;\n } else {\n config = await shouldReuseExistingBranch(config);\n }\n // TODO: types (#22198)\n logger.debug(`Using reuseExistingBranch: ${config.reuseExistingBranch!}`);\n if (!(config.reuseExistingBranch && config.skipBranchUpdate)) {\n await scm.checkoutBranch(config.baseBranch);\n const res = await getUpdatedPackageFiles(config);\n // istanbul ignore if\n if (res.artifactErrors && config.artifactErrors) {\n res.artifactErrors = config.artifactErrors.concat(res.artifactErrors);\n }\n config = { ...config, ...res };\n if (config.updatedPackageFiles?.length) {\n logger.debug(\n `Updated ${config.updatedPackageFiles.length} package files`,\n );\n } else {\n logger.debug('No package files need updating');\n }\n const additionalFiles = await getAdditionalFiles(\n config,\n branchConfig.packageFiles!,\n );\n config.artifactErrors = (config.artifactErrors ?? []).concat(\n additionalFiles.artifactErrors,\n );\n config.updatedArtifacts = (config.updatedArtifacts ?? []).concat(\n additionalFiles.updatedArtifacts,\n );\n if (config.updatedArtifacts?.length) {\n logger.debug(\n {\n updatedArtifacts: config.updatedArtifacts.map((f) =>\n f.type === 'deletion' ? `${f.path} (delete)` : f.path,\n ),\n },\n `Updated ${config.updatedArtifacts.length} lock files`,\n );\n } else {\n logger.debug('No updated lock files in branch');\n }\n if (config.fetchChangeLogs === 'branch') {\n await embedChangelogs(config.upgrades);\n }\n\n const postUpgradeCommandResults =\n await executePostUpgradeCommands(config);\n\n if (postUpgradeCommandResults !== null) {\n const { updatedArtifacts, artifactErrors } = postUpgradeCommandResults;\n config.updatedArtifacts = updatedArtifacts;\n config.artifactErrors = artifactErrors;\n }\n\n // modifies the file changes in place to allow having a version bump in a packageFile or artifact\n await bumpVersions(config);\n\n removeMeta(['dep']);\n\n if (config.artifactErrors?.length) {\n if (config.releaseTimestamp) {\n logger.debug(`Branch timestamp: ` + config.releaseTimestamp);\n const releaseTimestamp = DateTime.fromISO(config.releaseTimestamp);\n if (releaseTimestamp.plus({ hours: 2 }) < DateTime.local()) {\n logger.debug(\n 'PR is older than 2 hours, raise PR with lock file errors',\n );\n } else if (branchExists) {\n logger.debug(\n 'PR is less than 2 hours old but branchExists so updating anyway',\n );\n } else {\n logger.debug(\n 'PR is less than 2 hours old - raise error instead of PR',\n );\n throw new Error(MANAGER_LOCKFILE_ERROR);\n }\n } else {\n logger.debug('PR has no releaseTimestamp');\n }\n } else if (config.updatedArtifacts?.length && branchPr) {\n // If there are artifacts, no errors, and an existing PR then ensure any artifacts error comment is removed\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure comment removal in PR #${branchPr.number}`,\n );\n } else {\n // Remove artifacts error comment only if this run has successfully updated artifacts\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactErrorTopic,\n });\n\n if (!config.artifactNotices?.length) {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactNoticeTopic,\n });\n }\n }\n }\n const forcedManually = userRebaseRequested || !branchExists;\n\n config.isConflicted ??=\n branchExists &&\n (await scm.isBranchConflicted(config.baseBranch, config.branchName));\n config.forceCommit = forcedManually || config.isConflicted;\n\n // compile commit message with body, which maybe needs changelogs\n if (config.commitBody) {\n // changelog is on first upgrade\n config.commitMessage = `${config.commitMessage!}\\n\\n${template.compile(\n config.commitBody,\n {\n ...config,\n logJSON: config.upgrades[0].logJSON,\n releases: config.upgrades[0].releases,\n },\n )}`;\n\n logger.trace(`commitMessage: ` + JSON.stringify(config.commitMessage));\n }\n\n commitSha = await commitFilesToBranch(config);\n // Checkout to base branch to ensure that the next branch processing always starts with git being on the baseBranch\n // baseBranch is not checked out at the start of processBranch() due to pull/16246\n await scm.checkoutBranch(config.baseBranch);\n updatesVerified = true;\n }\n\n if (branchPr) {\n const platformPrOptions = getPlatformPrOptions(config);\n if (\n platformPrOptions.usePlatformAutomerge &&\n platform.reattemptPlatformAutomerge\n ) {\n await platform.reattemptPlatformAutomerge({\n number: branchPr.number,\n platformPrOptions,\n });\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(branchPr.number);\n }\n }\n if (!commitSha && !branchExists) {\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n if (commitSha) {\n const action = branchExists ? 'updated' : 'created';\n logger.info({ commitSha }, `Branch ${action}`);\n }\n // Set branch statuses\n await setArtifactErrorStatus(config);\n await setStability(config);\n await setConfidence(config);\n\n // new commit means status check are pretty sure pending but maybe not reported yet\n // if PR has not been created + new commit + prCreation !== immediate skip\n // but do not break when there are artifact errors\n if (\n !branchPr &&\n !config.artifactErrors?.length &&\n !userRebaseRequested &&\n commitSha &&\n config.prCreation !== 'immediate'\n ) {\n logger.debug(`Branch status pending, current sha: ${commitSha}`);\n return {\n branchExists: true,\n updatesVerified,\n result: 'pending',\n commitSha,\n };\n }\n\n // Try to automerge branch and finish if successful, but only if branch already existed before this run\n // skip if we have a non-immediate pr and there is an existing PR,\n // we want to update the PR and skip the Auto merge since status checks aren't done yet\n if (!config.artifactErrors?.length && (!commitSha || config.ignoreTests)) {\n const mergeStatus = await tryBranchAutomerge(config);\n logger.debug(`mergeStatus=${mergeStatus}`);\n if (mergeStatus === 'automerged') {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would delete branch' + config.branchName);\n } else {\n await deleteBranchSilently(config.branchName);\n }\n logger.debug('Branch is automerged - returning');\n return { branchExists: false, result: 'automerged' };\n }\n if (mergeStatus === 'off schedule') {\n logger.debug(\n 'Branch cannot automerge now because automergeSchedule is off schedule - skipping',\n );\n return {\n branchExists,\n result: 'not-scheduled',\n commitSha,\n };\n }\n if (\n mergeStatus === 'stale' &&\n ['conflicted', 'never'].includes(config.rebaseWhen!) &&\n !(keepUpdatedLabel && branchPr?.labels?.includes(keepUpdatedLabel))\n ) {\n logger.warn(\n 'Branch cannot automerge because it is behind base branch and rebaseWhen setting disallows rebasing - raising a PR instead',\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n if (\n mergeStatus === 'automerge aborted - PR exists' ||\n mergeStatus === 'branch status error' ||\n mergeStatus === 'failed'\n ) {\n logger.debug(\n `Branch automerge not possible, mergeStatus:${mergeStatus}`,\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode === 404) {\n logger.debug({ err }, 'Received a 404 error - aborting run');\n throw new Error(REPOSITORY_CHANGED);\n }\n if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {\n logger.debug('Passing rate-limit-exceeded error up');\n throw err;\n }\n if (err.message === REPOSITORY_CHANGED) {\n logger.debug('Passing repository-changed error up');\n throw err;\n }\n if (err.message?.startsWith('remote: Invalid username or password')) {\n logger.debug('Throwing bad credentials');\n throw new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (\n err.message?.startsWith(\n 'ssh_exchange_identification: Connection closed by remote host',\n )\n ) {\n logger.debug('Throwing bad credentials');\n throw new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (err.message === PLATFORM_BAD_CREDENTIALS) {\n logger.debug('Passing bad-credentials error up');\n throw err;\n }\n if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) {\n logger.debug('Passing integration-unauthorized error up');\n throw err;\n }\n if (err.message === MANAGER_LOCKFILE_ERROR) {\n logger.debug('Passing lockfile-error up');\n throw err;\n }\n if (err.message?.includes('space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === SYSTEM_INSUFFICIENT_DISK_SPACE) {\n logger.debug('Passing disk-space error up');\n throw err;\n }\n if (err.message.startsWith('Resource not accessible by integration')) {\n logger.debug('Passing 403 error up');\n throw err;\n }\n if (err.message === WORKER_FILE_UPDATE_FAILED) {\n logger.warn('Error updating branch: update failure');\n } else if (err.message.startsWith('bundler-')) {\n // we have already warned inside the bundler artifacts error handling, so just return\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'error',\n commitSha,\n };\n } else if (\n err.messagee &&\n err.message.includes('fatal: Authentication failed')\n ) {\n throw new Error(PLATFORM_AUTHENTICATION_ERROR);\n } else if (err.message?.includes('fatal: bad revision')) {\n logger.debug({ err }, 'Aborting job due to bad revision error');\n throw new Error(REPOSITORY_CHANGED);\n } else if (err.message === CONFIG_VALIDATION) {\n logger.debug('Passing config validation error up');\n throw err;\n } else if (err.message === TEMPORARY_ERROR) {\n logger.debug('Passing TEMPORARY_ERROR error up');\n throw err;\n } else if (!(err instanceof ExternalHostError)) {\n logger.warn({ err }, `Error updating branch`);\n }\n // Don't throw here - we don't want to stop the other renovations\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'error',\n commitSha,\n };\n }\n try {\n logger.debug('Ensuring PR');\n logger.debug(\n `There are ${config.errors!.length} errors and ${\n config.warnings!.length\n } warnings`,\n );\n const ensurePrResult = await ensurePr(config);\n if (ensurePrResult.type === 'without-pr') {\n const { prBlockedBy } = ensurePrResult;\n branchPr = null;\n if (prBlockedBy === 'RateLimited' && !config.isVulnerabilityAlert) {\n logger.debug('Reached PR limit - skipping PR creation');\n return {\n branchExists,\n prBlockedBy,\n result: 'pr-limit-reached',\n commitSha,\n };\n }\n // TODO: ensurePr should check for automerge itself (#9719)\n if (prBlockedBy === 'NeedsApproval') {\n return {\n branchExists,\n prBlockedBy,\n result: 'needs-pr-approval',\n commitSha,\n };\n }\n if (prBlockedBy === 'AwaitingTests') {\n return {\n branchExists,\n prBlockedBy,\n result: 'pending',\n commitSha,\n };\n }\n if (prBlockedBy === 'BranchAutomerge') {\n return {\n branchExists,\n prBlockedBy,\n result: 'done',\n commitSha,\n };\n }\n if (prBlockedBy === 'Error') {\n return {\n branchExists,\n prBlockedBy,\n result: 'error',\n commitSha,\n };\n }\n logger.warn({ prBlockedBy }, 'Unknown PrBlockedBy result');\n return {\n branchExists,\n prBlockedBy,\n result: 'error',\n commitSha,\n };\n }\n if (ensurePrResult.type === 'with-pr') {\n const { pr } = ensurePrResult;\n branchPr = pr;\n if (config.artifactErrors?.length) {\n logger.warn(\n { artifactErrors: config.artifactErrors },\n 'artifactErrors',\n );\n let content = `Renovate failed to update `;\n content +=\n config.artifactErrors.length > 1 ? 'artifacts' : 'an artifact';\n content +=\n ' related to this branch. You probably do not want to merge this PR as-is.';\n content += emojify(\n `\\n\\n:recycle: Renovate will retry this branch, including artifacts, only when one of the following happens:\\n\\n`,\n );\n content +=\n ' - any of the package files in this branch needs updating, or \\n';\n content += ' - the branch becomes conflicted, or\\n';\n content +=\n ' - you click the rebase/retry checkbox if found above, or\\n';\n content +=\n ' - you rename this PR\\'s title to start with \"rebase!\" to trigger it manually';\n content += '\\n\\nThe artifact failure details are included below:\\n\\n';\n // TODO: types (#22198)\n config.artifactErrors.forEach((error) => {\n content += `##### File name: ${error.lockFile!}\\n\\n`;\n content += `\\`\\`\\`\\n${error.stderr!}\\n\\`\\`\\`\\n\\n`;\n });\n content = platform.massageMarkdown(content);\n if (\n !(\n config.suppressNotifications!.includes('artifactErrors') ||\n config.suppressNotifications!.includes('lockFileErrors')\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure lock file error comment in PR #${pr.number}`,\n );\n } else {\n await ensureComment({\n number: pr.number,\n topic: artifactErrorTopic,\n content,\n });\n }\n }\n } else {\n if (config.artifactNotices?.length) {\n const contentLines: string[] = [];\n for (const notice of config.artifactNotices) {\n contentLines.push(`##### File name: ${notice.file}`);\n contentLines.push(notice.message);\n }\n const content = contentLines.join('\\n\\n');\n await ensureComment({\n number: pr.number,\n topic: artifactNoticeTopic,\n content,\n });\n }\n\n if (config.automerge) {\n logger.debug('PR is configured for automerge');\n // skip automerge if there is a new commit since status checks aren't done yet\n if (config.ignoreTests === true || !commitSha) {\n logger.debug('checking auto-merge');\n const prAutomergeResult = await checkAutoMerge(pr, config);\n if (prAutomergeResult?.automerged) {\n return {\n branchExists,\n result: 'automerged',\n commitSha,\n };\n }\n }\n } else {\n logger.debug('PR is not configured for automerge');\n }\n }\n }\n } catch (err) /* istanbul ignore next */ {\n if (\n err instanceof ExternalHostError ||\n [PLATFORM_RATE_LIMIT_EXCEEDED, REPOSITORY_CHANGED].includes(err.message)\n ) {\n logger.debug('Passing PR error up');\n throw err;\n }\n // Otherwise don't throw here - we don't want to stop the other renovations\n logger.error({ err }, `Error ensuring PR`);\n }\n if (!branchExists) {\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'pr-created',\n commitSha,\n };\n }\n return {\n branchExists,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'done',\n commitSha,\n };\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/branch/index.ts"],"names":[],"mappings":"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","sourcesContent":["import is from '@sindresorhus/is';\nimport { DateTime } from 'luxon';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n CONFIG_VALIDATION,\n MANAGER_LOCKFILE_ERROR,\n PLATFORM_AUTHENTICATION_ERROR,\n PLATFORM_BAD_CREDENTIALS,\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n WORKER_FILE_UPDATE_FAILED,\n} from '../../../../constants/error-messages';\nimport { logger, removeMeta } from '../../../../logger';\nimport { getAdditionalFiles } from '../../../../modules/manager/npm/post-update';\nimport type { Pr } from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport {\n ensureComment,\n ensureCommentRemoval,\n} from '../../../../modules/platform/comment';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedMs } from '../../../../util/date';\nimport { emojify } from '../../../../util/emoji';\nimport {\n getMergeConfidenceLevel,\n isActiveConfidenceLevel,\n satisfiesConfidenceLevel,\n} from '../../../../util/merge-confidence';\nimport { coerceNumber } from '../../../../util/number';\nimport { toMs } from '../../../../util/pretty-time';\nimport * as template from '../../../../util/template';\nimport { getCount, isLimitReached } from '../../../global/limits';\nimport type { BranchConfig, BranchResult, PrBlockedBy } from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { ensurePr, getPlatformPrOptions } from '../pr';\nimport { checkAutoMerge } from '../pr/automerge';\nimport { setArtifactErrorStatus } from './artifacts';\nimport { tryBranchAutomerge } from './automerge';\nimport { bumpVersions } from './bump-versions';\nimport { prAlreadyExisted } from './check-existing';\nimport { commitFilesToBranch } from './commit';\nimport executePostUpgradeCommands from './execute-post-upgrade-commands';\nimport { getUpdatedPackageFiles } from './get-updated';\nimport { handleClosedPr, handleModifiedPr } from './handle-existing';\nimport { shouldReuseExistingBranch } from './reuse';\nimport { isScheduledNow } from './schedule';\nimport { setConfidence, setStability } from './status-checks';\n\nasync function rebaseCheck(\n config: RenovateConfig,\n branchPr: Pr,\n): Promise<boolean> {\n const titleRebase = branchPr.title?.startsWith('rebase!');\n if (titleRebase) {\n logger.debug(\n `Manual rebase requested via PR title for #${branchPr.number}`,\n );\n return true;\n }\n const labelRebase = !!branchPr.labels?.includes(config.rebaseLabel!);\n if (labelRebase) {\n logger.debug(\n `Manual rebase requested via PR labels for #${branchPr.number}`,\n );\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would delete label ${config.rebaseLabel!} from #${\n branchPr.number\n }`,\n );\n } else {\n await platform.deleteLabel(branchPr.number, config.rebaseLabel!);\n }\n return true;\n }\n const prRebaseChecked = !!branchPr.bodyStruct?.rebaseRequested;\n if (prRebaseChecked) {\n logger.debug(\n `Manual rebase requested via PR checkbox for #${branchPr.number}`,\n );\n return true;\n }\n\n return false;\n}\n\nasync function deleteBranchSilently(branchName: string): Promise<void> {\n try {\n await scm.deleteBranch(branchName);\n } catch (err) /* istanbul ignore next */ {\n logger.debug({ branchName, err }, 'Branch auto-remove failed');\n }\n}\n\nfunction userChangedTargetBranch(pr: Pr): boolean {\n const oldTargetBranch = pr.bodyStruct?.debugData?.targetBranch;\n if (oldTargetBranch && pr.targetBranch) {\n return pr.targetBranch !== oldTargetBranch;\n }\n return false;\n}\n\nexport interface ProcessBranchResult {\n branchExists: boolean;\n updatesVerified?: boolean;\n prBlockedBy?: PrBlockedBy;\n prNo?: number;\n result: BranchResult;\n commitSha?: string | null;\n}\n\nexport async function processBranch(\n branchConfig: BranchConfig,\n): Promise<ProcessBranchResult> {\n let commitSha: string | null = null;\n let config: BranchConfig = { ...branchConfig };\n logger.trace({ config }, 'processBranch()');\n let branchExists = await scm.branchExists(config.branchName);\n let updatesVerified = false;\n if (!branchExists && config.branchPrefix !== config.branchPrefixOld) {\n const branchName = config.branchName.replace(\n config.branchPrefix!,\n config.branchPrefixOld!,\n );\n branchExists = await scm.branchExists(branchName);\n if (branchExists) {\n config.branchName = branchName;\n logger.debug('Found existing branch with branchPrefixOld');\n }\n }\n\n let branchPr = await platform.getBranchPr(\n config.branchName,\n config.baseBranch,\n );\n logger.debug(`branchExists=${branchExists}`);\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n logger.debug(`dependencyDashboardCheck=${dependencyDashboardCheck!}`);\n if (branchPr) {\n config.rebaseRequested = await rebaseCheck(config, branchPr);\n logger.debug(`PR rebase requested=${config.rebaseRequested}`);\n }\n const keepUpdatedLabel = config.keepUpdatedLabel;\n const artifactErrorTopic = emojify(':warning: Artifact update problem');\n const artifactNoticeTopic = emojify(\n ':information_source: Artifact update notice',\n );\n try {\n // Check if branch already existed\n const existingPr =\n !branchPr || config.automerge\n ? await prAlreadyExisted(config)\n : undefined;\n if (existingPr?.state === 'merged') {\n logger.debug(`Matching PR #${existingPr.number} was merged previously`);\n if (config.automerge) {\n logger.debug('Disabling automerge because PR was merged previously');\n config.automerge = false;\n config.automergedPreviously = true;\n }\n } else if (!branchPr && existingPr && !dependencyDashboardCheck) {\n logger.debug(\n { prTitle: config.prTitle },\n 'Closed PR already exists. Skipping branch.',\n );\n await handleClosedPr(config, existingPr);\n return {\n branchExists: false,\n prNo: existingPr.number,\n result: 'already-existed',\n };\n }\n if (\n !branchExists &&\n branchConfig.pendingChecks &&\n !dependencyDashboardCheck\n ) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because internalChecksFilter was not met`,\n );\n return {\n branchExists: false,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n if (!branchExists) {\n if (config.mode === 'silent' && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because mode=silent`,\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'needs-approval',\n };\n }\n if (config.dependencyDashboardApproval && !dependencyDashboardCheck) {\n logger.debug(\n `Branch ${config.branchName} creation is disabled because dependencyDashboardApproval=true`,\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'needs-approval',\n };\n }\n }\n\n logger.debug(\n `Open PR Count: ${getCount('ConcurrentPRs')}, Existing Branch Count: ${getCount('Branches')}, Hourly PR Count: ${getCount('HourlyPRs')}`,\n );\n\n if (\n !branchExists &&\n isLimitReached('Branches', branchConfig) &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached branch limit - skipping branch creation');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'branch-limit-reached',\n };\n }\n if (\n isLimitReached('Commits') &&\n !dependencyDashboardCheck &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Reached commits limit - skipping branch');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'commit-limit-reached',\n };\n }\n if (branchExists) {\n // check if branch is labelled to stop\n config.stopUpdating = branchPr?.labels?.includes(\n config.stopUpdatingLabel!,\n );\n\n const prRebaseChecked = !!branchPr?.bodyStruct?.rebaseRequested;\n\n if (branchExists && !dependencyDashboardCheck && config.stopUpdating) {\n if (!prRebaseChecked) {\n logger.info(\n 'Branch updating is skipped because stopUpdatingLabel is present in config',\n );\n return {\n branchExists: true,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n }\n\n logger.debug('Checking if PR has been edited');\n const branchIsModified = await scm.isBranchModified(\n config.branchName,\n config.baseBranch,\n );\n if (branchPr) {\n logger.debug('Found existing branch PR');\n if (branchPr.state !== 'open') {\n logger.debug(\n 'PR has been closed or merged since this run started - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n if (branchIsModified || userChangedTargetBranch(branchPr)) {\n logger.debug(`PR has been edited, PrNo:${branchPr.number}`);\n await handleModifiedPr(config, branchPr);\n if (!(!!dependencyDashboardCheck || config.rebaseRequested)) {\n return {\n branchExists,\n prNo: branchPr.number,\n result: 'pr-edited',\n };\n }\n }\n } else if (branchIsModified) {\n const oldPr = await platform.findPr({\n branchName: config.branchName,\n state: '!open',\n targetBranch: config.baseBranch,\n });\n if (!oldPr) {\n logger.debug('Branch has been edited but found no PR - skipping');\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n const branchSha = await scm.getBranchCommit(config.branchName);\n const oldPrSha = oldPr?.sha;\n if (!oldPrSha || oldPrSha === branchSha) {\n logger.debug(\n { oldPrNumber: oldPr.number, oldPrSha, branchSha },\n 'Found old PR matching this branch - will override it',\n );\n } else {\n logger.debug(\n { oldPrNumber: oldPr.number, oldPrSha, branchSha },\n 'Found old PR but the SHA is different',\n );\n return {\n branchExists,\n result: 'pr-edited',\n };\n }\n }\n }\n\n // Check schedule\n config.isScheduledNow = isScheduledNow(config, 'schedule');\n if (!config.isScheduledNow && !dependencyDashboardCheck) {\n if (!branchExists) {\n logger.debug('Skipping branch creation as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'not-scheduled',\n };\n }\n if (config.updateNotScheduled === false && !config.rebaseRequested) {\n logger.debug('Skipping branch update as not within schedule');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'update-not-scheduled',\n };\n }\n if (\n !branchPr &&\n !(config.automerge && config.automergeType === 'branch') // if branch is configured for automerge there's no need for a PR\n ) {\n logger.debug('Skipping PR creation out of schedule');\n return {\n branchExists,\n result: 'not-scheduled',\n };\n }\n logger.debug(\n 'Branch + PR exists but is not scheduled -- will update if necessary',\n );\n }\n //stability checks\n if (\n config.upgrades.some(\n (upgrade) =>\n (is.nonEmptyString(upgrade.minimumReleaseAge) &&\n is.nonEmptyString(upgrade.releaseTimestamp)) ||\n isActiveConfidenceLevel(upgrade.minimumConfidence!),\n )\n ) {\n // Only set a stability status check if one or more of the updates contain\n // both a minimumReleaseAge setting and a releaseTimestamp\n config.stabilityStatus = 'green';\n // Default to 'success' but set 'pending' if any update is pending\n for (const upgrade of config.upgrades) {\n if (\n is.nonEmptyString(upgrade.minimumReleaseAge) &&\n upgrade.releaseTimestamp\n ) {\n const timeElapsed = getElapsedMs(upgrade.releaseTimestamp);\n if (timeElapsed < coerceNumber(toMs(upgrade.minimumReleaseAge))) {\n logger.debug(\n {\n depName: upgrade.depName,\n timeElapsed,\n minimumReleaseAge: upgrade.minimumReleaseAge,\n },\n 'Update has not passed minimum release age',\n );\n config.stabilityStatus = 'yellow';\n continue;\n }\n }\n const datasource = upgrade.datasource!;\n const depName = upgrade.depName!;\n const minimumConfidence = upgrade.minimumConfidence!;\n const updateType = upgrade.updateType!;\n const currentVersion = upgrade.currentVersion!;\n const newVersion = upgrade.newVersion!;\n if (isActiveConfidenceLevel(minimumConfidence)) {\n const confidence =\n (await getMergeConfidenceLevel(\n datasource,\n depName,\n currentVersion,\n newVersion,\n updateType,\n )) ?? 'neutral';\n if (satisfiesConfidenceLevel(confidence, minimumConfidence)) {\n config.confidenceStatus = 'green';\n } else {\n logger.debug(\n { depName, confidence, minimumConfidence },\n 'Update does not meet minimum confidence scores',\n );\n config.confidenceStatus = 'yellow';\n continue;\n }\n }\n }\n // Don't create a branch if we know it will be status 'pending'\n if (\n !dependencyDashboardCheck &&\n !branchExists &&\n config.stabilityStatus === 'yellow' &&\n ['not-pending', 'status-success'].includes(config.prCreation!)\n ) {\n logger.debug(\n 'Skipping branch creation due to internal status checks not met',\n );\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'pending',\n };\n }\n }\n\n let userRebaseRequested =\n dependencyDashboardCheck === 'rebase' ||\n !!config.dependencyDashboardRebaseAllOpen ||\n !!config.rebaseRequested;\n const userApproveAllPendingPR = !!config.dependencyDashboardAllPending;\n const userOpenAllRateLimtedPR = !!config.dependencyDashboardAllRateLimited;\n if (userRebaseRequested) {\n logger.debug('User has requested rebase');\n config.reuseExistingBranch = false;\n } else if (dependencyDashboardCheck === 'global-config') {\n logger.debug(`Manual create/rebase requested via checkedBranches`);\n config.reuseExistingBranch = false;\n userRebaseRequested = true;\n } else if (userApproveAllPendingPR) {\n logger.debug(\n 'A user manually approved all pending PRs via the Dependency Dashboard.',\n );\n } else if (userOpenAllRateLimtedPR) {\n logger.debug(\n 'A user manually approved all rate-limited PRs via the Dependency Dashboard.',\n );\n } else if (\n branchExists &&\n config.rebaseWhen === 'never' &&\n !(keepUpdatedLabel && branchPr?.labels?.includes(keepUpdatedLabel)) &&\n !dependencyDashboardCheck\n ) {\n logger.debug('rebaseWhen=never so skipping branch update check');\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n // if the base branch has been changed by user in renovate config, rebase onto the new baseBranch\n // we have already confirmed earlier that branch isn't modified, so its safe to use targetBranch here\n else if (\n branchPr?.targetBranch &&\n branchPr.targetBranch !== config.baseBranch\n ) {\n logger.debug(\n 'Base branch changed by user, rebasing the branch onto new base',\n );\n config.reuseExistingBranch = false;\n } else {\n config = await shouldReuseExistingBranch(config);\n }\n // TODO: types (#22198)\n logger.debug(`Using reuseExistingBranch: ${config.reuseExistingBranch!}`);\n if (!(config.reuseExistingBranch && config.skipBranchUpdate)) {\n await scm.checkoutBranch(config.baseBranch);\n const res = await getUpdatedPackageFiles(config);\n // istanbul ignore if\n if (res.artifactErrors && config.artifactErrors) {\n res.artifactErrors = config.artifactErrors.concat(res.artifactErrors);\n }\n config = { ...config, ...res };\n if (config.updatedPackageFiles?.length) {\n logger.debug(\n `Updated ${config.updatedPackageFiles.length} package files`,\n );\n } else {\n logger.debug('No package files need updating');\n }\n const additionalFiles = await getAdditionalFiles(\n config,\n branchConfig.packageFiles!,\n );\n config.artifactErrors = (config.artifactErrors ?? []).concat(\n additionalFiles.artifactErrors,\n );\n config.updatedArtifacts = (config.updatedArtifacts ?? []).concat(\n additionalFiles.updatedArtifacts,\n );\n if (config.updatedArtifacts?.length) {\n logger.debug(\n {\n updatedArtifacts: config.updatedArtifacts.map((f) =>\n f.type === 'deletion' ? `${f.path} (delete)` : f.path,\n ),\n },\n `Updated ${config.updatedArtifacts.length} lock files`,\n );\n } else {\n logger.debug('No updated lock files in branch');\n }\n if (config.fetchChangeLogs === 'branch') {\n await embedChangelogs(config.upgrades);\n }\n\n const postUpgradeCommandResults =\n await executePostUpgradeCommands(config);\n\n if (postUpgradeCommandResults !== null) {\n const { updatedArtifacts, artifactErrors } = postUpgradeCommandResults;\n config.updatedArtifacts = updatedArtifacts;\n config.artifactErrors = artifactErrors;\n }\n\n // modifies the file changes in place to allow having a version bump in a packageFile or artifact\n await bumpVersions(config);\n\n removeMeta(['dep']);\n\n if (config.artifactErrors?.length) {\n if (config.releaseTimestamp) {\n logger.debug(`Branch timestamp: ` + config.releaseTimestamp);\n const releaseTimestamp = DateTime.fromISO(config.releaseTimestamp);\n if (releaseTimestamp.plus({ hours: 2 }) < DateTime.local()) {\n logger.debug(\n 'PR is older than 2 hours, raise PR with lock file errors',\n );\n } else if (branchExists) {\n logger.debug(\n 'PR is less than 2 hours old but branchExists so updating anyway',\n );\n } else {\n logger.debug(\n 'PR is less than 2 hours old - raise error instead of PR',\n );\n throw new Error(MANAGER_LOCKFILE_ERROR);\n }\n } else {\n logger.debug('PR has no releaseTimestamp');\n }\n } else if (config.updatedArtifacts?.length && branchPr) {\n // If there are artifacts, no errors, and an existing PR then ensure any artifacts error comment is removed\n // istanbul ignore if\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure comment removal in PR #${branchPr.number}`,\n );\n } else {\n // Remove artifacts error comment only if this run has successfully updated artifacts\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactErrorTopic,\n });\n\n if (!config.artifactNotices?.length) {\n await ensureCommentRemoval({\n type: 'by-topic',\n number: branchPr.number,\n topic: artifactNoticeTopic,\n });\n }\n }\n }\n const forcedManually = userRebaseRequested || !branchExists;\n\n config.isConflicted ??=\n branchExists &&\n (await scm.isBranchConflicted(config.baseBranch, config.branchName));\n config.forceCommit = forcedManually || config.isConflicted;\n\n // compile commit message with body, which maybe needs changelogs\n if (config.commitBody) {\n // changelog is on first upgrade\n config.commitMessage = `${config.commitMessage!}\\n\\n${template.compile(\n config.commitBody,\n {\n ...config,\n logJSON: config.upgrades[0].logJSON,\n releases: config.upgrades[0].releases,\n },\n )}`;\n\n logger.trace(`commitMessage: ` + JSON.stringify(config.commitMessage));\n }\n\n commitSha = await commitFilesToBranch(config);\n // Checkout to base branch to ensure that the next branch processing always starts with git being on the baseBranch\n // baseBranch is not checked out at the start of processBranch() due to pull/16246\n await scm.checkoutBranch(config.baseBranch);\n updatesVerified = true;\n }\n\n if (branchPr) {\n const platformPrOptions = getPlatformPrOptions(config);\n if (\n platformPrOptions.usePlatformAutomerge &&\n platform.reattemptPlatformAutomerge\n ) {\n await platform.reattemptPlatformAutomerge({\n number: branchPr.number,\n platformPrOptions,\n });\n }\n // istanbul ignore if\n if (platform.refreshPr) {\n await platform.refreshPr(branchPr.number);\n }\n }\n if (!commitSha && !branchExists) {\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'no-work',\n };\n }\n if (commitSha) {\n const action = branchExists ? 'updated' : 'created';\n logger.info({ commitSha }, `Branch ${action}`);\n }\n // Set branch statuses\n await setArtifactErrorStatus(config);\n await setStability(config);\n await setConfidence(config);\n\n // new commit means status check are pretty sure pending but maybe not reported yet\n // if PR has not been created + new commit + prCreation !== immediate skip\n // but do not break when there are artifact errors\n if (\n !branchPr &&\n !config.artifactErrors?.length &&\n !userRebaseRequested &&\n commitSha &&\n config.prCreation !== 'immediate'\n ) {\n logger.debug(`Branch status pending, current sha: ${commitSha}`);\n return {\n branchExists: true,\n updatesVerified,\n result: 'pending',\n commitSha,\n };\n }\n\n // Try to automerge branch and finish if successful, but only if branch already existed before this run\n // skip if we have a non-immediate pr and there is an existing PR,\n // we want to update the PR and skip the Auto merge since status checks aren't done yet\n if (!config.artifactErrors?.length && (!commitSha || config.ignoreTests)) {\n const mergeStatus = await tryBranchAutomerge(config);\n logger.debug(`mergeStatus=${mergeStatus}`);\n if (mergeStatus === 'automerged') {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would delete branch' + config.branchName);\n } else {\n await deleteBranchSilently(config.branchName);\n }\n logger.debug('Branch is automerged - returning');\n return { branchExists: false, result: 'automerged' };\n }\n if (mergeStatus === 'off schedule') {\n logger.debug(\n 'Branch cannot automerge now because automergeSchedule is off schedule - skipping',\n );\n return {\n branchExists,\n result: 'not-scheduled',\n commitSha,\n };\n }\n if (\n mergeStatus === 'stale' &&\n ['conflicted', 'never'].includes(config.rebaseWhen!) &&\n !(keepUpdatedLabel && branchPr?.labels?.includes(keepUpdatedLabel))\n ) {\n logger.warn(\n 'Branch cannot automerge because it is behind base branch and rebaseWhen setting disallows rebasing - raising a PR instead',\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n if (\n mergeStatus === 'automerge aborted - PR exists' ||\n mergeStatus === 'branch status error' ||\n mergeStatus === 'failed'\n ) {\n logger.debug(\n `Branch automerge not possible, mergeStatus:${mergeStatus}`,\n );\n config.forcePr = true;\n config.branchAutomergeFailureMessage = mergeStatus;\n }\n }\n } catch (err) /* istanbul ignore next */ {\n if (err.statusCode === 404) {\n logger.debug({ err }, 'Received a 404 error - aborting run');\n throw new Error(REPOSITORY_CHANGED);\n }\n if (err.message === PLATFORM_RATE_LIMIT_EXCEEDED) {\n logger.debug('Passing rate-limit-exceeded error up');\n throw err;\n }\n if (err.message === REPOSITORY_CHANGED) {\n logger.debug('Passing repository-changed error up');\n throw err;\n }\n if (err.message?.startsWith('remote: Invalid username or password')) {\n logger.debug('Throwing bad credentials');\n throw new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (\n err.message?.startsWith(\n 'ssh_exchange_identification: Connection closed by remote host',\n )\n ) {\n logger.debug('Throwing bad credentials');\n throw new Error(PLATFORM_BAD_CREDENTIALS);\n }\n if (err.message === PLATFORM_BAD_CREDENTIALS) {\n logger.debug('Passing bad-credentials error up');\n throw err;\n }\n if (err.message === PLATFORM_INTEGRATION_UNAUTHORIZED) {\n logger.debug('Passing integration-unauthorized error up');\n throw err;\n }\n if (err.message === MANAGER_LOCKFILE_ERROR) {\n logger.debug('Passing lockfile-error up');\n throw err;\n }\n if (err.message?.includes('space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === SYSTEM_INSUFFICIENT_DISK_SPACE) {\n logger.debug('Passing disk-space error up');\n throw err;\n }\n if (err.message.startsWith('Resource not accessible by integration')) {\n logger.debug('Passing 403 error up');\n throw err;\n }\n if (err.message === WORKER_FILE_UPDATE_FAILED) {\n logger.warn('Error updating branch: update failure');\n } else if (err.message.startsWith('bundler-')) {\n // we have already warned inside the bundler artifacts error handling, so just return\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'error',\n commitSha,\n };\n } else if (\n err.messagee &&\n err.message.includes('fatal: Authentication failed')\n ) {\n throw new Error(PLATFORM_AUTHENTICATION_ERROR);\n } else if (err.message?.includes('fatal: bad revision')) {\n logger.debug({ err }, 'Aborting job due to bad revision error');\n throw new Error(REPOSITORY_CHANGED);\n } else if (err.message === CONFIG_VALIDATION) {\n logger.debug('Passing config validation error up');\n throw err;\n } else if (err.message === TEMPORARY_ERROR) {\n logger.debug('Passing TEMPORARY_ERROR error up');\n throw err;\n } else if (!(err instanceof ExternalHostError)) {\n logger.warn({ err }, `Error updating branch`);\n }\n // Don't throw here - we don't want to stop the other renovations\n return {\n branchExists,\n prNo: branchPr?.number,\n result: 'error',\n commitSha,\n };\n }\n try {\n logger.debug('Ensuring PR');\n logger.debug(\n `There are ${config.errors!.length} errors and ${\n config.warnings!.length\n } warnings`,\n );\n const ensurePrResult = await ensurePr(config);\n if (ensurePrResult.type === 'without-pr') {\n const { prBlockedBy } = ensurePrResult;\n branchPr = null;\n if (prBlockedBy === 'RateLimited' && !config.isVulnerabilityAlert) {\n logger.debug('Reached PR limit - skipping PR creation');\n return {\n branchExists,\n prBlockedBy,\n result: 'pr-limit-reached',\n commitSha,\n };\n }\n // TODO: ensurePr should check for automerge itself (#9719)\n if (prBlockedBy === 'NeedsApproval') {\n return {\n branchExists,\n prBlockedBy,\n result: 'needs-pr-approval',\n commitSha,\n };\n }\n if (prBlockedBy === 'AwaitingTests') {\n return {\n branchExists,\n prBlockedBy,\n result: 'pending',\n commitSha,\n };\n }\n if (prBlockedBy === 'BranchAutomerge') {\n return {\n branchExists,\n prBlockedBy,\n result: 'done',\n commitSha,\n };\n }\n if (prBlockedBy === 'Error') {\n return {\n branchExists,\n prBlockedBy,\n result: 'error',\n commitSha,\n };\n }\n logger.warn({ prBlockedBy }, 'Unknown PrBlockedBy result');\n return {\n branchExists,\n prBlockedBy,\n result: 'error',\n commitSha,\n };\n }\n if (ensurePrResult.type === 'with-pr') {\n const { pr } = ensurePrResult;\n branchPr = pr;\n if (config.artifactErrors?.length) {\n logger.warn(\n { artifactErrors: config.artifactErrors },\n 'artifactErrors',\n );\n let content = `Renovate failed to update `;\n content +=\n config.artifactErrors.length > 1 ? 'artifacts' : 'an artifact';\n content +=\n ' related to this branch. You probably do not want to merge this PR as-is.';\n content += emojify(\n `\\n\\n:recycle: Renovate will retry this branch, including artifacts, only when one of the following happens:\\n\\n`,\n );\n content +=\n ' - any of the package files in this branch needs updating, or \\n';\n content += ' - the branch becomes conflicted, or\\n';\n content +=\n ' - you click the rebase/retry checkbox if found above, or\\n';\n content +=\n ' - you rename this PR\\'s title to start with \"rebase!\" to trigger it manually';\n content += '\\n\\nThe artifact failure details are included below:\\n\\n';\n // TODO: types (#22198)\n config.artifactErrors.forEach((error) => {\n content += `##### File name: ${error.lockFile!}\\n\\n`;\n content += `\\`\\`\\`\\n${error.stderr!}\\n\\`\\`\\`\\n\\n`;\n });\n content = platform.massageMarkdown(content, config.rebaseLabel);\n if (\n !(\n config.suppressNotifications!.includes('artifactErrors') ||\n config.suppressNotifications!.includes('lockFileErrors')\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n `DRY-RUN: Would ensure lock file error comment in PR #${pr.number}`,\n );\n } else {\n await ensureComment({\n number: pr.number,\n topic: artifactErrorTopic,\n content,\n });\n }\n }\n } else {\n if (config.artifactNotices?.length) {\n const contentLines: string[] = [];\n for (const notice of config.artifactNotices) {\n contentLines.push(`##### File name: ${notice.file}`);\n contentLines.push(notice.message);\n }\n const content = contentLines.join('\\n\\n');\n await ensureComment({\n number: pr.number,\n topic: artifactNoticeTopic,\n content,\n });\n }\n\n if (config.automerge) {\n logger.debug('PR is configured for automerge');\n // skip automerge if there is a new commit since status checks aren't done yet\n if (config.ignoreTests === true || !commitSha) {\n logger.debug('checking auto-merge');\n const prAutomergeResult = await checkAutoMerge(pr, config);\n if (prAutomergeResult?.automerged) {\n return {\n branchExists,\n result: 'automerged',\n commitSha,\n };\n }\n }\n } else {\n logger.debug('PR is not configured for automerge');\n }\n }\n }\n } catch (err) /* istanbul ignore next */ {\n if (\n err instanceof ExternalHostError ||\n [PLATFORM_RATE_LIMIT_EXCEEDED, REPOSITORY_CHANGED].includes(err.message)\n ) {\n logger.debug('Passing PR error up');\n throw err;\n }\n // Otherwise don't throw here - we don't want to stop the other renovations\n logger.error({ err }, `Error ensuring PR`);\n }\n if (!branchExists) {\n return {\n branchExists: true,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'pr-created',\n commitSha,\n };\n }\n return {\n branchExists,\n updatesVerified,\n prNo: branchPr?.number,\n result: 'done',\n commitSha,\n };\n}\n"]}
|
@@ -95,7 +95,7 @@ function getPrBody(branchConfig, prBodyConfig, config) {
|
|
95
95
|
prBody = prBody.replace((0, regex_1.regEx)(/\n\n\n+/g), '\n\n');
|
96
96
|
const prDebugData64 = (0, string_1.toBase64)(JSON.stringify(prBodyConfig.debugData));
|
97
97
|
prBody += `\n<!--renovate-debug:${prDebugData64}-->\n`;
|
98
|
-
prBody = platform_1.platform.massageMarkdown(prBody);
|
98
|
+
prBody = platform_1.platform.massageMarkdown(prBody, config.rebaseLabel);
|
99
99
|
if (prBodyConfig?.rebasingNotice) {
|
100
100
|
prBody = prBody.replace(rebasingRegex, `**Rebasing**: ${prBodyConfig.rebasingNotice}`);
|
101
101
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../lib/workers/repository/update/pr/body/index.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../lib/workers/repository/update/pr/body/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { RenovateConfig } from '../../../../../config/types';\nimport type { PrDebugData } from '../../../../../modules/platform';\nimport { platform } from '../../../../../modules/platform';\nimport { detectPlatform } from '../../../../../util/common';\nimport { regEx } from '../../../../../util/regex';\nimport { toBase64 } from '../../../../../util/string';\nimport * as template from '../../../../../util/template';\nimport { joinUrlParts } from '../../../../../util/url';\nimport type { BranchConfig } from '../../../../types';\nimport { getDepWarningsPR, getWarnings } from '../../../errors-warnings';\nimport { getChangelogs } from './changelogs';\nimport { getPrConfigDescription } from './config-description';\nimport { getControls } from './controls';\nimport { getPrFooter } from './footer';\nimport { getPrHeader } from './header';\nimport { getPrExtraNotes, getPrNotes } from './notes';\nimport { getPrUpdatesTable } from './updates-table';\n\nfunction massageUpdateMetadata(config: BranchConfig): void {\n config.upgrades.forEach((upgrade) => {\n const {\n homepage,\n sourceUrl,\n sourceDirectory,\n changelogUrl,\n dependencyUrl,\n } = upgrade;\n // TODO: types (#22198)\n let depNameLinked = upgrade.depName!;\n const primaryLink = homepage ?? sourceUrl ?? dependencyUrl;\n if (primaryLink) {\n depNameLinked = `[${depNameLinked}](${primaryLink})`;\n }\n\n let sourceRootPath = 'tree/HEAD';\n if (sourceUrl) {\n const sourcePlatform = detectPlatform(sourceUrl);\n if (sourcePlatform === 'bitbucket') {\n sourceRootPath = 'src/HEAD';\n } else if (sourcePlatform === 'bitbucket-server') {\n sourceRootPath = 'browse';\n }\n }\n\n const otherLinks = [];\n if (sourceUrl && (!!sourceDirectory || homepage)) {\n otherLinks.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n const templatedChangelogUrl = changelogUrl\n ? template.compile(changelogUrl, upgrade, true)\n : undefined;\n if (templatedChangelogUrl) {\n otherLinks.push(`[changelog](${templatedChangelogUrl})`);\n }\n if (otherLinks.length) {\n depNameLinked += ` (${otherLinks.join(', ')})`;\n }\n upgrade.depNameLinked = depNameLinked;\n const references: string[] = [];\n if (homepage) {\n references.push(`[homepage](${homepage})`);\n }\n if (sourceUrl) {\n references.push(\n `[source](${getFullSourceUrl(sourceUrl, sourceRootPath, sourceDirectory)})`,\n );\n }\n if (templatedChangelogUrl) {\n references.push(`[changelog](${templatedChangelogUrl})`);\n }\n upgrade.references = references.join(', ');\n });\n}\n\nfunction getFullSourceUrl(\n sourceUrl: string,\n sourceRootPath: string,\n sourceDirectory?: string,\n): string {\n let fullUrl = sourceUrl;\n if (sourceDirectory) {\n fullUrl = joinUrlParts(sourceUrl, sourceRootPath, sourceDirectory);\n }\n\n return fullUrl;\n}\n\ninterface PrBodyConfig {\n appendExtra?: string | null | undefined;\n rebasingNotice?: string;\n debugData: PrDebugData;\n}\n\nconst rebasingRegex = regEx(/\\*\\*Rebasing\\*\\*: .*/);\n\nexport function getPrBody(\n branchConfig: BranchConfig,\n prBodyConfig: PrBodyConfig,\n config: RenovateConfig,\n): string {\n massageUpdateMetadata(branchConfig);\n let warnings = '';\n warnings += getWarnings(branchConfig);\n if (branchConfig.packageFiles) {\n warnings += getDepWarningsPR(\n branchConfig.packageFiles,\n config,\n branchConfig.dependencyDashboard,\n );\n }\n const content = {\n header: getPrHeader(branchConfig),\n table: getPrUpdatesTable(branchConfig),\n warnings,\n notes: getPrNotes(branchConfig) + getPrExtraNotes(branchConfig),\n changelogs: getChangelogs(branchConfig),\n configDescription: getPrConfigDescription(branchConfig),\n controls: getControls(),\n footer: getPrFooter(branchConfig),\n };\n\n let prBody = '';\n if (branchConfig.prBodyTemplate) {\n const prBodyTemplate = branchConfig.prBodyTemplate;\n prBody = template.compile(prBodyTemplate, content, false);\n prBody = prBody.trim();\n prBody = prBody.replace(regEx(/\\n\\n\\n+/g), '\\n\\n');\n const prDebugData64 = toBase64(JSON.stringify(prBodyConfig.debugData));\n prBody += `\\n<!--renovate-debug:${prDebugData64}-->\\n`;\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (prBodyConfig?.rebasingNotice) {\n prBody = prBody.replace(\n rebasingRegex,\n `**Rebasing**: ${prBodyConfig.rebasingNotice}`,\n );\n }\n }\n return prBody;\n}\n"]}
|
@@ -389,7 +389,7 @@ async function ensurePr(prConfig) {
|
|
389
389
|
if (config.branchAutomergeFailureMessage === 'branch status error') {
|
390
390
|
content += '\n___\n * Branch has one or more failed status checks';
|
391
391
|
}
|
392
|
-
content = platform_1.platform.massageMarkdown(content);
|
392
|
+
content = platform_1.platform.massageMarkdown(content, config.rebaseLabel);
|
393
393
|
logger_1.logger.debug('Adding branch automerge failure message to PR');
|
394
394
|
if (global_1.GlobalConfig.get('dryRun')) {
|
395
395
|
logger_1.logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/pr/index.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 {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages';\nimport { pkg } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport type {\n PlatformPrOptions,\n Pr,\n PrDebugData,\n UpdatePrConfig,\n} from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport {\n getPrBodyStruct,\n hashBody,\n} from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedHours } from '../../../../util/date';\nimport { stripEmojis } from '../../../../util/emoji';\nimport { fingerprint } from '../../../../util/fingerprint';\nimport { getBranchLastCommitTime } from '../../../../util/git';\nimport { memoize } from '../../../../util/memoize';\nimport { incCountValue, isLimitReached } from '../../../global/limits';\nimport type {\n BranchConfig,\n BranchUpgradeConfig,\n PrBlockedBy,\n} from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { resolveBranchStatus } from '../branch/status-checks';\nimport { getPrBody } from './body';\nimport { getChangedLabels, prepareLabels, shouldUpdateLabels } from './labels';\nimport { addParticipants } from './participants';\nimport { getPrCache, setPrCache } from './pr-cache';\nimport {\n generatePrBodyFingerprintConfig,\n validatePrCache,\n} from './pr-fingerprint';\nimport { tryReuseAutoclosedPr } from './pr-reuse';\n\nexport function getPlatformPrOptions(\n config: RenovateConfig & PlatformPrOptions,\n): PlatformPrOptions {\n const usePlatformAutomerge = Boolean(\n config.automerge &&\n (config.automergeType === 'pr' || config.automergeType === 'branch') &&\n config.platformAutomerge,\n );\n\n return {\n autoApprove: !!config.autoApprove,\n automergeStrategy: config.automergeStrategy,\n azureWorkItemId: config.azureWorkItemId ?? 0,\n bbAutoResolvePrTasks: !!config.bbAutoResolvePrTasks,\n bbUseDefaultReviewers: !!config.bbUseDefaultReviewers,\n gitLabIgnoreApprovals: !!config.gitLabIgnoreApprovals,\n forkModeDisallowMaintainerEdits: !!config.forkModeDisallowMaintainerEdits,\n usePlatformAutomerge,\n };\n}\n\nexport interface ResultWithPr {\n type: 'with-pr';\n pr: Pr;\n}\n\nexport interface ResultWithoutPr {\n type: 'without-pr';\n prBlockedBy: PrBlockedBy;\n}\n\nexport type EnsurePrResult = ResultWithPr | ResultWithoutPr;\n\nexport function updatePrDebugData(\n targetBranch: string,\n labels: string[],\n debugData: PrDebugData | undefined,\n): PrDebugData {\n const createdByRenovateVersion = debugData?.createdInVer ?? pkg.version;\n const updatedByRenovateVersion = pkg.version;\n\n const updatedPrDebugData: PrDebugData = {\n createdInVer: createdByRenovateVersion,\n updatedInVer: updatedByRenovateVersion,\n targetBranch,\n };\n\n // Add labels to the debug data object.\n // When to add:\n // 1. Add it when a new PR is created, i.e., when debugData is undefined.\n // 2. Add it if an existing PR already has labels in the debug data, confirming that we can update its labels.\n if (!debugData || is.array(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n is.nonEmptyArray(config.ignoreReviewers) &&\n is.nonEmptyArray(pr.reviewers)\n ) {\n const ignoreReviewers = new Set(config.ignoreReviewers);\n return (\n pr.reviewers.filter((reviewer) => !ignoreReviewers.has(reviewer)).length >\n 0\n );\n }\n return is.nonEmptyArray(pr.reviewers);\n}\n\n// Ensures that PR exists with matching title/body\nexport async function ensurePr(\n prConfig: BranchConfig,\n): Promise<EnsurePrResult> {\n const config: BranchConfig = { ...prConfig };\n const filteredPrConfig = generatePrBodyFingerprintConfig(config);\n const prBodyFingerprint = fingerprint(filteredPrConfig);\n logger.trace({ config }, 'ensurePr');\n // If there is a group, it will use the config of the first upgrade in the array\n const {\n branchName,\n ignoreTests,\n internalChecksAsSuccess,\n prTitle = '',\n upgrades,\n } = config;\n const getBranchStatus = memoize(() =>\n resolveBranchStatus(branchName, !!internalChecksAsSuccess, ignoreTests),\n );\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Check if PR already exists\n const existingPr =\n (await platform.getBranchPr(branchName, config.baseBranch)) ??\n (await tryReuseAutoclosedPr(branchName));\n const prCache = getPrCache(branchName);\n if (existingPr) {\n logger.debug('Found existing PR');\n if (existingPr.bodyStruct?.rebaseRequested) {\n logger.debug('PR rebase requested, so skipping cache check');\n } else if (prCache) {\n logger.trace({ prCache }, 'Found existing PR cache');\n // return if pr cache is valid and pr was not changed in the past 24hrs\n if (validatePrCache(prCache, prBodyFingerprint)) {\n return { type: 'with-pr', pr: existingPr };\n }\n } else if (config.repositoryCache === 'enabled') {\n logger.debug('PR cache not found');\n }\n }\n config.upgrades = [];\n\n if (config.artifactErrors?.length) {\n logger.debug('Forcing PR because of artifact errors');\n config.forcePr = true;\n }\n\n if (dependencyDashboardCheck === 'approvePr') {\n logger.debug('Forcing PR because of dependency dashboard approval');\n config.forcePr = true;\n }\n\n if (!existingPr) {\n // Only create a PR if a branch automerge has failed\n if (\n config.automerge === true &&\n config.automergeType?.startsWith('branch') &&\n !config.forcePr\n ) {\n logger.debug(`Branch automerge is enabled`);\n if (\n config.stabilityStatus !== 'yellow' &&\n (await getBranchStatus()) === 'yellow' &&\n is.number(config.prNotPendingHours)\n ) {\n logger.debug('Checking how long this branch has been pending');\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n if (getElapsedHours(lastCommitTime) >= config.prNotPendingHours) {\n logger.debug(\n 'Branch exceeds prNotPending hours - forcing PR creation',\n );\n config.forcePr = true;\n }\n }\n if (config.forcePr || (await getBranchStatus()) === 'red') {\n logger.debug(`Branch tests failed, so will create PR`);\n } else {\n // Branch should be automerged, so we don't want to create a PR\n return { type: 'without-pr', prBlockedBy: 'BranchAutomerge' };\n }\n }\n if (config.prCreation === 'status-success') {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) !== 'green') {\n logger.debug(`Branch status isn't green - not creating PR`);\n return { type: 'without-pr', prBlockedBy: 'AwaitingTests' };\n }\n logger.debug('Branch status success');\n } else if (\n config.prCreation === 'approval' &&\n dependencyDashboardCheck !== 'approvePr'\n ) {\n return { type: 'without-pr', prBlockedBy: 'NeedsApproval' };\n } else if (config.prCreation === 'not-pending' && !config.forcePr) {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) === 'yellow') {\n logger.debug(`Branch status is yellow - checking timeout`);\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n const elapsedHours = getElapsedHours(lastCommitTime);\n if (\n !dependencyDashboardCheck &&\n ((config.stabilityStatus && config.stabilityStatus !== 'yellow') ||\n (is.number(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation`,\n );\n return {\n type: 'without-pr',\n prBlockedBy: 'AwaitingTests',\n };\n }\n const prNotPendingHours = String(config.prNotPendingHours);\n logger.debug(\n `prNotPendingHours=${prNotPendingHours} threshold hit - creating PR`,\n );\n }\n logger.debug('Branch status success');\n }\n }\n\n const processedUpgrades: string[] = [];\n const commitRepos: string[] = [];\n\n function getRepoNameWithSourceDirectory(\n upgrade: BranchUpgradeConfig,\n ): string {\n // TODO: types (#22198)\n return `${upgrade.repoName!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n }\n\n if (config.fetchChangeLogs === 'pr') {\n // fetch changelogs when not already done;\n await embedChangelogs(upgrades);\n }\n\n // Get changelog and then generate template strings\n for (const upgrade of upgrades) {\n // TODO: types (#22198)\n const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${upgrade.manager}-${upgrade.currentVersion ?? ''}-${upgrade.currentValue ?? ''}-${upgrade.newVersion ?? ''}-${upgrade.newValue ?? ''}`;\n if (processedUpgrades.includes(upgradeKey)) {\n continue;\n }\n processedUpgrades.push(upgradeKey);\n\n const logJSON = upgrade.logJSON;\n\n if (logJSON) {\n if (typeof logJSON.error === 'undefined') {\n if (logJSON.project) {\n upgrade.repoName = logJSON.project.repository;\n }\n upgrade.hasReleaseNotes = false;\n upgrade.releases = [];\n if (\n logJSON.hasReleaseNotes &&\n upgrade.repoName &&\n !commitRepos.includes(getRepoNameWithSourceDirectory(upgrade))\n ) {\n commitRepos.push(getRepoNameWithSourceDirectory(upgrade));\n upgrade.hasReleaseNotes = logJSON.hasReleaseNotes;\n if (logJSON.versions) {\n for (const version of logJSON.versions) {\n const release = { ...version };\n upgrade.releases.push(release);\n }\n }\n }\n } else if (logJSON.error === 'MissingGithubToken') {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes = [\n ...upgrade.prBodyNotes,\n [\n '> :exclamation: **Important**',\n '> ',\n '> Release Notes retrieval for this PR were skipped because no github.com credentials were available. ',\n '> If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).',\n '\\n',\n ].join('\\n'),\n ];\n }\n }\n config.upgrades.push(upgrade);\n }\n\n config.hasReleaseNotes = config.upgrades.some((upg) => upg.hasReleaseNotes);\n\n const releaseNotesSources: string[] = [];\n for (const upgrade of config.upgrades) {\n let notesSourceUrl = upgrade.releases?.[0]?.releaseNotes?.notesSourceUrl;\n // TODO: types (#22198)\n notesSourceUrl ??= `${upgrade.sourceUrl!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n\n if (upgrade.hasReleaseNotes && notesSourceUrl) {\n if (releaseNotesSources.includes(notesSourceUrl)) {\n logger.debug(\n { depName: upgrade.depName },\n 'Removing duplicate release notes',\n );\n upgrade.hasReleaseNotes = false;\n } else {\n releaseNotesSources.push(notesSourceUrl);\n }\n }\n }\n\n const prBody = getPrBody(\n config,\n {\n debugData: updatePrDebugData(\n config.baseBranch,\n prepareLabels(config), // include labels in debug data\n existingPr?.bodyStruct?.debugData,\n ),\n },\n config,\n );\n\n try {\n if (existingPr) {\n logger.debug('Processing existing PR');\n\n if (\n !existingPr.hasAssignees &&\n !hasNotIgnoredReviewers(existingPr, config) &&\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) === 'red'\n ) {\n logger.debug(`Setting assignees and reviewers as status checks failed`);\n await addParticipants(config, existingPr);\n }\n // Check if existing PR needs updating\n const existingPrTitle = stripEmojis(existingPr.title);\n const existingPrBodyHash = existingPr.bodyStruct?.hash;\n const newPrTitle = stripEmojis(prTitle);\n const newPrBodyHash = hashBody(prBody);\n\n const prInitialLabels = existingPr.bodyStruct?.debugData?.labels;\n const prCurrentLabels = existingPr.labels;\n const configuredLabels = prepareLabels(config);\n\n const labelsNeedUpdate = shouldUpdateLabels(\n prInitialLabels,\n prCurrentLabels,\n configuredLabels,\n );\n\n if (\n existingPr?.targetBranch === config.baseBranch &&\n existingPrTitle === newPrTitle &&\n existingPrBodyHash === newPrBodyHash &&\n !labelsNeedUpdate\n ) {\n // adds or-cache for existing PRs\n setPrCache(branchName, prBodyFingerprint, false);\n logger.debug(\n `Pull Request #${existingPr.number} does not need updating`,\n );\n return { type: 'with-pr', pr: existingPr };\n }\n\n const updatePrConfig: UpdatePrConfig = {\n number: existingPr.number,\n prTitle,\n prBody,\n platformPrOptions: getPlatformPrOptions(config),\n };\n // PR must need updating\n if (existingPr?.targetBranch !== config.baseBranch) {\n logger.debug(\n {\n branchName,\n oldBaseBranch: existingPr?.targetBranch,\n newBaseBranch: config.baseBranch,\n },\n 'PR base branch has changed',\n );\n updatePrConfig.targetBranch = config.baseBranch;\n }\n\n if (labelsNeedUpdate) {\n logger.debug(\n {\n branchName,\n prCurrentLabels,\n configuredLabels,\n },\n 'PR labels have changed',\n );\n\n // Divide labels into three categories:\n // i) addLabels: Labels that need to be added\n // ii) removeLabels: Labels that need to be removed\n // iii) labels: New labels for the PR, replacing the old labels array entirely.\n // This distinction is necessary because different platforms update labels differently\n // For more details, refer to the updatePr function of each platform.\n\n const [addLabels, removeLabels] = getChangedLabels(\n prCurrentLabels,\n configuredLabels,\n );\n\n // for Gitea\n updatePrConfig.labels = configuredLabels;\n\n // for GitHub, GitLab\n updatePrConfig.addLabels = addLabels;\n updatePrConfig.removeLabels = removeLabels;\n }\n if (existingPrTitle !== newPrTitle) {\n logger.debug(\n {\n branchName,\n oldPrTitle: existingPr.title,\n newPrTitle: prTitle,\n },\n 'PR title changed',\n );\n } else if (!config.committedFiles && !config.rebaseRequested) {\n logger.debug(\n {\n prTitle,\n },\n 'PR body changed',\n );\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${existingPr.number}`);\n return { type: 'with-pr', pr: existingPr };\n } else {\n await platform.updatePr(updatePrConfig);\n logger.info({ pr: existingPr.number, prTitle }, `PR updated`);\n setPrCache(branchName, prBodyFingerprint, true);\n }\n return {\n type: 'with-pr',\n pr: {\n ...existingPr,\n bodyStruct: getPrBodyStruct(prBody),\n title: prTitle,\n targetBranch: config.baseBranch,\n },\n };\n }\n logger.debug({ branch: branchName, prTitle }, `Creating PR`);\n if (config.updateType === 'rollback') {\n logger.info('Creating Rollback PR');\n }\n let pr: Pr | null;\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create PR: ' + prTitle);\n pr = { number: 0 } as never;\n } else {\n try {\n if (\n !dependencyDashboardCheck &&\n isLimitReached('ConcurrentPRs', prConfig) &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Skipping PR - limit reached');\n return { type: 'without-pr', prBlockedBy: 'RateLimited' };\n }\n pr = await platform.createPr({\n sourceBranch: branchName,\n targetBranch: config.baseBranch,\n prTitle,\n prBody,\n labels: prepareLabels(config),\n platformPrOptions: getPlatformPrOptions(config),\n draftPR: !!config.draftPR,\n milestone: config.milestone,\n });\n\n incCountValue('ConcurrentPRs');\n incCountValue('HourlyPRs');\n logger.info({ pr: pr?.number, prTitle }, 'PR created');\n } catch (err) {\n logger.debug({ err }, 'Pull request creation error');\n if (\n err.body?.message === 'Validation failed' &&\n err.body.errors?.length &&\n err.body.errors.some((error: { message?: string }) =>\n error.message?.startsWith('A pull request already exists'),\n )\n ) {\n logger.warn('A pull requests already exists');\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n if (err.statusCode === 502) {\n logger.warn(\n { branch: branchName },\n 'Deleting branch due to server error',\n );\n await scm.deleteBranch(branchName);\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n }\n if (\n pr &&\n config.branchAutomergeFailureMessage &&\n !config.suppressNotifications?.includes('branchAutomergeFailure')\n ) {\n const topic = 'Branch automerge failure';\n let content =\n 'This PR was configured for branch automerge. However, this is not possible, so it has been raised as a PR instead.';\n if (config.branchAutomergeFailureMessage === 'branch status error') {\n content += '\\n___\\n * Branch has one or more failed status checks';\n }\n content = platform.massageMarkdown(content);\n logger.debug('Adding branch automerge failure message to PR');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`);\n } else {\n await ensureComment({\n number: pr.number,\n topic,\n content,\n });\n }\n }\n // Skip assign and review if automerging PR\n if (pr) {\n if (\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) !== 'red'\n ) {\n logger.debug(\n `Skipping assignees and reviewers as automerge=${config.automerge}`,\n );\n } else {\n await addParticipants(config, pr);\n }\n setPrCache(branchName, prBodyFingerprint, true);\n logger.debug(`Created Pull Request #${pr.number}`);\n return { type: 'with-pr', pr };\n }\n } catch (err) {\n if (\n err instanceof ExternalHostError ||\n err.message === REPOSITORY_CHANGED ||\n err.message === PLATFORM_RATE_LIMIT_EXCEEDED ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('Passing error up');\n throw err;\n }\n logger.warn({ err, prTitle }, 'Failed to ensure PR');\n }\n if (existingPr) {\n return { type: 'with-pr', pr: existingPr };\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n}\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/pr/index.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 {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n REPOSITORY_CHANGED,\n} from '../../../../constants/error-messages';\nimport { pkg } from '../../../../expose.cjs';\nimport { logger } from '../../../../logger';\nimport type {\n PlatformPrOptions,\n Pr,\n PrDebugData,\n UpdatePrConfig,\n} from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport {\n getPrBodyStruct,\n hashBody,\n} from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { ExternalHostError } from '../../../../types/errors/external-host-error';\nimport { getElapsedHours } from '../../../../util/date';\nimport { stripEmojis } from '../../../../util/emoji';\nimport { fingerprint } from '../../../../util/fingerprint';\nimport { getBranchLastCommitTime } from '../../../../util/git';\nimport { memoize } from '../../../../util/memoize';\nimport { incCountValue, isLimitReached } from '../../../global/limits';\nimport type {\n BranchConfig,\n BranchUpgradeConfig,\n PrBlockedBy,\n} from '../../../types';\nimport { embedChangelogs } from '../../changelog';\nimport { resolveBranchStatus } from '../branch/status-checks';\nimport { getPrBody } from './body';\nimport { getChangedLabels, prepareLabels, shouldUpdateLabels } from './labels';\nimport { addParticipants } from './participants';\nimport { getPrCache, setPrCache } from './pr-cache';\nimport {\n generatePrBodyFingerprintConfig,\n validatePrCache,\n} from './pr-fingerprint';\nimport { tryReuseAutoclosedPr } from './pr-reuse';\n\nexport function getPlatformPrOptions(\n config: RenovateConfig & PlatformPrOptions,\n): PlatformPrOptions {\n const usePlatformAutomerge = Boolean(\n config.automerge &&\n (config.automergeType === 'pr' || config.automergeType === 'branch') &&\n config.platformAutomerge,\n );\n\n return {\n autoApprove: !!config.autoApprove,\n automergeStrategy: config.automergeStrategy,\n azureWorkItemId: config.azureWorkItemId ?? 0,\n bbAutoResolvePrTasks: !!config.bbAutoResolvePrTasks,\n bbUseDefaultReviewers: !!config.bbUseDefaultReviewers,\n gitLabIgnoreApprovals: !!config.gitLabIgnoreApprovals,\n forkModeDisallowMaintainerEdits: !!config.forkModeDisallowMaintainerEdits,\n usePlatformAutomerge,\n };\n}\n\nexport interface ResultWithPr {\n type: 'with-pr';\n pr: Pr;\n}\n\nexport interface ResultWithoutPr {\n type: 'without-pr';\n prBlockedBy: PrBlockedBy;\n}\n\nexport type EnsurePrResult = ResultWithPr | ResultWithoutPr;\n\nexport function updatePrDebugData(\n targetBranch: string,\n labels: string[],\n debugData: PrDebugData | undefined,\n): PrDebugData {\n const createdByRenovateVersion = debugData?.createdInVer ?? pkg.version;\n const updatedByRenovateVersion = pkg.version;\n\n const updatedPrDebugData: PrDebugData = {\n createdInVer: createdByRenovateVersion,\n updatedInVer: updatedByRenovateVersion,\n targetBranch,\n };\n\n // Add labels to the debug data object.\n // When to add:\n // 1. Add it when a new PR is created, i.e., when debugData is undefined.\n // 2. Add it if an existing PR already has labels in the debug data, confirming that we can update its labels.\n if (!debugData || is.array(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n is.nonEmptyArray(config.ignoreReviewers) &&\n is.nonEmptyArray(pr.reviewers)\n ) {\n const ignoreReviewers = new Set(config.ignoreReviewers);\n return (\n pr.reviewers.filter((reviewer) => !ignoreReviewers.has(reviewer)).length >\n 0\n );\n }\n return is.nonEmptyArray(pr.reviewers);\n}\n\n// Ensures that PR exists with matching title/body\nexport async function ensurePr(\n prConfig: BranchConfig,\n): Promise<EnsurePrResult> {\n const config: BranchConfig = { ...prConfig };\n const filteredPrConfig = generatePrBodyFingerprintConfig(config);\n const prBodyFingerprint = fingerprint(filteredPrConfig);\n logger.trace({ config }, 'ensurePr');\n // If there is a group, it will use the config of the first upgrade in the array\n const {\n branchName,\n ignoreTests,\n internalChecksAsSuccess,\n prTitle = '',\n upgrades,\n } = config;\n const getBranchStatus = memoize(() =>\n resolveBranchStatus(branchName, !!internalChecksAsSuccess, ignoreTests),\n );\n const dependencyDashboardCheck =\n config.dependencyDashboardChecks?.[config.branchName];\n // Check if PR already exists\n const existingPr =\n (await platform.getBranchPr(branchName, config.baseBranch)) ??\n (await tryReuseAutoclosedPr(branchName));\n const prCache = getPrCache(branchName);\n if (existingPr) {\n logger.debug('Found existing PR');\n if (existingPr.bodyStruct?.rebaseRequested) {\n logger.debug('PR rebase requested, so skipping cache check');\n } else if (prCache) {\n logger.trace({ prCache }, 'Found existing PR cache');\n // return if pr cache is valid and pr was not changed in the past 24hrs\n if (validatePrCache(prCache, prBodyFingerprint)) {\n return { type: 'with-pr', pr: existingPr };\n }\n } else if (config.repositoryCache === 'enabled') {\n logger.debug('PR cache not found');\n }\n }\n config.upgrades = [];\n\n if (config.artifactErrors?.length) {\n logger.debug('Forcing PR because of artifact errors');\n config.forcePr = true;\n }\n\n if (dependencyDashboardCheck === 'approvePr') {\n logger.debug('Forcing PR because of dependency dashboard approval');\n config.forcePr = true;\n }\n\n if (!existingPr) {\n // Only create a PR if a branch automerge has failed\n if (\n config.automerge === true &&\n config.automergeType?.startsWith('branch') &&\n !config.forcePr\n ) {\n logger.debug(`Branch automerge is enabled`);\n if (\n config.stabilityStatus !== 'yellow' &&\n (await getBranchStatus()) === 'yellow' &&\n is.number(config.prNotPendingHours)\n ) {\n logger.debug('Checking how long this branch has been pending');\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n if (getElapsedHours(lastCommitTime) >= config.prNotPendingHours) {\n logger.debug(\n 'Branch exceeds prNotPending hours - forcing PR creation',\n );\n config.forcePr = true;\n }\n }\n if (config.forcePr || (await getBranchStatus()) === 'red') {\n logger.debug(`Branch tests failed, so will create PR`);\n } else {\n // Branch should be automerged, so we don't want to create a PR\n return { type: 'without-pr', prBlockedBy: 'BranchAutomerge' };\n }\n }\n if (config.prCreation === 'status-success') {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) !== 'green') {\n logger.debug(`Branch status isn't green - not creating PR`);\n return { type: 'without-pr', prBlockedBy: 'AwaitingTests' };\n }\n logger.debug('Branch status success');\n } else if (\n config.prCreation === 'approval' &&\n dependencyDashboardCheck !== 'approvePr'\n ) {\n return { type: 'without-pr', prBlockedBy: 'NeedsApproval' };\n } else if (config.prCreation === 'not-pending' && !config.forcePr) {\n logger.debug('Checking branch combined status');\n if ((await getBranchStatus()) === 'yellow') {\n logger.debug(`Branch status is yellow - checking timeout`);\n const lastCommitTime = await getBranchLastCommitTime(branchName);\n const elapsedHours = getElapsedHours(lastCommitTime);\n if (\n !dependencyDashboardCheck &&\n ((config.stabilityStatus && config.stabilityStatus !== 'yellow') ||\n (is.number(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation`,\n );\n return {\n type: 'without-pr',\n prBlockedBy: 'AwaitingTests',\n };\n }\n const prNotPendingHours = String(config.prNotPendingHours);\n logger.debug(\n `prNotPendingHours=${prNotPendingHours} threshold hit - creating PR`,\n );\n }\n logger.debug('Branch status success');\n }\n }\n\n const processedUpgrades: string[] = [];\n const commitRepos: string[] = [];\n\n function getRepoNameWithSourceDirectory(\n upgrade: BranchUpgradeConfig,\n ): string {\n // TODO: types (#22198)\n return `${upgrade.repoName!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n }\n\n if (config.fetchChangeLogs === 'pr') {\n // fetch changelogs when not already done;\n await embedChangelogs(upgrades);\n }\n\n // Get changelog and then generate template strings\n for (const upgrade of upgrades) {\n // TODO: types (#22198)\n const upgradeKey = `${upgrade.depType!}-${upgrade.depName!}-${upgrade.manager}-${upgrade.currentVersion ?? ''}-${upgrade.currentValue ?? ''}-${upgrade.newVersion ?? ''}-${upgrade.newValue ?? ''}`;\n if (processedUpgrades.includes(upgradeKey)) {\n continue;\n }\n processedUpgrades.push(upgradeKey);\n\n const logJSON = upgrade.logJSON;\n\n if (logJSON) {\n if (typeof logJSON.error === 'undefined') {\n if (logJSON.project) {\n upgrade.repoName = logJSON.project.repository;\n }\n upgrade.hasReleaseNotes = false;\n upgrade.releases = [];\n if (\n logJSON.hasReleaseNotes &&\n upgrade.repoName &&\n !commitRepos.includes(getRepoNameWithSourceDirectory(upgrade))\n ) {\n commitRepos.push(getRepoNameWithSourceDirectory(upgrade));\n upgrade.hasReleaseNotes = logJSON.hasReleaseNotes;\n if (logJSON.versions) {\n for (const version of logJSON.versions) {\n const release = { ...version };\n upgrade.releases.push(release);\n }\n }\n }\n } else if (logJSON.error === 'MissingGithubToken') {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes = [\n ...upgrade.prBodyNotes,\n [\n '> :exclamation: **Important**',\n '> ',\n '> Release Notes retrieval for this PR were skipped because no github.com credentials were available. ',\n '> If you are self-hosted, please see [this instruction](https://github.com/renovatebot/renovate/blob/master/docs/usage/examples/self-hosting.md#githubcom-token-for-release-notes).',\n '\\n',\n ].join('\\n'),\n ];\n }\n }\n config.upgrades.push(upgrade);\n }\n\n config.hasReleaseNotes = config.upgrades.some((upg) => upg.hasReleaseNotes);\n\n const releaseNotesSources: string[] = [];\n for (const upgrade of config.upgrades) {\n let notesSourceUrl = upgrade.releases?.[0]?.releaseNotes?.notesSourceUrl;\n // TODO: types (#22198)\n notesSourceUrl ??= `${upgrade.sourceUrl!}${\n upgrade.sourceDirectory ? `:${upgrade.sourceDirectory}` : ''\n }`;\n\n if (upgrade.hasReleaseNotes && notesSourceUrl) {\n if (releaseNotesSources.includes(notesSourceUrl)) {\n logger.debug(\n { depName: upgrade.depName },\n 'Removing duplicate release notes',\n );\n upgrade.hasReleaseNotes = false;\n } else {\n releaseNotesSources.push(notesSourceUrl);\n }\n }\n }\n\n const prBody = getPrBody(\n config,\n {\n debugData: updatePrDebugData(\n config.baseBranch,\n prepareLabels(config), // include labels in debug data\n existingPr?.bodyStruct?.debugData,\n ),\n },\n config,\n );\n\n try {\n if (existingPr) {\n logger.debug('Processing existing PR');\n\n if (\n !existingPr.hasAssignees &&\n !hasNotIgnoredReviewers(existingPr, config) &&\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) === 'red'\n ) {\n logger.debug(`Setting assignees and reviewers as status checks failed`);\n await addParticipants(config, existingPr);\n }\n // Check if existing PR needs updating\n const existingPrTitle = stripEmojis(existingPr.title);\n const existingPrBodyHash = existingPr.bodyStruct?.hash;\n const newPrTitle = stripEmojis(prTitle);\n const newPrBodyHash = hashBody(prBody);\n\n const prInitialLabels = existingPr.bodyStruct?.debugData?.labels;\n const prCurrentLabels = existingPr.labels;\n const configuredLabels = prepareLabels(config);\n\n const labelsNeedUpdate = shouldUpdateLabels(\n prInitialLabels,\n prCurrentLabels,\n configuredLabels,\n );\n\n if (\n existingPr?.targetBranch === config.baseBranch &&\n existingPrTitle === newPrTitle &&\n existingPrBodyHash === newPrBodyHash &&\n !labelsNeedUpdate\n ) {\n // adds or-cache for existing PRs\n setPrCache(branchName, prBodyFingerprint, false);\n logger.debug(\n `Pull Request #${existingPr.number} does not need updating`,\n );\n return { type: 'with-pr', pr: existingPr };\n }\n\n const updatePrConfig: UpdatePrConfig = {\n number: existingPr.number,\n prTitle,\n prBody,\n platformPrOptions: getPlatformPrOptions(config),\n };\n // PR must need updating\n if (existingPr?.targetBranch !== config.baseBranch) {\n logger.debug(\n {\n branchName,\n oldBaseBranch: existingPr?.targetBranch,\n newBaseBranch: config.baseBranch,\n },\n 'PR base branch has changed',\n );\n updatePrConfig.targetBranch = config.baseBranch;\n }\n\n if (labelsNeedUpdate) {\n logger.debug(\n {\n branchName,\n prCurrentLabels,\n configuredLabels,\n },\n 'PR labels have changed',\n );\n\n // Divide labels into three categories:\n // i) addLabels: Labels that need to be added\n // ii) removeLabels: Labels that need to be removed\n // iii) labels: New labels for the PR, replacing the old labels array entirely.\n // This distinction is necessary because different platforms update labels differently\n // For more details, refer to the updatePr function of each platform.\n\n const [addLabels, removeLabels] = getChangedLabels(\n prCurrentLabels,\n configuredLabels,\n );\n\n // for Gitea\n updatePrConfig.labels = configuredLabels;\n\n // for GitHub, GitLab\n updatePrConfig.addLabels = addLabels;\n updatePrConfig.removeLabels = removeLabels;\n }\n if (existingPrTitle !== newPrTitle) {\n logger.debug(\n {\n branchName,\n oldPrTitle: existingPr.title,\n newPrTitle: prTitle,\n },\n 'PR title changed',\n );\n } else if (!config.committedFiles && !config.rebaseRequested) {\n logger.debug(\n {\n prTitle,\n },\n 'PR body changed',\n );\n }\n\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would update PR #${existingPr.number}`);\n return { type: 'with-pr', pr: existingPr };\n } else {\n await platform.updatePr(updatePrConfig);\n logger.info({ pr: existingPr.number, prTitle }, `PR updated`);\n setPrCache(branchName, prBodyFingerprint, true);\n }\n return {\n type: 'with-pr',\n pr: {\n ...existingPr,\n bodyStruct: getPrBodyStruct(prBody),\n title: prTitle,\n targetBranch: config.baseBranch,\n },\n };\n }\n logger.debug({ branch: branchName, prTitle }, `Creating PR`);\n if (config.updateType === 'rollback') {\n logger.info('Creating Rollback PR');\n }\n let pr: Pr | null;\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create PR: ' + prTitle);\n pr = { number: 0 } as never;\n } else {\n try {\n if (\n !dependencyDashboardCheck &&\n isLimitReached('ConcurrentPRs', prConfig) &&\n !config.isVulnerabilityAlert\n ) {\n logger.debug('Skipping PR - limit reached');\n return { type: 'without-pr', prBlockedBy: 'RateLimited' };\n }\n pr = await platform.createPr({\n sourceBranch: branchName,\n targetBranch: config.baseBranch,\n prTitle,\n prBody,\n labels: prepareLabels(config),\n platformPrOptions: getPlatformPrOptions(config),\n draftPR: !!config.draftPR,\n milestone: config.milestone,\n });\n\n incCountValue('ConcurrentPRs');\n incCountValue('HourlyPRs');\n logger.info({ pr: pr?.number, prTitle }, 'PR created');\n } catch (err) {\n logger.debug({ err }, 'Pull request creation error');\n if (\n err.body?.message === 'Validation failed' &&\n err.body.errors?.length &&\n err.body.errors.some((error: { message?: string }) =>\n error.message?.startsWith('A pull request already exists'),\n )\n ) {\n logger.warn('A pull requests already exists');\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n if (err.statusCode === 502) {\n logger.warn(\n { branch: branchName },\n 'Deleting branch due to server error',\n );\n await scm.deleteBranch(branchName);\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n }\n }\n if (\n pr &&\n config.branchAutomergeFailureMessage &&\n !config.suppressNotifications?.includes('branchAutomergeFailure')\n ) {\n const topic = 'Branch automerge failure';\n let content =\n 'This PR was configured for branch automerge. However, this is not possible, so it has been raised as a PR instead.';\n if (config.branchAutomergeFailureMessage === 'branch status error') {\n content += '\\n___\\n * Branch has one or more failed status checks';\n }\n content = platform.massageMarkdown(content, config.rebaseLabel);\n logger.debug('Adding branch automerge failure message to PR');\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would add comment to PR #${pr.number}`);\n } else {\n await ensureComment({\n number: pr.number,\n topic,\n content,\n });\n }\n }\n // Skip assign and review if automerging PR\n if (pr) {\n if (\n config.automerge &&\n !config.assignAutomerge &&\n (await getBranchStatus()) !== 'red'\n ) {\n logger.debug(\n `Skipping assignees and reviewers as automerge=${config.automerge}`,\n );\n } else {\n await addParticipants(config, pr);\n }\n setPrCache(branchName, prBodyFingerprint, true);\n logger.debug(`Created Pull Request #${pr.number}`);\n return { type: 'with-pr', pr };\n }\n } catch (err) {\n if (\n err instanceof ExternalHostError ||\n err.message === REPOSITORY_CHANGED ||\n err.message === PLATFORM_RATE_LIMIT_EXCEEDED ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('Passing error up');\n throw err;\n }\n logger.warn({ err, prTitle }, 'Failed to ensure PR');\n }\n if (existingPr) {\n return { type: 'with-pr', pr: existingPr };\n }\n return { type: 'without-pr', prBlockedBy: 'Error' };\n}\n"]}
|
package/package.json
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"name": "renovate",
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
4
|
-
"version": "41.30.
|
4
|
+
"version": "41.30.5",
|
5
5
|
"type": "commonjs",
|
6
6
|
"bin": {
|
7
7
|
"renovate": "dist/renovate.js",
|
@@ -262,7 +262,7 @@
|
|
262
262
|
"vuln-vects": "1.1.0",
|
263
263
|
"xmldoc": "2.0.2",
|
264
264
|
"yaml": "2.8.0",
|
265
|
-
"zod": "3.25.
|
265
|
+
"zod": "3.25.73"
|
266
266
|
},
|
267
267
|
"optionalDependencies": {
|
268
268
|
"better-sqlite3": "12.2.0",
|