diff --git a/docs/usage/self-hosted-configuration.md b/docs/usage/self-hosted-configuration.md index f591bc8de80ea97848b9acc097982aa399f6c189..1df50e1478c423a136e08afbee35402df9b0910c 100644 --- a/docs/usage/self-hosted-configuration.md +++ b/docs/usage/self-hosted-configuration.md @@ -103,6 +103,10 @@ This option is useful for troubleshooting, particularly if using presets. e.g. r ## privateKey +## productLinks + +Override this object if you wish to change the URLs that Renovate links to, e.g. if you have an internal forum for asking for help. + ## repositories ## requireConfig diff --git a/lib/config/app-strings.ts b/lib/config/app-strings.ts index f8b18e54d20409e3e4f681da551db6f49b07ef58..bc3fb3f0c93d193a5a166058ca04fffbfeaca3ed 100644 --- a/lib/config/app-strings.ts +++ b/lib/config/app-strings.ts @@ -11,9 +11,3 @@ export const configFileNames = [ '.renovaterc.json', 'package.json', ]; - -export const urls = { - documentation: 'https://docs.renovatebot.com/', - help: 'https://github.com/renovatebot/config-help/issues', - homepage: 'https://renovatebot.com', -}; diff --git a/lib/config/definitions.ts b/lib/config/definitions.ts index 014d3b49bba7c13ebfde31a8727902e4c10fac8c..3ea310b5ddc065694c0c362dc794199ec99d73ac 100644 --- a/lib/config/definitions.ts +++ b/lib/config/definitions.ts @@ -1,4 +1,4 @@ -import { appName, appSlug, urls } from './app-strings'; +import { appName, appSlug } from './app-strings'; import { RenovateConfigStage } from './common'; export interface RenovateOptionBase { @@ -94,6 +94,22 @@ const options: RenovateOptions[] = [ admin: true, cli: false, }, + { + name: 'productLinks', + description: 'Links which are embedded within PRs, issues, etc', + type: 'object', + admin: true, + mergeable: true, + default: { + documentation: 'https://docs.renovatebot.com/', + help: 'https://github.com/renovatebot/config-help/issues', + homepage: 'https://github.com/renovatebot/renovate', + }, + additionalProperties: { + type: 'string', + format: 'uri', + }, + }, { name: 'extends', description: @@ -1213,7 +1229,7 @@ const options: RenovateOptions[] = [ name: 'prFooter', description: 'Pull Request footer template', type: 'string', - default: `This PR has been generated by [${appName} Bot](${urls.homepage}).`, + default: `This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).`, stage: 'global', }, { diff --git a/lib/platform/github/index.ts b/lib/platform/github/index.ts index 35daae3da5118a232f5918f7af1c658768f23f15..8ccb406abb89a63ad91e43e1523628e55d1f7349 100644 --- a/lib/platform/github/index.ts +++ b/lib/platform/github/index.ts @@ -15,12 +15,7 @@ import { VulnerabilityAlert, } from '../common'; -import { - appName, - appSlug, - configFileNames, - urls, -} from '../../config/app-strings'; +import { appName, appSlug, configFileNames } from '../../config/app-strings'; import { sanitize } from '../../util/sanitize'; import { smartTruncate } from '../utils/pr-body'; @@ -70,6 +65,7 @@ interface LocalRepoConfig { localDir: string; isGhe: boolean; renovateUsername: string; + productLinks: any; } type BranchProtection = any; @@ -1647,7 +1643,7 @@ export async function createPr( `${appSlug}/verify`, `${appName} verified pull request`, 'success', - urls.homepage + 'https://github.com/renovatebot/renovate' ); } pr.isModified = false; diff --git a/lib/workers/branch/status-checks.ts b/lib/workers/branch/status-checks.ts index e9dfc6c2b3584254e20a0c1f80802ae08ca35bbe..c96e15c54b2dd560866bcb1766f0955bf3cda8f9 100644 --- a/lib/workers/branch/status-checks.ts +++ b/lib/workers/branch/status-checks.ts @@ -1,5 +1,5 @@ import { logger } from '../../logger'; -import { appSlug, urls } from '../../config/app-strings'; +import { appSlug } from '../../config/app-strings'; import { RenovateConfig } from '../../config'; import { platform } from '../../platform'; @@ -7,7 +7,8 @@ async function setStatusCheck( branchName: string, context: string, description: string, - state: string + state: string, + url: string ): Promise<void> { const existingState = await platform.getBranchStatusCheck( branchName, @@ -23,7 +24,7 @@ async function setStatusCheck( context, description, state, - urls.documentation + url ); } } @@ -46,7 +47,8 @@ export async function setStability(config: StabilityConfig): Promise<void> { config.branchName, context, description, - config.stabilityStatus + config.stabilityStatus, + config.productLinks.documentation ); } @@ -68,5 +70,11 @@ export async function setUnpublishable( const description = config.canBeUnpublished ? 'Packages < 24 hours old can be unpublished' : 'Packages cannot be unpublished'; - await setStatusCheck(config.branchName, context, description, state); + await setStatusCheck( + config.branchName, + context, + description, + state, + config.productLinks.docs + ); } diff --git a/lib/workers/pr/body/config-description.js b/lib/workers/pr/body/config-description.js index e32f8d7e690f96688c4982a918109ca7ea4f8819..8b24f5d631607753fcf2b6f23016869b541f9456 100644 --- a/lib/workers/pr/body/config-description.js +++ b/lib/workers/pr/body/config-description.js @@ -1,4 +1,4 @@ -const { appName, urls } = require('../../../config/app-strings'); +const { appName } = require('../../../config/app-strings'); const { platform } = require('../../../platform'); const { emojify } = require('../../../util/emoji'); @@ -55,7 +55,7 @@ async function getPrConfigDescription(config) { } if (config.recreateClosed) { prBody += emojify( - `:ghost: **Immortal**: This PR will be recreated if closed unmerged. Get [config help](${urls.help}) if that's undesired.\n\n` + `:ghost: **Immortal**: This PR will be recreated if closed unmerged. Get [config help](${config.productLinks.help}) if that's undesired.\n\n` ); } else { prBody += emojify( diff --git a/lib/workers/repository/onboarding/pr/index.ts b/lib/workers/repository/onboarding/pr/index.ts index 5bdd613dffcd8707eade0af37a7836363f76b493..ca3d05b8e00b951112d5b98e2d5199dddda69707 100644 --- a/lib/workers/repository/onboarding/pr/index.ts +++ b/lib/workers/repository/onboarding/pr/index.ts @@ -5,7 +5,7 @@ import { getConfigDesc } from './config-description'; import { getErrors, getWarnings, getDepWarnings } from './errors-warnings'; import { getBaseBranchDesc } from './base-branch'; import { getPrList, BranchConfig } from './pr-list'; -import { appName, urls } from '../../../../config/app-strings'; +import { appName } from '../../../../config/app-strings'; import { emojify } from '../../../../util/emoji'; import { RenovateConfig } from '../../../../config'; import { PackageFile } from '../../../../manager/common'; @@ -22,7 +22,7 @@ export async function ensureOnboardingPr( logger.trace({ config }); const existingPr = await platform.getBranchPr(config.onboardingBranch); logger.debug('Filling in onboarding PR template'); - let prTemplate = `Welcome to [${appName}](${urls.homepage})! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\n\n`; + let prTemplate = `Welcome to [${appName}](${config.productLinks.homepage})! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\n\n`; prTemplate += config.requireConfig ? emojify( `:vertical_traffic_light: To activate ${appName}, merge this Pull Request. To disable ${appName}, simply close this Pull Request unmerged.\n\n` @@ -43,8 +43,8 @@ export async function ensureOnboardingPr( --- -:question: Got questions? Check out ${appName}'s [Docs](${urls.documentation}), particularly the Getting Started section. -If you need any further assistance then you can also [request help here](${urls.help}). +:question: Got questions? Check out ${appName}'s [Docs](${config.productLinks.documentation}), particularly the Getting Started section. +If you need any further assistance then you can also [request help here](${config.productLinks.help}). ` ); let prBody = prTemplate; @@ -68,7 +68,7 @@ If you need any further assistance then you can also [request help here](${urls. configDesc = getConfigDesc(config, packageFiles); } else { configDesc = emojify( - `### Configuration\n\n:abcd: ${appName} has detected a custom config for this PR. Feel free to ask for [help](${urls.help}) if you have any doubts and would like it reviewed.\n\n` + `### Configuration\n\n:abcd: ${appName} has detected a custom config for this PR. Feel free to ask for [help](${config.productLinks.help}) if you have any doubts and would like it reviewed.\n\n` ); if (existingPr.isConflicted) { configDesc += emojify( diff --git a/renovate-schema.json b/renovate-schema.json index 0b6d8d350c649f411ff59d61f9f58169bc7fb8a1..635161c21dbe3b394e2f68fcd464b01ebe31f1c3 100644 --- a/renovate-schema.json +++ b/renovate-schema.json @@ -13,6 +13,20 @@ "type": "string", "default": "Configure Renovate" }, + "productLinks": { + "description": "Links which are embedded within PRs, issues, etc", + "type": "object", + "default": { + "documentation": "https://docs.renovatebot.com/", + "help": "https://github.com/renovatebot/config-help/issues", + "homepage": "https://github.com/renovatebot/renovate" + }, + "additionalProperties": { + "type": "string", + "format": "uri" + }, + "$ref": "#" + }, "extends": { "description": "Configuration presets to use/extend. Note: does not work if configured in config.js", "type": "array", @@ -755,7 +769,7 @@ "prFooter": { "description": "Pull Request footer template", "type": "string", - "default": "This PR has been generated by [Renovate Bot](https://renovatebot.com)." + "default": "This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate)." }, "lockFileMaintenance": { "description": "Configuration for lock file maintenance", diff --git a/test/platform/github/__snapshots__/index.spec.ts.snap b/test/platform/github/__snapshots__/index.spec.ts.snap index 7bf58d6ea3923cd05173e11ab0b52efb50e9f96e..cbf78d72c5c3450a1263cb53ed099f6b05856c28 100644 --- a/test/platform/github/__snapshots__/index.spec.ts.snap +++ b/test/platform/github/__snapshots__/index.spec.ts.snap @@ -73,7 +73,7 @@ Array [ "context": "renovate/verify", "description": "Renovate verified pull request", "state": "success", - "target_url": "https://renovatebot.com", + "target_url": "https://github.com/renovatebot/renovate", }, }, ],