renovate 43.106.0 → 43.107.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/config-description.js +1 -7
- package/dist/workers/repository/onboarding/pr/config-description.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/index.js +4 -0
- package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
- package/package.json +1 -1
- package/renovate-schema.json +2 -2
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { logger } from "../../../../logger/index.js";
|
|
2
|
-
import { emojify } from "../../../../util/emoji.js";
|
|
3
|
-
import { getDefaultConfigFileName } from "../common.js";
|
|
4
2
|
import { isArray, isString } from "@sindresorhus/is";
|
|
5
3
|
//#region lib/workers/repository/onboarding/pr/config-description.ts
|
|
6
4
|
function getScheduleDesc(config) {
|
|
@@ -18,7 +16,6 @@ function getDescriptionArray(config) {
|
|
|
18
16
|
return (isArray(config.description, isString) ? config.description : []).concat(getScheduleDesc(config));
|
|
19
17
|
}
|
|
20
18
|
function getConfigDesc(config, _packageFiles) {
|
|
21
|
-
const configFile = getDefaultConfigFileName();
|
|
22
19
|
logger.debug("getConfigDesc()");
|
|
23
20
|
logger.trace({ config });
|
|
24
21
|
const descriptionArr = getDescriptionArray(config);
|
|
@@ -32,10 +29,7 @@ function getConfigDesc(config, _packageFiles) {
|
|
|
32
29
|
descriptionArr.forEach((d) => {
|
|
33
30
|
desc += ` - ${d}\n`;
|
|
34
31
|
});
|
|
35
|
-
desc += "\n";
|
|
36
|
-
desc += emojify(`:abcd: Do you want to change how Renovate upgrades your dependencies?`);
|
|
37
|
-
desc += ` 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.`;
|
|
38
|
-
desc += "\n\n---\n";
|
|
32
|
+
desc += "\n---\n";
|
|
39
33
|
return desc;
|
|
40
34
|
}
|
|
41
35
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-description.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/pr/config-description.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\
|
|
1
|
+
{"version":3,"file":"config-description.js","names":[],"sources":["../../../../../lib/workers/repository/onboarding/pr/config-description.ts"],"sourcesContent":["import { isArray, isString } from '@sindresorhus/is';\nimport type { RenovateConfig } from '../../../../config/types.ts';\nimport { logger } from '../../../../logger/index.ts';\nimport type { PackageFile } from '../../../../modules/manager/types.ts';\n\nexport function getScheduleDesc(config: RenovateConfig): string[] {\n logger.debug('getScheduleDesc()');\n logger.trace({ config });\n if (\n !config.schedule ||\n (config.schedule as never) === 'at any time' ||\n config.schedule[0] === 'at any time'\n ) {\n logger.debug('No schedule');\n return [];\n }\n const desc = `Run Renovate on following schedule: ${String(config.schedule)}`;\n return [desc];\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(\n config: RenovateConfig,\n // TODO: remove unused parameter\n _packageFiles?: Record<string, PackageFile[]>,\n): 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 desc += ` - Start dependency updates only once this onboarding PR is merged\\n`;\n descriptionArr.forEach((d) => {\n desc += ` - ${d}\\n`;\n });\n desc += '\\n---\\n';\n return desc;\n}\n"],"mappings":";;;AAKA,SAAgB,gBAAgB,QAAkC;AAChE,QAAO,MAAM,oBAAoB;AACjC,QAAO,MAAM,EAAE,QAAQ,CAAC;AACxB,KACE,CAAC,OAAO,YACP,OAAO,aAAuB,iBAC/B,OAAO,SAAS,OAAO,eACvB;AACA,SAAO,MAAM,cAAc;AAC3B,SAAO,EAAE;;AAGX,QAAO,CADM,uCAAuC,OAAO,OAAO,SAAS,GAC9D;;AAGf,SAAS,oBAAoB,QAAkC;AAC7D,QAAO,MAAM,wBAAwB;AACrC,QAAO,MAAM,EAAE,QAAQ,CAAC;AAExB,SADa,QAAQ,OAAO,aAAa,SAAS,GAAG,OAAO,cAAc,EAAE,EAChE,OAAO,gBAAgB,OAAO,CAAC;;AAG7C,SAAgB,cACd,QAEA,eACQ;AACR,QAAO,MAAM,kBAAkB;AAC/B,QAAO,MAAM,EAAE,QAAQ,CAAC;CACxB,MAAM,iBAAiB,oBAAoB,OAAO;AAClD,KAAI,CAAC,eAAe,QAAQ;AAC1B,SAAO,MAAM,8BAA8B;AAC3C,SAAO;;AAET,QAAO,MAAM,uCAAuC,eAAe,SAAS;CAC5E,IAAI,OAAO;AACX,SAAQ;AACR,gBAAe,SAAS,MAAM;AAC5B,UAAQ,OAAO,EAAE;GACjB;AACF,SAAQ;AACR,QAAO"}
|
|
@@ -81,6 +81,10 @@ async function ensureOnboardingPr(config, packageFiles, branches) {
|
|
|
81
81
|
logger.debug("Filling in onboarding PR template");
|
|
82
82
|
let prTemplate = `Welcome to [Renovate](${config.productLinks.homepage})! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\n\n`;
|
|
83
83
|
prTemplate += config.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`);
|
|
84
|
+
const configFile = getDefaultConfigFileName();
|
|
85
|
+
prTemplate += emojify(`:abcd: Do you want to change how Renovate upgrades your dependencies?`);
|
|
86
|
+
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.`;
|
|
87
|
+
prTemplate += "\n\n";
|
|
84
88
|
prTemplate += emojify(`
|
|
85
89
|
|
|
86
90
|
---
|
|
@@ -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 { getExpectedPrList } 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 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 ${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 (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 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 { getExpectedPrList } 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 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\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 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 ${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 (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 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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"}
|
package/package.json
CHANGED
package/renovate-schema.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$id": "https://docs.renovatebot.com/renovate-schema.json",
|
|
3
|
-
"title": "JSON schema for Renovate 43.
|
|
3
|
+
"title": "JSON schema for Renovate 43.107.0 config files (https://renovatebot.com/)",
|
|
4
4
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
5
|
-
"x-renovate-version": "43.
|
|
5
|
+
"x-renovate-version": "43.107.0",
|
|
6
6
|
"allowComments": true,
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|