renovate 44.38.0 → 44.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/workers/repository/onboarding/pr/index.js +83 -36
- package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
- package/dist/workers/repository/reconfigure/comment.js +56 -18
- package/dist/workers/repository/reconfigure/comment.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -55,6 +55,65 @@ async function ensureOnboardingAutoCloseAge(existingPr) {
|
|
|
55
55
|
}
|
|
56
56
|
return false;
|
|
57
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Full onboarding PRs list package files before the PR list.
|
|
60
|
+
*/
|
|
61
|
+
const FULL_SECTION_ORDER = [
|
|
62
|
+
"PACKAGE FILES",
|
|
63
|
+
"CONFIG",
|
|
64
|
+
"BASEBRANCH",
|
|
65
|
+
"PRLIST",
|
|
66
|
+
"WARNINGS",
|
|
67
|
+
"ERRORS"
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* "Summarised" onboarding PRs list PRs before other sections.
|
|
71
|
+
*/
|
|
72
|
+
const SUMMARY_SECTION_ORDER = [
|
|
73
|
+
"PRLIST",
|
|
74
|
+
"CONFIG",
|
|
75
|
+
"BASEBRANCH",
|
|
76
|
+
"PACKAGE FILES",
|
|
77
|
+
"WARNINGS",
|
|
78
|
+
"ERRORS"
|
|
79
|
+
];
|
|
80
|
+
function buildOnboardingPrTemplate(config, configFile, rebaseCheckBox, sectionOrder) {
|
|
81
|
+
let prTemplate = `Welcome to [Renovate](${GlobalConfig.get("productLinks").homepage})! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\n\n`;
|
|
82
|
+
prTemplate += getInheritedOrGlobal("requireConfig") === "required" ? emojify(`:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\n\n`) : emojify(`:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\n\n`);
|
|
83
|
+
prTemplate += emojify(`:books: See our [Reading List](${GlobalConfig.get("productLinks").documentation}reading-list/) for relevant documentation you may be interested in reading.\n\n`);
|
|
84
|
+
prTemplate += emojify(`:abcd: Do you want to change how Renovate upgrades your dependencies?`);
|
|
85
|
+
prTemplate += ` Add your custom config to \`${configFile}\` in this branch${config.onboardingRebaseCheckbox ? " and select the Retry/Rebase checkbox below" : ""}. Renovate will update the Pull Request description the next time it runs.`;
|
|
86
|
+
prTemplate += "\n\n";
|
|
87
|
+
prTemplate += emojify(`
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
${sectionOrder.map((section) => `{{${section}}}`).join("\n")}
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
:question: Got questions? Check out Renovate's [Docs](${GlobalConfig.get("productLinks").documentation}), particularly the Getting Started section.
|
|
95
|
+
If you need any further assistance then you can also [request help here](${GlobalConfig.get("productLinks").help}).
|
|
96
|
+
`);
|
|
97
|
+
prTemplate += rebaseCheckBox;
|
|
98
|
+
return prTemplate;
|
|
99
|
+
}
|
|
100
|
+
function fillOnboardingPrBody(prTemplate, sections) {
|
|
101
|
+
let prBody = prTemplate;
|
|
102
|
+
if (sections.packageFiles) prBody = `${prBody.replace("{{PACKAGE FILES}}", sections.packageFiles)}\n`;
|
|
103
|
+
else prBody = prBody.replace("{{PACKAGE FILES}}\n", "");
|
|
104
|
+
prBody = prBody.replace("{{CONFIG}}\n", sections.config);
|
|
105
|
+
prBody = prBody.replace("{{WARNINGS}}\n", sections.warnings);
|
|
106
|
+
prBody = prBody.replace("{{ERRORS}}\n", sections.errors);
|
|
107
|
+
prBody = prBody.replace("{{BASEBRANCH}}\n", sections.baseBranch);
|
|
108
|
+
prBody = prBody.replace("{{PRLIST}}\n", sections.prList);
|
|
109
|
+
return prBody;
|
|
110
|
+
}
|
|
111
|
+
function finalizeOnboardingPrBody(prBody, config, onboardingConfigHashComment) {
|
|
112
|
+
let finalPrBody = prBody;
|
|
113
|
+
if (isString(config.prHeader)) finalPrBody = `${compile(config.prHeader, config)}\n\n${finalPrBody}`;
|
|
114
|
+
if (isString(config.prFooter)) finalPrBody = `${finalPrBody}\n---\n\n${compile(config.prFooter, config)}\n`;
|
|
115
|
+
return finalPrBody + onboardingConfigHashComment;
|
|
116
|
+
}
|
|
58
117
|
async function ensureOnboardingPr(config, packageFiles, branches) {
|
|
59
118
|
if (config.repoIsOnboarded === true || config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested) return;
|
|
60
119
|
logger.debug("ensureOnboardingPr()");
|
|
@@ -79,50 +138,38 @@ async function ensureOnboardingPr(config, packageFiles, branches) {
|
|
|
79
138
|
if (OnboardingState.onboardingCacheValid) return;
|
|
80
139
|
const onboardingConfigHashComment = await getOnboardingConfigHashComment();
|
|
81
140
|
const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);
|
|
82
|
-
logger.debug("Filling in onboarding PR template");
|
|
83
|
-
let prTemplate = `Welcome to [Renovate](${GlobalConfig.get("productLinks").homepage})! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\n\n`;
|
|
84
|
-
prTemplate += getInheritedOrGlobal("requireConfig") === "required" ? emojify(`:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\n\n`) : emojify(`:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\n\n`);
|
|
85
|
-
prTemplate += emojify(`:books: See our [Reading List](${GlobalConfig.get("productLinks").documentation}reading-list/) for relevant documentation you may be interested in reading.\n\n`);
|
|
86
141
|
const configFile = getDefaultConfigFileName();
|
|
87
|
-
|
|
88
|
-
prTemplate += ` Add your custom config to \`${configFile}\` in this branch${config.onboardingRebaseCheckbox ? " and select the Retry/Rebase checkbox below" : ""}. Renovate will update the Pull Request description the next time it runs.`;
|
|
89
|
-
prTemplate += "\n\n";
|
|
90
|
-
prTemplate += emojify(`
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
{{PACKAGE FILES}}
|
|
94
|
-
{{CONFIG}}
|
|
95
|
-
{{BASEBRANCH}}
|
|
96
|
-
{{PRLIST}}
|
|
97
|
-
{{WARNINGS}}
|
|
98
|
-
{{ERRORS}}
|
|
99
|
-
|
|
100
|
-
---
|
|
101
|
-
|
|
102
|
-
:question: Got questions? Check out Renovate's [Docs](${GlobalConfig.get("productLinks").documentation}), particularly the Getting Started section.
|
|
103
|
-
If you need any further assistance then you can also [request help here](${GlobalConfig.get("productLinks").help}).
|
|
104
|
-
`);
|
|
105
|
-
prTemplate += rebaseCheckBox;
|
|
106
|
-
let prBody = prTemplate;
|
|
142
|
+
logger.debug("Filling in onboarding PR template");
|
|
107
143
|
const packageFilesDesc = getPackageFilesDesc(packageFiles);
|
|
108
|
-
if (packageFilesDesc) prBody = `${prBody.replace("{{PACKAGE FILES}}", packageFilesDesc)}\n`;
|
|
109
|
-
else prBody = prBody.replace("{{PACKAGE FILES}}\n", "");
|
|
110
144
|
let configDesc = "";
|
|
111
145
|
if (GlobalConfig.get("dryRun")) logger.info(`DRY-RUN: Would check branch ${onboardingBranch}`);
|
|
112
146
|
else configDesc = getConfigDesc(config, packageFiles);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
prBody = prBody.replace("{{BASEBRANCH}}\n", getBaseBranchDesc(config));
|
|
147
|
+
const warnings = getWarnings(config) + getDepWarningsOnboardingPR(packageFiles, config);
|
|
148
|
+
const errors = getErrors(config);
|
|
149
|
+
const baseBranchDesc = getBaseBranchDesc(config);
|
|
117
150
|
const prList = getExpectedPrList(config, branches);
|
|
118
|
-
prBody =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
151
|
+
let prBody = finalizeOnboardingPrBody(fillOnboardingPrBody(buildOnboardingPrTemplate(config, configFile, rebaseCheckBox, FULL_SECTION_ORDER), {
|
|
152
|
+
packageFiles: packageFilesDesc,
|
|
153
|
+
config: configDesc,
|
|
154
|
+
baseBranch: baseBranchDesc,
|
|
155
|
+
prList,
|
|
156
|
+
warnings,
|
|
157
|
+
errors
|
|
158
|
+
}), config, onboardingConfigHashComment);
|
|
122
159
|
if (prBody.length > platform.maxBodyLength()) {
|
|
123
160
|
logger.debug("Onboarding PR body exceeds platform limit, switching to summary PR list and package files");
|
|
124
|
-
|
|
125
|
-
if (packageFilesDesc)
|
|
161
|
+
const prListSummary = getExpectedPrListSummary(config, branches);
|
|
162
|
+
if (packageFilesDesc) {
|
|
163
|
+
const packageFilesSummary = `### Detected Package Files\n\n${getPackageFilesSummary(packageFiles)}`;
|
|
164
|
+
prBody = finalizeOnboardingPrBody(fillOnboardingPrBody(buildOnboardingPrTemplate(config, configFile, rebaseCheckBox, SUMMARY_SECTION_ORDER), {
|
|
165
|
+
packageFiles: packageFilesSummary,
|
|
166
|
+
config: configDesc,
|
|
167
|
+
baseBranch: baseBranchDesc,
|
|
168
|
+
prList: prListSummary,
|
|
169
|
+
warnings,
|
|
170
|
+
errors
|
|
171
|
+
}), config, onboardingConfigHashComment);
|
|
172
|
+
} else prBody = prBody.replace(prList, prListSummary);
|
|
126
173
|
}
|
|
127
174
|
logger.trace(`prBody:\n${prBody}`);
|
|
128
175
|
prBody = platform.massageMarkdown(prBody, config.rebaseLabel);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_CLOSED_ONBOARDING } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { hashBody } from '../../../../modules/platform/pr-body.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { toSha256 } from '../../../../util/hash.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings.ts';\nimport { getPlatformPrOptions } from '../../update/pr/index.ts';\nimport { prepareLabels } from '../../update/pr/labels.ts';\nimport { addParticipants } from '../../update/pr/participants.ts';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { getBaseBranchDesc } from './base-branch.ts';\nimport { getConfigDesc } from './config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from './package-files.ts';\nimport { getExpectedPrList, getExpectedPrListSummary } from './pr-list.ts';\n\n/**\n * Given an existing PR, if onboardingAutoCloseAge has passed, close the PR.\n *\n * Returns true if the PR was closed.\n */\nasync function ensureOnboardingAutoCloseAge(existingPr: Pr): Promise<boolean> {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!, false);\n const onboardingAutoCloseAge = getInheritedOrGlobal('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return true;\n }\n return false;\n}\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 (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch')!;\n const existingPr = await platform.getBranchPr(\n onboardingBranch,\n config.defaultBranch,\n );\n if (existingPr) {\n const wasClosed = await ensureOnboardingAutoCloseAge(existingPr);\n if (wasClosed) {\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n }\n\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n 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\n if (OnboardingState.onboardingCacheValid) {\n return;\n }\n\n const onboardingConfigHashComment = await getOnboardingConfigHashComment();\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n GlobalConfig.get('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 getInheritedOrGlobal('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\n prTemplate += emojify(\n `:books: See our [Reading List](${GlobalConfig.get('productLinks').documentation}reading-list/) for relevant documentation you may be interested in reading.\\n\\n`,\n );\n\n const configFile = getDefaultConfigFileName();\n prTemplate += emojify(\n `:abcd: Do you want to change how Renovate upgrades your dependencies?`,\n );\n prTemplate += ` Add your custom config to \\`${configFile}\\` in this branch${\n config.onboardingRebaseCheckbox\n ? ' and select the Retry/Rebase checkbox below'\n : ''\n }. Renovate will update the Pull Request description the next time it runs.`;\n prTemplate += '\\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 GlobalConfig.get('productLinks').documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n GlobalConfig.get('productLinks').help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n const packageFilesDesc = getPackageFilesDesc(packageFiles);\n if (packageFilesDesc) {\n prBody = `${prBody.replace('{{PACKAGE FILES}}', packageFilesDesc)}\\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 ${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 const prList = getExpectedPrList(config, branches);\n prBody = prBody.replace('{{PRLIST}}\\n', prList);\n if (isString(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (isString(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n if (prBody.length > platform.maxBodyLength()) {\n logger.debug(\n 'Onboarding PR body exceeds platform limit, switching to summary PR list and package files',\n );\n prBody = prBody.replace(prList, getExpectedPrListSummary(config, branches));\n if (packageFilesDesc) {\n prBody = prBody.replace(\n packageFilesDesc,\n `### Detected Package Files\\n\\n${getPackageFilesSummary(packageFiles)}`,\n );\n }\n }\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 : getInheritedOrGlobal('onboardingPrTitle')!;\n const pr = await platform.createPr({\n sourceBranch: 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(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(): Promise<string> {\n const configFile = getDefaultConfigFileName();\n const existingContents =\n (await getFile(configFile, getInheritedOrGlobal('onboardingBranch'))) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["template.compile"],"sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global.ts';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { REPOSITORY_CLOSED_ONBOARDING } from '../../../../constants/error-messages.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../../modules/platform/index.ts';\nimport { platform } from '../../../../modules/platform/index.ts';\nimport { hashBody } from '../../../../modules/platform/pr-body.ts';\nimport { scm } from '../../../../modules/platform/scm.ts';\nimport { getInheritedOrGlobal } from '../../../../util/common.ts';\nimport { getElapsedDays } from '../../../../util/date.ts';\nimport { emojify } from '../../../../util/emoji.ts';\nimport { getFile } from '../../../../util/git/index.ts';\nimport { toSha256 } from '../../../../util/hash.ts';\nimport * as template from '../../../../util/template/index.ts';\nimport type { BranchConfig } from '../../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings.ts';\nimport { getPlatformPrOptions } from '../../update/pr/index.ts';\nimport { prepareLabels } from '../../update/pr/labels.ts';\nimport { addParticipants } from '../../update/pr/participants.ts';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache.ts';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common.ts';\nimport { getBaseBranchDesc } from './base-branch.ts';\nimport { getConfigDesc } from './config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from './package-files.ts';\nimport { getExpectedPrList, getExpectedPrListSummary } from './pr-list.ts';\nimport type { OnboardingPrSections } from './types.ts';\n\n/**\n * Given an existing PR, if onboardingAutoCloseAge has passed, close the PR.\n *\n * Returns true if the PR was closed.\n */\nasync function ensureOnboardingAutoCloseAge(existingPr: Pr): Promise<boolean> {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!, false);\n const onboardingAutoCloseAge = getInheritedOrGlobal('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return true;\n }\n return false;\n}\n\n/**\n * Full onboarding PRs list package files before the PR list.\n */\nconst FULL_SECTION_ORDER = [\n 'PACKAGE FILES',\n 'CONFIG',\n 'BASEBRANCH',\n 'PRLIST',\n 'WARNINGS',\n 'ERRORS',\n] as const;\n\n/**\n * \"Summarised\" onboarding PRs list PRs before other sections.\n */\nconst SUMMARY_SECTION_ORDER = [\n 'PRLIST',\n 'CONFIG',\n 'BASEBRANCH',\n 'PACKAGE FILES',\n 'WARNINGS',\n 'ERRORS',\n] as const;\n\nfunction buildOnboardingPrTemplate(\n config: RenovateConfig,\n configFile: string,\n rebaseCheckBox: string,\n sectionOrder: readonly string[],\n): string {\n let prTemplate = `Welcome to [Renovate](${\n GlobalConfig.get('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 getInheritedOrGlobal('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\n prTemplate += emojify(\n `:books: See our [Reading List](${GlobalConfig.get('productLinks').documentation}reading-list/) for relevant documentation you may be interested in reading.\\n\\n`,\n );\n\n prTemplate += emojify(\n `:abcd: Do you want to change how Renovate upgrades your dependencies?`,\n );\n prTemplate += ` Add your custom config to \\`${configFile}\\` in this branch${\n config.onboardingRebaseCheckbox\n ? ' and select the Retry/Rebase checkbox below'\n : ''\n }. Renovate will update the Pull Request description the next time it runs.`;\n prTemplate += '\\n\\n';\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n${sectionOrder.map((section) => `{{${section}}}`).join('\\n')}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n GlobalConfig.get('productLinks').documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n GlobalConfig.get('productLinks').help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n return prTemplate;\n}\n\nfunction fillOnboardingPrBody(\n prTemplate: string,\n sections: OnboardingPrSections,\n): string {\n let prBody = prTemplate;\n if (sections.packageFiles) {\n prBody = `${prBody.replace('{{PACKAGE FILES}}', sections.packageFiles)}\\n`;\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n prBody = prBody.replace('{{CONFIG}}\\n', sections.config);\n prBody = prBody.replace('{{WARNINGS}}\\n', sections.warnings);\n prBody = prBody.replace('{{ERRORS}}\\n', sections.errors);\n prBody = prBody.replace('{{BASEBRANCH}}\\n', sections.baseBranch);\n prBody = prBody.replace('{{PRLIST}}\\n', sections.prList);\n return prBody;\n}\n\nfunction finalizeOnboardingPrBody(\n prBody: string,\n config: RenovateConfig,\n onboardingConfigHashComment: string,\n): string {\n let finalPrBody = prBody;\n if (isString(config.prHeader)) {\n finalPrBody = `${template.compile(config.prHeader, config)}\\n\\n${finalPrBody}`;\n }\n if (isString(config.prFooter)) {\n finalPrBody = `${finalPrBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n return finalPrBody + onboardingConfigHashComment;\n}\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 (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const onboardingBranch = getInheritedOrGlobal('onboardingBranch')!;\n const existingPr = await platform.getBranchPr(\n onboardingBranch,\n config.defaultBranch,\n );\n if (existingPr) {\n const wasClosed = await ensureOnboardingAutoCloseAge(existingPr);\n if (wasClosed) {\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n }\n\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n 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\n if (OnboardingState.onboardingCacheValid) {\n return;\n }\n\n const onboardingConfigHashComment = await getOnboardingConfigHashComment();\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n const configFile = getDefaultConfigFileName();\n logger.debug('Filling in onboarding PR template');\n\n const packageFilesDesc = getPackageFilesDesc(packageFiles);\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${onboardingBranch}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n const warnings =\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config);\n const errors = getErrors(config);\n const baseBranchDesc = getBaseBranchDesc(config);\n const prList = getExpectedPrList(config, branches);\n\n let prBody = finalizeOnboardingPrBody(\n fillOnboardingPrBody(\n buildOnboardingPrTemplate(\n config,\n configFile,\n rebaseCheckBox,\n FULL_SECTION_ORDER,\n ),\n {\n packageFiles: packageFilesDesc,\n config: configDesc,\n baseBranch: baseBranchDesc,\n prList,\n warnings,\n errors,\n },\n ),\n config,\n onboardingConfigHashComment,\n );\n\n if (prBody.length > platform.maxBodyLength()) {\n logger.debug(\n 'Onboarding PR body exceeds platform limit, switching to summary PR list and package files',\n );\n const prListSummary = getExpectedPrListSummary(config, branches);\n if (packageFilesDesc) {\n const packageFilesSummary = `### Detected Package Files\\n\\n${getPackageFilesSummary(packageFiles)}`;\n // \"What to Expect\" should render before \"Detected Package Files\" in the summary view,\n // so rebuild from a template with that section order rather than reordering the rendered body.\n prBody = finalizeOnboardingPrBody(\n fillOnboardingPrBody(\n buildOnboardingPrTemplate(\n config,\n configFile,\n rebaseCheckBox,\n SUMMARY_SECTION_ORDER,\n ),\n {\n packageFiles: packageFilesSummary,\n config: configDesc,\n baseBranch: baseBranchDesc,\n prList: prListSummary,\n warnings,\n errors,\n },\n ),\n config,\n onboardingConfigHashComment,\n );\n } else {\n prBody = prBody.replace(prList, prListSummary);\n }\n }\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 : getInheritedOrGlobal('onboardingPrTitle')!;\n const pr = await platform.createPr({\n sourceBranch: 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(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(): Promise<string> {\n const configFile = getDefaultConfigFileName();\n const existingContents =\n (await getFile(configFile, getInheritedOrGlobal('onboardingBranch'))) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"],"mappings":"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"}
|
|
@@ -9,36 +9,74 @@ import { getPackageFilesDesc, getPackageFilesSummary } from "../onboarding/pr/pa
|
|
|
9
9
|
import { getExpectedPrList, getExpectedPrListSummary } from "../onboarding/pr/pr-list.js";
|
|
10
10
|
import { isArray, isString } from "@sindresorhus/is";
|
|
11
11
|
//#region lib/workers/repository/reconfigure/comment.ts
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const SECTION_ORDER = [
|
|
13
|
+
"PACKAGE FILES",
|
|
14
|
+
"CONFIG",
|
|
15
|
+
"BASEBRANCH",
|
|
16
|
+
"PRLIST",
|
|
17
|
+
"WARNINGS",
|
|
18
|
+
"ERRORS"
|
|
19
|
+
];
|
|
20
|
+
const SUMMARY_SECTION_ORDER = [
|
|
21
|
+
"PRLIST",
|
|
22
|
+
"CONFIG",
|
|
23
|
+
"BASEBRANCH",
|
|
24
|
+
"PACKAGE FILES",
|
|
25
|
+
"WARNINGS",
|
|
26
|
+
"ERRORS"
|
|
27
|
+
];
|
|
28
|
+
function buildReconfigurePrCommentTemplate(sectionOrder) {
|
|
15
29
|
let prCommentTemplate = `This is a reconfigure PR comment to help you understand and re-configure your renovate bot settings. If this Reconfigure PR were to be merged, we'd expect to see the following outcome:\n\n`;
|
|
16
30
|
prCommentTemplate += `
|
|
17
31
|
---
|
|
18
|
-
{{
|
|
19
|
-
{{CONFIG}}
|
|
20
|
-
{{BASEBRANCH}}
|
|
21
|
-
{{PRLIST}}
|
|
22
|
-
{{WARNINGS}}
|
|
23
|
-
{{ERRORS}}
|
|
32
|
+
${sectionOrder.map((section) => `{{${section}}}`).join("\n")}
|
|
24
33
|
`;
|
|
34
|
+
return prCommentTemplate;
|
|
35
|
+
}
|
|
36
|
+
function fillReconfigurePrCommentBody(prCommentTemplate, sections) {
|
|
25
37
|
let prBody = prCommentTemplate;
|
|
26
|
-
|
|
27
|
-
if (packageFilesDesc) prBody = `${prBody.replace("{{PACKAGE FILES}}", packageFilesDesc)}\n`;
|
|
38
|
+
if (sections.packageFiles) prBody = `${prBody.replace("{{PACKAGE FILES}}", sections.packageFiles)}\n`;
|
|
28
39
|
else prBody = prBody.replace("{{PACKAGE FILES}}\n", "");
|
|
40
|
+
prBody = prBody.replace("{{CONFIG}}\n", sections.config);
|
|
41
|
+
prBody = prBody.replace("{{WARNINGS}}\n", sections.warnings);
|
|
42
|
+
prBody = prBody.replace("{{ERRORS}}\n", sections.errors);
|
|
43
|
+
prBody = prBody.replace("{{BASEBRANCH}}\n", sections.baseBranch);
|
|
44
|
+
prBody = prBody.replace("{{PRLIST}}\n", sections.prList);
|
|
45
|
+
return prBody;
|
|
46
|
+
}
|
|
47
|
+
async function ensureReconfigurePrComment(config, packageFiles, branches, branchName, pr) {
|
|
48
|
+
logger.debug("ensureReconfigurePrComment()");
|
|
49
|
+
logger.trace({ config });
|
|
50
|
+
const packageFilesDesc = getPackageFilesDesc(packageFiles);
|
|
29
51
|
let configDesc = "";
|
|
30
52
|
if (GlobalConfig.get("dryRun")) logger.info(`DRY-RUN: Would check branch ${branchName}`);
|
|
31
53
|
else configDesc = getConfigDesc(config);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
prBody = prBody.replace("{{BASEBRANCH}}\n", getBaseBranchDesc(config));
|
|
54
|
+
const warnings = getWarnings(config) + getDepWarningsOnboardingPR(packageFiles, config);
|
|
55
|
+
const errors = getErrors(config);
|
|
56
|
+
const baseBranchDesc = getBaseBranchDesc(config);
|
|
36
57
|
const prList = getExpectedPrList(config, branches);
|
|
37
|
-
prBody =
|
|
58
|
+
let prBody = fillReconfigurePrCommentBody(buildReconfigurePrCommentTemplate(SECTION_ORDER), {
|
|
59
|
+
packageFiles: packageFilesDesc,
|
|
60
|
+
config: configDesc,
|
|
61
|
+
baseBranch: baseBranchDesc,
|
|
62
|
+
prList,
|
|
63
|
+
warnings,
|
|
64
|
+
errors
|
|
65
|
+
});
|
|
38
66
|
if (prBody.length > platform.maxBodyLength()) {
|
|
39
67
|
logger.debug("Reconfigure PR body exceeds platform limit, switching to summary PR list and package files");
|
|
40
|
-
|
|
41
|
-
if (packageFilesDesc)
|
|
68
|
+
const prListSummary = getExpectedPrListSummary(config, branches);
|
|
69
|
+
if (packageFilesDesc) {
|
|
70
|
+
const packageFilesSummary = `### Detected Package Files\n\n${getPackageFilesSummary(packageFiles)}`;
|
|
71
|
+
prBody = fillReconfigurePrCommentBody(buildReconfigurePrCommentTemplate(SUMMARY_SECTION_ORDER), {
|
|
72
|
+
packageFiles: packageFilesSummary,
|
|
73
|
+
config: configDesc,
|
|
74
|
+
baseBranch: baseBranchDesc,
|
|
75
|
+
prList: prListSummary,
|
|
76
|
+
warnings,
|
|
77
|
+
errors
|
|
78
|
+
});
|
|
79
|
+
} else prBody = prBody.replace(prList, prListSummary);
|
|
42
80
|
}
|
|
43
81
|
logger.trace(`prBody:\n${prBody}`);
|
|
44
82
|
prBody = platform.massageMarkdown(prBody);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comment.js","names":[],"sources":["../../../../lib/workers/repository/reconfigure/comment.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../modules/platform/index.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport type { BranchConfig } from '../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../errors-warnings.ts';\nimport { getBaseBranchDesc } from '../onboarding/pr/base-branch.ts';\nimport { getScheduleDesc } from '../onboarding/pr/config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from '../onboarding/pr/package-files.ts';\nimport {\n getExpectedPrList,\n getExpectedPrListSummary,\n} from '../onboarding/pr/pr-list.ts';\n\
|
|
1
|
+
{"version":3,"file":"comment.js","names":[],"sources":["../../../../lib/workers/repository/reconfigure/comment.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global.ts';\nimport type { RenovateConfig } from '../../../config/types.ts';\nimport { logger } from '../../../logger/index.ts';\nimport type { PackageFile } from '../../../modules/manager/types.ts';\nimport { ensureComment } from '../../../modules/platform/comment.ts';\nimport type { Pr } from '../../../modules/platform/index.ts';\nimport { platform } from '../../../modules/platform/index.ts';\nimport type { BranchConfig } from '../../types.ts';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../errors-warnings.ts';\nimport { getBaseBranchDesc } from '../onboarding/pr/base-branch.ts';\nimport { getScheduleDesc } from '../onboarding/pr/config-description.ts';\nimport {\n getPackageFilesDesc,\n getPackageFilesSummary,\n} from '../onboarding/pr/package-files.ts';\nimport {\n getExpectedPrList,\n getExpectedPrListSummary,\n} from '../onboarding/pr/pr-list.ts';\nimport type { ReconfigurePrCommentSections } from '../onboarding/pr/types.ts';\n\n// Full reconfigure PR comments list package files before the PR list.\nconst SECTION_ORDER = [\n 'PACKAGE FILES',\n 'CONFIG',\n 'BASEBRANCH',\n 'PRLIST',\n 'WARNINGS',\n 'ERRORS',\n] as const;\n// Once the body is summarised, \"What to Expect\" should render before \"Detected Package Files\".\nconst SUMMARY_SECTION_ORDER = [\n 'PRLIST',\n 'CONFIG',\n 'BASEBRANCH',\n 'PACKAGE FILES',\n 'WARNINGS',\n 'ERRORS',\n] as const;\n\nfunction buildReconfigurePrCommentTemplate(\n sectionOrder: readonly string[],\n): string {\n let prCommentTemplate = `This is a reconfigure PR comment to help you understand and re-configure your renovate bot settings. If this Reconfigure PR were to be merged, we'd expect to see the following outcome:\\n\\n`;\n\n // TODO #22198\n prCommentTemplate += `\n---\n${sectionOrder.map((section) => `{{${section}}}`).join('\\n')}\n`;\n return prCommentTemplate;\n}\n\nfunction fillReconfigurePrCommentBody(\n prCommentTemplate: string,\n sections: ReconfigurePrCommentSections,\n): string {\n let prBody = prCommentTemplate;\n if (sections.packageFiles) {\n prBody = `${prBody.replace('{{PACKAGE FILES}}', sections.packageFiles)}\\n`;\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n prBody = prBody.replace('{{CONFIG}}\\n', sections.config);\n prBody = prBody.replace('{{WARNINGS}}\\n', sections.warnings);\n prBody = prBody.replace('{{ERRORS}}\\n', sections.errors);\n prBody = prBody.replace('{{BASEBRANCH}}\\n', sections.baseBranch);\n prBody = prBody.replace('{{PRLIST}}\\n', sections.prList);\n return prBody;\n}\n\nexport async function ensureReconfigurePrComment(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n branchName: string,\n pr: Pr,\n): Promise<boolean> {\n logger.debug('ensureReconfigurePrComment()');\n logger.trace({ config });\n\n const packageFilesDesc = getPackageFilesDesc(packageFiles);\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n logger.info(`DRY-RUN: Would check branch ${branchName}`);\n } else {\n configDesc = getConfigDesc(config);\n }\n const warnings =\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config);\n const errors = getErrors(config);\n const baseBranchDesc = getBaseBranchDesc(config);\n const prList = getExpectedPrList(config, branches);\n\n let prBody = fillReconfigurePrCommentBody(\n buildReconfigurePrCommentTemplate(SECTION_ORDER),\n {\n packageFiles: packageFilesDesc,\n config: configDesc,\n baseBranch: baseBranchDesc,\n prList,\n warnings,\n errors,\n },\n );\n\n if (prBody.length > platform.maxBodyLength()) {\n logger.debug(\n 'Reconfigure PR body exceeds platform limit, switching to summary PR list and package files',\n );\n const prListSummary = getExpectedPrListSummary(config, branches);\n if (packageFilesDesc) {\n const packageFilesSummary = `### Detected Package Files\\n\\n${getPackageFilesSummary(packageFiles)}`;\n // \"What to Expect\" should render before \"Detected Package Files\" in the summary view,\n // so rebuild from a template with that section order rather than reordering the rendered body.\n prBody = fillReconfigurePrCommentBody(\n buildReconfigurePrCommentTemplate(SUMMARY_SECTION_ORDER),\n {\n packageFiles: packageFilesSummary,\n config: configDesc,\n baseBranch: baseBranchDesc,\n prList: prListSummary,\n warnings,\n errors,\n },\n );\n } else {\n prBody = prBody.replace(prList, prListSummary);\n }\n }\n\n logger.trace(`prBody:\\n${prBody}`);\n\n prBody = platform.massageMarkdown(prBody);\n\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would ensure comment');\n return true;\n }\n\n return await ensureComment({\n number: pr.number,\n topic: 'Reconfigure PR Results',\n content: prBody,\n });\n}\n\nfunction getDescriptionArray(config: RenovateConfig): string[] {\n logger.debug('getDescriptionArray()');\n logger.trace({ config });\n const desc = isArray(config.description, isString) ? config.description : [];\n return desc.concat(getScheduleDesc(config));\n}\n\nexport function getConfigDesc(config: RenovateConfig): string {\n logger.debug('getConfigDesc()');\n logger.trace({ config });\n const descriptionArr = getDescriptionArray(config);\n if (!descriptionArr.length) {\n logger.debug('No config description found');\n return '';\n }\n logger.debug(`Found description array with length:${descriptionArr.length}`);\n let desc = `\\n### Configuration Summary\\n\\nBased on the default config's presets, Renovate will:\\n\\n`;\n descriptionArr.forEach((d) => {\n desc += ` - ${d}\\n`;\n });\n desc += '\\n\\n---\\n';\n return desc;\n}\n"],"mappings":";;;;;;;;;;;AA2BA,MAAM,gBAAgB;CACpB;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,kCACP,cACQ;CACR,IAAI,oBAAoB;CAGxB,qBAAqB;;EAErB,aAAa,KAAK,YAAY,KAAK,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;;CAE3D,OAAO;AACT;AAEA,SAAS,6BACP,mBACA,UACQ;CACR,IAAI,SAAS;CACb,IAAI,SAAS,cACX,SAAS,GAAG,OAAO,QAAQ,qBAAqB,SAAS,YAAY,EAAE;MAEvE,SAAS,OAAO,QAAQ,uBAAuB,EAAE;CAEnD,SAAS,OAAO,QAAQ,gBAAgB,SAAS,MAAM;CACvD,SAAS,OAAO,QAAQ,kBAAkB,SAAS,QAAQ;CAC3D,SAAS,OAAO,QAAQ,gBAAgB,SAAS,MAAM;CACvD,SAAS,OAAO,QAAQ,oBAAoB,SAAS,UAAU;CAC/D,SAAS,OAAO,QAAQ,gBAAgB,SAAS,MAAM;CACvD,OAAO;AACT;AAEA,eAAsB,2BACpB,QACA,cACA,UACA,YACA,IACkB;CAClB,OAAO,MAAM,8BAA8B;CAC3C,OAAO,MAAM,EAAE,OAAO,CAAC;CAEvB,MAAM,mBAAmB,oBAAoB,YAAY;CACzD,IAAI,aAAa;CACjB,IAAI,aAAa,IAAI,QAAQ,GAC3B,OAAO,KAAK,+BAA+B,YAAY;MAEvD,aAAa,cAAc,MAAM;CAEnC,MAAM,WACJ,YAAY,MAAM,IAAI,2BAA2B,cAAe,MAAM;CACxE,MAAM,SAAS,UAAU,MAAM;CAC/B,MAAM,iBAAiB,kBAAkB,MAAM;CAC/C,MAAM,SAAS,kBAAkB,QAAQ,QAAQ;CAEjD,IAAI,SAAS,6BACX,kCAAkC,aAAa,GAC/C;EACE,cAAc;EACd,QAAQ;EACR,YAAY;EACZ;EACA;EACA;CACF,CACF;CAEA,IAAI,OAAO,SAAS,SAAS,cAAc,GAAG;EAC5C,OAAO,MACL,4FACF;EACA,MAAM,gBAAgB,yBAAyB,QAAQ,QAAQ;EAC/D,IAAI,kBAAkB;GACpB,MAAM,sBAAsB,iCAAiC,uBAAuB,YAAY;GAGhG,SAAS,6BACP,kCAAkC,qBAAqB,GACvD;IACE,cAAc;IACd,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR;IACA;GACF,CACF;EACF,OACE,SAAS,OAAO,QAAQ,QAAQ,aAAa;CAEjD;CAEA,OAAO,MAAM,YAAY,QAAQ;CAEjC,SAAS,SAAS,gBAAgB,MAAM;CAExC,IAAI,aAAa,IAAI,QAAQ,GAAG;EAC9B,OAAO,KAAK,+BAA+B;EAC3C,OAAO;CACT;CAEA,OAAO,MAAM,cAAc;EACzB,QAAQ,GAAG;EACX,OAAO;EACP,SAAS;CACX,CAAC;AACH;AAEA,SAAS,oBAAoB,QAAkC;CAC7D,OAAO,MAAM,uBAAuB;CACpC,OAAO,MAAM,EAAE,OAAO,CAAC;CAEvB,QADa,QAAQ,OAAO,aAAa,QAAQ,IAAI,OAAO,cAAc,CAAC,EAAA,CAC/D,OAAO,gBAAgB,MAAM,CAAC;AAC5C;AAEA,SAAgB,cAAc,QAAgC;CAC5D,OAAO,MAAM,iBAAiB;CAC9B,OAAO,MAAM,EAAE,OAAO,CAAC;CACvB,MAAM,iBAAiB,oBAAoB,MAAM;CACjD,IAAI,CAAC,eAAe,QAAQ;EAC1B,OAAO,MAAM,6BAA6B;EAC1C,OAAO;CACT;CACA,OAAO,MAAM,uCAAuC,eAAe,QAAQ;CAC3E,IAAI,OAAO;CACX,eAAe,SAAS,MAAM;EAC5B,QAAQ,OAAO,EAAE;CACnB,CAAC;CACD,QAAQ;CACR,OAAO;AACT"}
|
package/package.json
CHANGED
package/renovate-schema.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
-
"title": "JSON schema for Renovate 44.
|
|
3
|
+
"title": "JSON schema for Renovate 44.39.0 config files (https://renovatebot.com/)",
|
|
4
4
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
5
|
-
"x-renovate-version": "44.
|
|
5
|
+
"x-renovate-version": "44.39.0",
|
|
6
6
|
"allowComments": true,
|
|
7
7
|
"type": "object",
|
|
8
8
|
"definitions": {
|