renovate 42.76.4 → 42.77.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.
@@ -1527,8 +1527,10 @@ function massageMarkdown(input) {
1527
1527
  .replace((0, regex_1.regEx)(/]\(https:\/\/github\.com\//g), '](https://redirect.github.com/')
1528
1528
  .replace((0, regex_1.regEx)(/]: https:\/\/github\.com\//g), ']: https://redirect.github.com/')
1529
1529
  .replaceAll('> ℹ **Note**\n> \n', '> [!NOTE]\n')
1530
+ .replaceAll('> ℹ️ **Note**\n> \n', '> [!NOTE]\n')
1530
1531
  .replaceAll('> ⚠ **Warning**\n> \n', '> [!WARNING]\n')
1531
1532
  .replaceAll('> ⚠️ **Warning**\n> \n', '> [!WARNING]\n')
1533
+ .replaceAll('> ❗ **Caution**\n> \n', '> [!CAUTION]\n')
1532
1534
  .replaceAll('> ❗ **Important**\n> \n', '> [!IMPORTANT]\n');
1533
1535
  return (0, pr_body_1.smartTruncate)(massagedInput, maxBodyLength());
1534
1536
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/github/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport { isArray, isNonEmptyObject, isNonEmptyString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { GlobalConfig } from '../../../config/global';\nimport {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n REPOSITORY_FORKED,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_RENAMED,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus, VulnerabilityAlert } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { isGithubFineGrainedPersonalAccessToken } from '../../../util/check-token';\nimport { coerceToNull } from '../../../util/coerce';\nimport { parseJson } from '../../../util/common';\nimport { getEnv } from '../../../util/env';\nimport * as git from '../../../util/git';\nimport { listCommitTree, pushCommitToRenovateRef } from '../../../util/git';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LongCommitSha,\n} from '../../../util/git/types';\nimport * as hostRules from '../../../util/host-rules';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { repoCacheProvider } from '../../../util/http/cache/repository-http-cache-provider';\nimport * as githubHttp from '../../../util/http/github';\nimport type { GithubHttpOptions } from '../../../util/http/github';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { coerceObject } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { fromBase64, looseEquals } from '../../../util/string';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { incLimitedValue } from '../../../workers/global/limits';\nimport type {\n AggregatedVulnerabilities,\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n MergePRConfig,\n PlatformParams,\n PlatformPrOptions,\n PlatformResult,\n Pr,\n ReattemptPlatformAutomergeConfig,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { normalizeNamePerEcosystem } from '../utils/github-alerts';\nimport { smartTruncate } from '../utils/pr-body';\nimport { remoteBranchExists } from './branch';\nimport { coerceRestPr, githubApi, mapMergeStartegy } from './common';\nimport {\n enableAutoMergeMutation,\n getIssuesQuery,\n repoInfoQuery,\n} from './graphql';\nimport { GithubIssueCache, GithubIssue as Issue } from './issue';\nimport { massageMarkdownLinks } from './massage-markdown-links';\nimport { getPrCache, updatePrCache } from './pr';\nimport {\n GithubBranchProtection,\n GithubBranchRulesets,\n GithubVulnerabilityAlert,\n} from './schema';\nimport type {\n CombinedBranchStatus,\n Comment,\n GhAutomergeResponse,\n GhBranchStatus,\n GhPr,\n GhRepo,\n GhRestPr,\n GhRestRepo,\n LocalRepoConfig,\n PlatformConfig,\n} from './types';\nimport { getAppDetails, getUserDetails, getUserEmail } from './user';\n\nexport const id = 'github';\n\nlet config: LocalRepoConfig;\nlet platformConfig: PlatformConfig;\n\n// GitHub's max is 60k but in the hosted app we've observed that content-length is ~1k longer\nconst GitHubMaxPrBodyLen = 58000;\n\nexport function resetConfigs(): void {\n config = {} as never;\n platformConfig = {\n hostType: 'github',\n endpoint: 'https://api.github.com/',\n };\n}\n\nresetConfigs();\n\nfunction escapeHash(input: string): string {\n return input?.replace(regEx(/#/g), '%23');\n}\n\nexport function isGHApp(): boolean {\n return !!platformConfig.isGHApp;\n}\n\nexport async function detectGhe(token: string): Promise<void> {\n platformConfig.isGhe =\n URL.parse(platformConfig.endpoint).host !== 'api.github.com';\n if (platformConfig.isGhe) {\n const gheHeaderKey = 'x-github-enterprise-version';\n const gheQueryRes = await githubApi.headJson('/', { token });\n const gheHeaders = coerceObject(gheQueryRes?.headers);\n const [, gheVersion] =\n Object.entries(gheHeaders).find(\n ([k]) => k.toLowerCase() === gheHeaderKey,\n ) ?? [];\n platformConfig.gheVersion = semver.valid(gheVersion as string) ?? null;\n logger.debug(\n `Detected GitHub Enterprise Server, version: ${platformConfig.gheVersion}`,\n );\n }\n}\n\nexport async function initPlatform({\n endpoint,\n token: originalToken,\n username,\n gitAuthor,\n}: PlatformParams): Promise<PlatformResult> {\n let token = originalToken;\n if (!token) {\n throw new Error('Init: You must configure a GitHub token');\n }\n token = token.replace(/^ghs_/, 'x-access-token:ghs_');\n platformConfig.isGHApp = token.startsWith('x-access-token:');\n\n if (endpoint) {\n platformConfig.endpoint = ensureTrailingSlash(endpoint);\n githubHttp.setBaseUrl(platformConfig.endpoint);\n } else {\n logger.debug('Using default github endpoint: ' + platformConfig.endpoint);\n }\n\n await detectGhe(token);\n /**\n * GHE requires version >=3.10 to support fine-grained access tokens\n * https://docs.github.com/en/enterprise-server@3.10/admin/release-notes#authentication\n */\n if (\n isGithubFineGrainedPersonalAccessToken(token) &&\n platformConfig.isGhe &&\n (!platformConfig.gheVersion ||\n semver.lt(platformConfig.gheVersion, '3.10.0'))\n ) {\n throw new Error(\n 'Init: Fine-grained Personal Access Tokens do not support GitHub Enterprise Server API version <3.10 and cannot be used with Renovate.',\n );\n }\n\n let renovateUsername: string;\n if (username) {\n renovateUsername = username;\n } else if (platformConfig.isGHApp) {\n platformConfig.userDetails ??= await getAppDetails(token);\n renovateUsername = platformConfig.userDetails.username;\n } else {\n platformConfig.userDetails ??= await getUserDetails(\n platformConfig.endpoint,\n token,\n );\n renovateUsername = platformConfig.userDetails.username;\n }\n let discoveredGitAuthor: string | undefined;\n if (!gitAuthor) {\n if (platformConfig.isGHApp) {\n platformConfig.userDetails ??= await getAppDetails(token);\n const ghHostname = platformConfig.isGhe\n ? URL.parse(platformConfig.endpoint).hostname\n : 'github.com';\n discoveredGitAuthor = `${platformConfig.userDetails.name} <${platformConfig.userDetails.id}+${platformConfig.userDetails.username}@users.noreply.${ghHostname}>`;\n } else {\n platformConfig.userDetails ??= await getUserDetails(\n platformConfig.endpoint,\n token,\n );\n platformConfig.userEmail ??= await getUserEmail(\n platformConfig.endpoint,\n token,\n );\n if (platformConfig.userEmail) {\n discoveredGitAuthor = `${platformConfig.userDetails.name} <${platformConfig.userEmail}>`;\n }\n }\n }\n logger.debug({ platformConfig, renovateUsername }, 'Platform config');\n const platformResult: PlatformResult = {\n endpoint: platformConfig.endpoint,\n gitAuthor: gitAuthor ?? discoveredGitAuthor,\n renovateUsername,\n token,\n };\n if (\n getEnv().RENOVATE_X_GITHUB_HOST_RULES &&\n platformResult.endpoint === 'https://api.github.com/'\n ) {\n logger.debug('Adding GitHub token as GHCR password');\n platformResult.hostRules = [\n {\n matchHost: 'ghcr.io',\n hostType: 'docker',\n username: 'USERNAME',\n password: token.replace(/^x-access-token:/, ''),\n },\n ];\n logger.debug('Adding GitHub token as npm.pkg.github.com Basic token');\n platformResult.hostRules.push({\n matchHost: 'npm.pkg.github.com',\n hostType: 'npm',\n token: token.replace(/^x-access-token:/, ''),\n });\n const usernamePasswordHostTypes = ['rubygems', 'maven', 'nuget'];\n for (const hostType of usernamePasswordHostTypes) {\n logger.debug(\n `Adding GitHub token as ${hostType}.pkg.github.com password`,\n );\n platformResult.hostRules.push({\n hostType,\n matchHost: `${hostType}.pkg.github.com`,\n username: renovateUsername,\n password: token.replace(/^x-access-token:/, ''),\n });\n }\n }\n return platformResult;\n}\n\nasync function fetchRepositories(): Promise<GhRestRepo[]> {\n try {\n if (isGHApp()) {\n const res = await githubApi.getJsonUnchecked<{\n repositories: GhRestRepo[];\n }>(`installation/repositories?per_page=100`, {\n paginationField: 'repositories',\n paginate: 'all',\n });\n return res.body.repositories;\n } else {\n const res = await githubApi.getJsonUnchecked<GhRestRepo[]>(\n `user/repos?per_page=100`,\n { paginate: 'all' },\n );\n return res.body;\n }\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, `GitHub getRepos error`);\n throw err;\n }\n}\n\n// Get all repositories that the user has access to\nexport async function getRepos(config?: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Autodiscovering GitHub repositories');\n const nonEmptyRepositories = (await fetchRepositories()).filter(\n isNonEmptyObject,\n );\n const nonArchivedRepositories = nonEmptyRepositories.filter(\n (repo) => !repo.archived,\n );\n if (nonArchivedRepositories.length < nonEmptyRepositories.length) {\n logger.debug(\n `Filtered out ${\n nonEmptyRepositories.length - nonArchivedRepositories.length\n } archived repositories`,\n );\n }\n if (!config?.topics) {\n return nonArchivedRepositories.map((repo) => repo.full_name);\n }\n\n logger.debug({ topics: config.topics }, 'Filtering by topics');\n const topicRepositories = nonArchivedRepositories.filter((repo) =>\n repo.topics?.some((topic) => config?.topics?.includes(topic)),\n );\n\n if (topicRepositories.length < nonArchivedRepositories.length) {\n logger.debug(\n `Filtered out ${\n nonArchivedRepositories.length - topicRepositories.length\n } repositories not matching topic filters`,\n );\n }\n return topicRepositories.map((repo) => repo.full_name);\n}\n\nasync function getBranchProtection(\n branchName: string,\n): Promise<GithubBranchProtection> {\n if (config.parentRepo) {\n return {};\n }\n\n const res = await githubApi.getJson(\n `repos/${config.repository}/branches/${escapeHash(branchName)}/protection`,\n { cacheProvider: repoCacheProvider },\n GithubBranchProtection,\n );\n return res.body;\n}\n\nasync function getBranchRulesets(\n branchName: string,\n): Promise<GithubBranchRulesets> {\n if (config.parentRepo) {\n return [];\n }\n\n try {\n const res = await githubApi.getJson(\n `repos/${config.repository}/rules/branches/${escapeHash(branchName)}`,\n { cacheProvider: repoCacheProvider },\n GithubBranchRulesets,\n );\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(`No branch rulesets found for ${branchName}`);\n return [];\n }\n throw err;\n }\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n const repo = repoName ?? config.repository;\n\n // only use cache for the same org\n const httpOptions: GithubHttpOptions = {};\n const isSameOrg = repo?.split('/')?.[0] === config.repositoryOwner;\n if (isSameOrg) {\n httpOptions.cacheProvider = repoCacheProvider;\n }\n\n let url = `repos/${repo}/contents/${fileName}`;\n if (branchOrTag) {\n url += `?ref=` + branchOrTag;\n }\n const res = await githubApi.getJsonUnchecked<{ content: string }>(\n url,\n httpOptions,\n );\n const buf = res.body.content;\n const str = fromBase64(buf);\n return str;\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function listForks(\n token: string,\n repository: string,\n): Promise<GhRestRepo[]> {\n try {\n // Get list of existing repos\n const url = `repos/${repository}/forks?per_page=100`;\n const repos = (\n await githubApi.getJsonUnchecked<GhRestRepo[]>(url, {\n token,\n paginate: true,\n pageLimit: 100,\n })\n ).body;\n logger.debug(`Found ${repos.length} forked repo(s)`);\n return repos;\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug('Cannot list repo forks - it is likely private');\n } else {\n logger.debug({ err }, 'Unknown error listing repository forks');\n }\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n}\n\nexport async function findFork(\n token: string,\n repository: string,\n forkOrg?: string,\n): Promise<GhRestRepo | null> {\n const forks = await listForks(token, repository);\n if (forkOrg) {\n logger.debug(`Searching for forked repo in forkOrg (${forkOrg})`);\n const forkedRepo = forks.find((repo) => repo.owner.login === forkOrg);\n if (forkedRepo) {\n logger.debug(`Found repo in forkOrg: ${forkedRepo.full_name}`);\n return forkedRepo;\n }\n logger.debug(`No repo found in forkOrg`);\n }\n logger.debug(`Searching for forked repo in user account`);\n try {\n const { username } = await getUserDetails(platformConfig.endpoint, token);\n const forkedRepo = forks.find((repo) => repo.owner.login === username);\n if (forkedRepo) {\n logger.debug(`Found repo in user account: ${forkedRepo.full_name}`);\n return forkedRepo;\n }\n } catch {\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n logger.debug(`No repo found in user account`);\n return null;\n}\n\nexport async function createFork(\n token: string,\n repository: string,\n forkOrg?: string,\n): Promise<GhRestRepo> {\n let forkedRepo: GhRestRepo | undefined;\n try {\n forkedRepo = (\n await githubApi.postJson<GhRestRepo>(`repos/${repository}/forks`, {\n token,\n body: {\n organization: forkOrg ?? undefined,\n name: config.parentRepo!.replace('/', '-_-'),\n default_branch_only: true, // no baseBranchPatterns support yet\n },\n })\n ).body;\n } catch (err) {\n logger.debug({ err }, 'Error creating fork');\n }\n if (!forkedRepo) {\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n logger.info({ forkedRepo: forkedRepo.full_name }, 'Created forked repo');\n logger.debug(`Sleeping 30s after creating fork`);\n await setTimeout(30000);\n return forkedRepo;\n}\n\n// Initialize GitHub by getting base branch and SHA\nexport async function initRepo({\n repository,\n forkCreation,\n forkOrg,\n forkToken,\n renovateUsername,\n cloneSubmodules,\n cloneSubmodulesFilter,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n // config is used by the platform api itself, not necessary for the app layer to know\n config = {\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor', false),\n } as any;\n const opts = hostRules.find({\n hostType: 'github',\n url: platformConfig.endpoint,\n readOnly: true,\n });\n config.renovateUsername = renovateUsername;\n [config.repositoryOwner, config.repositoryName] = repository.split('/');\n let repo: GhRepo | undefined;\n try {\n let infoQuery = repoInfoQuery;\n\n // GitHub Enterprise Server <3.3.0 doesn't support autoMergeAllowed and hasIssuesEnabled objects\n // TODO #22198\n if (\n platformConfig.isGhe &&\n // semver not null safe, accepts null and undefined\n semver.satisfies(platformConfig.gheVersion!, '<3.3.0')\n ) {\n infoQuery = infoQuery.replace(/\\n\\s*autoMergeAllowed\\s*\\n/, '\\n');\n infoQuery = infoQuery.replace(/\\n\\s*hasIssuesEnabled\\s*\\n/, '\\n');\n }\n\n // GitHub Enterprise Server <3.9.0 doesn't support hasVulnerabilityAlertsEnabled objects\n if (\n platformConfig.isGhe &&\n // semver not null safe, accepts null and undefined\n semver.satisfies(platformConfig.gheVersion!, '<3.9.0')\n ) {\n infoQuery = infoQuery.replace(\n /\\n\\s*hasVulnerabilityAlertsEnabled\\s*\\n/,\n '\\n',\n );\n }\n\n const res = await githubApi.requestGraphql<{\n repository: GhRepo;\n }>(infoQuery, {\n variables: {\n owner: config.repositoryOwner,\n name: config.repositoryName,\n ...(!config.ignorePrAuthor && { user: renovateUsername }),\n },\n readOnly: true,\n });\n\n if (res?.errors) {\n if (res.errors.find((err) => err.type === 'RATE_LIMITED')) {\n logger.debug({ res }, 'GraphQL rate limit exceeded.');\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n logger.debug({ res }, 'Unexpected GraphQL errors');\n throw new Error(PLATFORM_UNKNOWN_ERROR);\n }\n\n repo = res?.data?.repository;\n /* v8 ignore next */\n if (!repo) {\n logger.debug({ res }, 'No repository returned');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n /* v8 ignore next */\n if (!repo.defaultBranchRef?.name) {\n logger.debug(\n { res },\n 'No default branch returned - treating repo as empty',\n );\n throw new Error(REPOSITORY_EMPTY);\n }\n if (\n repo.nameWithOwner &&\n repo.nameWithOwner.toUpperCase() !== repository.toUpperCase()\n ) {\n logger.debug(\n { desiredRepo: repository, foundRepo: repo.nameWithOwner },\n 'Repository has been renamed',\n );\n throw new Error(REPOSITORY_RENAMED);\n }\n if (repo.isArchived) {\n logger.debug(\n 'Repository is archived - throwing error to abort renovation',\n );\n throw new Error(REPOSITORY_ARCHIVED);\n }\n // Use default branch as PR target unless later overridden.\n config.defaultBranch = repo.defaultBranchRef.name;\n // Base branch may be configured but defaultBranch is always fixed\n logger.debug(`${repository} default branch = ${config.defaultBranch}`);\n // GitHub allows administrators to block certain types of merge, so we need to check it\n if (repo.squashMergeAllowed) {\n config.mergeMethod = 'squash';\n } else if (repo.mergeCommitAllowed) {\n config.mergeMethod = 'merge';\n } else if (repo.rebaseMergeAllowed) {\n config.mergeMethod = 'rebase';\n } else {\n // This happens if we don't have Administrator read access, it is not a critical error\n logger.debug('Could not find allowed merge methods for repo');\n }\n config.autoMergeAllowed = repo.autoMergeAllowed;\n config.hasIssuesEnabled = repo.hasIssuesEnabled;\n config.hasVulnerabilityAlertsEnabled = repo.hasVulnerabilityAlertsEnabled;\n\n const recentIssues = Issue.array()\n .catch([])\n .parse(res?.data?.repository?.issues?.nodes);\n GithubIssueCache.addIssuesToReconcile(recentIssues);\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, 'Caught initRepo error');\n if (\n err.message === REPOSITORY_ARCHIVED ||\n err.message === REPOSITORY_RENAMED ||\n err.message === REPOSITORY_NOT_FOUND\n ) {\n throw err;\n }\n if (err.statusCode === 403) {\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n if (err.statusCode === 404) {\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n if (err.message.startsWith('Repository access blocked')) {\n throw new Error(REPOSITORY_BLOCKED);\n }\n if (err.message === REPOSITORY_FORK_MODE_FORKED) {\n throw err;\n }\n if (err.message === REPOSITORY_FORKED) {\n throw err;\n }\n if (err.message === REPOSITORY_DISABLED) {\n throw err;\n }\n if (err.message === 'Response code 451 (Unavailable for Legal Reasons)') {\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n logger.debug({ err }, 'Unknown GitHub initRepo error');\n throw err;\n }\n // This shouldn't be necessary, but occasional strange errors happened until it was added\n config.prList = null;\n\n if (forkToken) {\n logger.debug('Bot is in fork mode');\n if (repo.isFork) {\n logger.debug(\n `Forked repos cannot be processed when running with a forkToken, so this repo will be skipped`,\n );\n logger.debug(\n `Parent repo for this forked repo is ${repo.parent?.nameWithOwner}`,\n );\n throw new Error(REPOSITORY_FORKED);\n }\n config.forkOrg = forkOrg;\n config.forkToken = forkToken;\n // save parent name then delete\n config.parentRepo = config.repository;\n config.repository = null;\n let forkedRepo = await findFork(forkToken, repository, forkOrg);\n if (forkedRepo) {\n config.repository = forkedRepo.full_name;\n const forkDefaultBranch = forkedRepo.default_branch;\n if (forkDefaultBranch !== config.defaultBranch) {\n const body = {\n ref: `refs/heads/${config.defaultBranch}`,\n sha: repo.defaultBranchRef.target.oid,\n };\n logger.debug(\n {\n defaultBranch: config.defaultBranch,\n forkDefaultBranch,\n body,\n },\n 'Fork has different default branch to parent, attempting to create branch',\n );\n try {\n await githubApi.postJson(`repos/${config.repository}/git/refs`, {\n body,\n token: forkToken,\n });\n logger.debug('Created new default branch in fork');\n } catch (err) /* v8 ignore next */ {\n if (err.response?.body?.message === 'Reference already exists') {\n logger.debug(\n `Branch ${config.defaultBranch} already exists in the fork`,\n );\n } else {\n logger.warn(\n { err, body: err.response?.body },\n 'Could not create parent defaultBranch in fork',\n );\n }\n }\n logger.debug(\n `Setting ${config.defaultBranch} as default branch for ${config.repository}`,\n );\n try {\n await githubApi.patchJson(`repos/${config.repository}`, {\n body: {\n name: config.repository.split('/')[1],\n default_branch: config.defaultBranch,\n },\n token: forkToken,\n });\n logger.debug('Successfully changed default branch for fork');\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Could not set default branch');\n }\n }\n } else if (forkCreation) {\n logger.debug('Forked repo is not found - attempting to create it');\n forkedRepo = await createFork(forkToken, repository, forkOrg);\n config.repository = forkedRepo.full_name;\n } else {\n logger.debug('Forked repo is not found and forkCreation is disabled');\n throw new Error(REPOSITORY_FORK_MISSING);\n }\n }\n\n const parsedEndpoint = URL.parse(platformConfig.endpoint);\n if (forkToken) {\n logger.debug('Using forkToken for git init');\n parsedEndpoint.auth = coerceToNull(config.forkToken);\n } /* v8 ignore next */ else {\n const tokenType = opts.token?.startsWith('x-access-token:')\n ? 'app'\n : 'personal access';\n logger.debug(`Using ${tokenType} token for git init`);\n parsedEndpoint.auth = opts.token ?? null;\n }\n // TODO: null checks (#22198)\n parsedEndpoint.host = parsedEndpoint.host!.replace(\n 'api.github.com',\n 'github.com',\n );\n parsedEndpoint.pathname = `${config.repository}.git`;\n const url = URL.format(parsedEndpoint);\n let upstreamUrl = undefined;\n if (forkCreation && config.parentRepo) {\n parsedEndpoint.pathname = config.parentRepo + '.git';\n upstreamUrl = URL.format(parsedEndpoint);\n }\n await git.initRepo({\n ...config,\n url,\n upstreamUrl,\n });\n const repoConfig: RepoResult = {\n defaultBranch: config.defaultBranch,\n isFork: repo.isFork === true,\n repoFingerprint: repoFingerprint(repo.id, platformConfig.endpoint),\n };\n return repoConfig;\n}\n\nasync function checkRulesetsForForceRebase(\n branchName: string,\n): Promise<boolean> {\n try {\n const rulesets = await getBranchRulesets(branchName);\n logger.trace(\n `Ruleset: Found ${rulesets.length} rulesets for branch ${branchName}`,\n );\n\n return rulesets.some((rule) => {\n if (\n rule.type === 'required_status_checks' &&\n rule.parameters?.strict_required_status_checks_policy === true\n ) {\n logger.debug(\n `Ruleset: strict required status checks found for ${branchName}`,\n );\n return true;\n }\n\n return false;\n });\n } catch (err) {\n handleBranchProtectionError('rulesets', err, branchName);\n return false;\n }\n}\n\nasync function checkBranchProtectionForForceRebase(\n branchName: string,\n): Promise<boolean> {\n try {\n const branchProtection = await getBranchProtection(branchName);\n logger.trace(`Found branch protection for branch ${branchName}`);\n\n const strictStatusChecks = branchProtection?.required_status_checks?.strict;\n if (strictStatusChecks) {\n logger.debug(\n `Branch protection: PRs must be up-to-date before merging for ${branchName}`,\n );\n return true;\n }\n return false;\n } catch (err) {\n handleBranchProtectionError('branch-protection', err, branchName);\n return false;\n }\n}\n\nexport async function getBranchForceRebase(\n branchName: string,\n): Promise<boolean> {\n config.branchForceRebase ??= {};\n\n const cachedResult = config.branchForceRebase[branchName];\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n // Initialize to false before checking branch protection\n config.branchForceRebase[branchName] = false;\n\n // Check rulesets first (newer API)\n const hasRulesetForceRebase = await checkRulesetsForForceRebase(branchName);\n if (hasRulesetForceRebase) {\n config.branchForceRebase[branchName] = true;\n return true;\n }\n\n // Fall back to legacy branch protection\n const hasBranchProtectionForceRebase =\n await checkBranchProtectionForForceRebase(branchName);\n if (hasBranchProtectionForceRebase) {\n config.branchForceRebase[branchName] = true;\n }\n\n return config.branchForceRebase[branchName];\n}\n\nfunction handleBranchProtectionError(\n protection: 'branch-protection' | 'rulesets',\n err: any,\n branchName: string,\n): void {\n if (err.statusCode === 404) {\n logger.debug(`No ${protection} found for ${branchName}`);\n return;\n }\n\n const isUnauthorized =\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED || err.statusCode === 403;\n\n if (isUnauthorized) {\n logger.once.debug(\n `Branch protection: Do not have permissions to detect ${protection} for ${branchName}`,\n );\n return;\n }\n\n throw err;\n}\n\nfunction cachePr(pr?: GhPr | null): void {\n config.prList ??= [];\n if (pr) {\n updatePrCache(pr);\n for (let idx = 0; idx < config.prList.length; idx += 1) {\n const cachedPr = config.prList[idx];\n if (cachedPr.number === pr.number) {\n config.prList[idx] = pr;\n return;\n }\n }\n config.prList.push(pr);\n }\n}\n\n// Fetch fresh Pull Request and cache it when possible\nasync function fetchPr(prNo: number): Promise<GhPr | null> {\n try {\n const { body: ghRestPr } = await githubApi.getJsonUnchecked<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls/${prNo}`,\n );\n const result = coerceRestPr(ghRestPr);\n cachePr(result);\n return result;\n } catch (err) {\n logger.warn({ err, prNo }, `GitHub fetchPr error`);\n return null;\n }\n}\n\n// Gets details for a PR\nexport async function getPr(prNo: number): Promise<GhPr | null> {\n if (!prNo) {\n return null;\n }\n const prList = await getPrList();\n let pr = prList.find(({ number }) => number === prNo) ?? null;\n if (pr) {\n logger.debug('Returning PR from cache');\n }\n pr ??= await fetchPr(prNo);\n return pr;\n}\n\nfunction matchesState(state: string, desiredState: string): boolean {\n if (desiredState === 'all') {\n return true;\n }\n if (desiredState.startsWith('!')) {\n return state !== desiredState.substring(1);\n }\n return state === desiredState;\n}\n\nexport async function getPrList(): Promise<GhPr[]> {\n if (!config.prList) {\n const repo = config.parentRepo ?? config.repository;\n\n let username = config.renovateUsername;\n if (config.forkToken || config.ignorePrAuthor) {\n username = undefined;\n }\n\n // TODO: check null `repo` (#22198)\n const prCache = await getPrCache(githubApi, repo!, username);\n config.prList = Object.values(prCache).sort(\n ({ number: a }, { number: b }) => b - a,\n );\n }\n\n return config.prList;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n includeOtherAuthors,\n}: FindPRConfig): Promise<GhPr | null> {\n logger.debug(`findPr(${branchName}, ${prTitle}, ${state})`);\n\n if (includeOtherAuthors) {\n const repo = config.parentRepo ?? config.repository;\n const org = repo?.split('/')[0];\n // PR might have been created by anyone, so don't use the cached Renovate PR list\n const { body: prList } = await githubApi.getJsonUnchecked<GhRestPr[]>(\n `repos/${repo}/pulls?head=${org}:${branchName}&state=open`,\n { cacheProvider: repoCacheProvider },\n );\n\n if (!prList.length) {\n logger.debug(`No PR found for branch ${branchName}`);\n return null;\n }\n\n return coerceRestPr(prList[0]);\n }\n\n const prList = await getPrList();\n const pr = prList.find((p) => {\n if (p.sourceBranch !== branchName) {\n return false;\n }\n\n if (prTitle && prTitle.toUpperCase() !== p.title.toUpperCase()) {\n return false;\n }\n\n if (!matchesState(p.state, state)) {\n return false;\n }\n\n if (!config.forkToken && !looseEquals(config.repository, p.sourceRepo)) {\n return false;\n }\n\n return true;\n });\n if (pr) {\n logger.debug(`Found PR #${pr.number}`);\n }\n return pr ?? null;\n}\n\nasync function ensureBranchSha(\n branchName: string,\n sha: LongCommitSha,\n): Promise<void> {\n const repository = config.repository!;\n try {\n const commitUrl = `/repos/${repository}/git/commits/${sha}`;\n await githubApi.head(commitUrl, { memCache: false });\n } catch (err) {\n logger.error({ err, sha, branchName }, 'Commit not found');\n throw err;\n }\n\n const refUrl = `/repos/${config.repository}/git/refs/heads/${branchName}`;\n const branchExists = await remoteBranchExists(repository, branchName);\n\n if (branchExists) {\n try {\n await githubApi.patchJson(refUrl, { body: { sha, force: true } });\n return;\n } catch (err) {\n if (err.err?.response?.statusCode === 422) {\n logger.debug(\n { err },\n 'Branch update failed due to reference not existing - will try to create',\n );\n } else {\n logger.warn({ refUrl, err }, 'Error updating branch');\n throw err;\n }\n }\n }\n\n await githubApi.postJson(`/repos/${repository}/git/refs`, {\n body: { sha, ref: `refs/heads/${branchName}` },\n });\n}\n\n// Returns the Pull Request for a branch. Null if not exists.\nexport async function getBranchPr(branchName: string): Promise<GhPr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n\n const openPr = await findPr({\n branchName,\n state: 'open',\n });\n\n if (openPr) {\n return openPr;\n }\n\n return null;\n}\n\nexport async function tryReuseAutoclosedPr(\n autoclosedPr: Pr,\n newTitle: string,\n): Promise<Pr | null> {\n const { sha, number, sourceBranch: branchName } = autoclosedPr;\n try {\n await ensureBranchSha(branchName, sha!);\n logger.debug(`Recreated autoclosed branch ${branchName} with sha ${sha}`);\n } catch (err) {\n logger.debug(\n { err, branchName, sha, autoclosedPr },\n 'Could not recreate autoclosed branch - skipping reopen',\n );\n return null;\n }\n\n try {\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.repository}/pulls/${number}`,\n {\n body: {\n state: 'open',\n title: newTitle,\n },\n },\n );\n logger.info(\n { branchName, oldTitle: autoclosedPr.title, newTitle, number },\n 'Successfully reopened autoclosed PR',\n );\n\n const result = coerceRestPr(ghPr);\n\n const localSha = git.getBranchCommit(branchName);\n if (localSha && localSha !== sha) {\n await git.forcePushToRemote(branchName, 'origin');\n result.sha = localSha;\n }\n\n cachePr(result);\n return result;\n } catch {\n logger.debug('Could not reopen autoclosed PR');\n return null;\n }\n}\n\nasync function getStatus(\n branchName: string,\n useCache = true,\n): Promise<CombinedBranchStatus> {\n const branch = escapeHash(branchName);\n const url = `repos/${config.repository}/commits/${branch}/status`;\n\n const { body: status } =\n await githubApi.getJsonUnchecked<CombinedBranchStatus>(url, {\n memCache: useCache,\n cacheProvider: repoCacheProvider,\n });\n\n return status;\n}\n\n// Returns the combined status for a branch.\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n let commitStatus: CombinedBranchStatus;\n try {\n commitStatus = await getStatus(branchName);\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug(\n 'Received 404 when checking branch status, assuming that branch has been deleted',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.debug('Unknown error when checking branch status');\n throw err;\n }\n logger.debug(\n { state: commitStatus.state, statuses: commitStatus.statuses },\n 'branch status check result',\n );\n if (commitStatus.statuses && !internalChecksAsSuccess) {\n commitStatus.statuses = commitStatus.statuses.filter(\n (status) =>\n status.state !== 'success' || !status.context?.startsWith('renovate/'),\n );\n if (!commitStatus.statuses.length) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n commitStatus.state = 'pending';\n }\n }\n let checkRuns: { name: string; status: string; conclusion: string }[] = [];\n // API is supported in oldest available GHE version 2.19\n try {\n const checkRunsUrl = `repos/${config.repository}/commits/${escapeHash(\n branchName,\n )}/check-runs?per_page=100`;\n const opts = {\n headers: {\n accept: 'application/vnd.github.antiope-preview+json',\n },\n paginate: true,\n paginationField: 'check_runs',\n cacheProvider: memCacheProvider,\n };\n const checkRunsRaw = (\n await githubApi.getJsonUnchecked<{\n check_runs: { name: string; status: string; conclusion: string }[];\n }>(checkRunsUrl, opts)\n ).body;\n if (checkRunsRaw.check_runs?.length) {\n checkRuns = checkRunsRaw.check_runs.map((run) => ({\n name: run.name,\n status: run.status,\n conclusion: run.conclusion,\n }));\n logger.debug({ checkRuns }, 'check runs result');\n } /* v8 ignore next */ else {\n logger.debug({ result: checkRunsRaw }, 'No check runs found');\n }\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (\n err.statusCode === 403 ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('No permission to view check runs');\n } else {\n logger.warn({ err }, 'Error retrieving check runs');\n }\n }\n if (checkRuns.length === 0) {\n if (commitStatus.state === 'success') {\n return 'green';\n }\n if (commitStatus.state === 'failure') {\n return 'red';\n }\n return 'yellow';\n }\n if (\n commitStatus.state === 'failure' ||\n checkRuns.some((run) => run.conclusion === 'failure')\n ) {\n return 'red';\n }\n if (\n (commitStatus.state === 'success' || commitStatus.statuses.length === 0) &&\n checkRuns.every((run) =>\n ['skipped', 'neutral', 'success'].includes(run.conclusion),\n )\n ) {\n return 'green';\n }\n return 'yellow';\n}\n\nasync function getStatusCheck(\n branchName: string,\n useCache = true,\n): Promise<GhBranchStatus[]> {\n const branchCommit = git.getBranchCommit(branchName);\n\n const url = `repos/${config.repository}/commits/${branchCommit}/statuses`;\n\n const opts: GithubHttpOptions = useCache\n ? { cacheProvider: memCacheProvider }\n : { memCache: false };\n\n return (await githubApi.getJsonUnchecked<GhBranchStatus[]>(url, opts)).body;\n}\n\ntype GithubToRenovateStatusMapping = Record<string, BranchStatus>;\nconst githubToRenovateStatusMapping: GithubToRenovateStatusMapping = {\n success: 'green',\n error: 'red',\n failure: 'red',\n pending: 'yellow',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n try {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (check.context === context) {\n return githubToRenovateStatusMapping[check.state] || 'yellow';\n }\n }\n return null;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug('Commit not found when checking statuses');\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n /* v8 ignore next */\n if (config.parentRepo) {\n logger.debug('Cannot set branch status when in forking mode');\n return;\n }\n const existingStatus = await getBranchStatusCheck(branchName, context);\n if (existingStatus === state) {\n return;\n }\n logger.debug({ branch: branchName, context, state }, 'Setting branch status');\n let url: string | undefined;\n try {\n const branchCommit = git.getBranchCommit(branchName);\n url = `repos/${config.repository}/statuses/${branchCommit}`;\n const renovateToGitHubStateMapping = {\n green: 'success',\n yellow: 'pending',\n red: 'failure',\n };\n const options: any = {\n state: renovateToGitHubStateMapping[state],\n description,\n context,\n };\n if (targetUrl) {\n options.target_url = targetUrl;\n }\n await githubApi.postJson(url, { body: options });\n\n // update status cache\n await getStatus(branchName, false);\n await getStatusCheck(branchName, false);\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err, url }, 'Caught error setting branch status - aborting');\n throw new Error(REPOSITORY_CHANGED);\n }\n}\n\n// Issue\n\nasync function getIssues(): Promise<Issue[]> {\n const result = await githubApi.queryRepoField<unknown>(\n getIssuesQuery,\n 'issues',\n {\n variables: {\n owner: config.repositoryOwner,\n name: config.repositoryName,\n ...(!config.ignorePrAuthor && { user: config.renovateUsername }),\n },\n readOnly: true,\n },\n );\n\n logger.debug(`Retrieved ${result.length} issues`);\n return Issue.array().parse(result);\n}\n\nexport async function getIssueList(): Promise<Issue[]> {\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n return [];\n }\n let issueList = GithubIssueCache.getIssues();\n if (!issueList) {\n logger.debug('Retrieving issueList');\n issueList = await getIssues();\n GithubIssueCache.setIssues(issueList);\n }\n return issueList;\n}\n\nexport async function getIssue(number: number): Promise<Issue | null> {\n if (config.hasIssuesEnabled === false) {\n return null;\n }\n try {\n const repo = config.parentRepo ?? config.repository;\n const { body: issue } = await githubApi.getJson(\n `repos/${repo}/issues/${number}`,\n {\n cacheProvider: repoCacheProvider,\n },\n Issue,\n );\n GithubIssueCache.updateIssue(issue);\n return issue;\n } catch (err) {\n logger.debug({ err, number }, 'Error getting issue');\n if (err.response?.statusCode === 410) {\n logger.debug(`Issue #${number} has been deleted`);\n GithubIssueCache.deleteIssue(number);\n }\n return null;\n }\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n logger.debug(`findIssue(${title})`);\n const [issue] = (await getIssueList()).filter(\n (i) => i.state === 'open' && i.title === title,\n );\n if (!issue) {\n return null;\n }\n logger.debug(`Found issue ${issue.number}`);\n return getIssue(issue.number);\n}\n\nasync function closeIssue(issueNumber: number): Promise<void> {\n logger.debug(`closeIssue(${issueNumber})`);\n const repo = config.parentRepo ?? config.repository;\n const { body: closedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issueNumber}`,\n { body: { state: 'closed' } },\n Issue,\n );\n GithubIssueCache.updateIssue(closedIssue);\n}\n\nexport async function ensureIssue({\n title,\n reuseTitle,\n body: rawBody,\n labels,\n once = false,\n shouldReOpen = true,\n}: EnsureIssueConfig): Promise<EnsureIssueResult | null> {\n logger.debug(`ensureIssue(${title})`);\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n }\n const body = sanitize(rawBody);\n try {\n const issueList = await getIssueList();\n let issues = issueList.filter((i) => i.title === title);\n if (!issues.length) {\n issues = issueList.filter((i) => i.title === reuseTitle);\n if (issues.length) {\n logger.debug(`Reusing issue title: \"${reuseTitle}\"`);\n }\n }\n if (issues.length) {\n let issue = issues.find((i) => i.state === 'open');\n if (!issue) {\n if (once) {\n logger.debug('Issue already closed - skipping recreation');\n return null;\n }\n if (shouldReOpen) {\n logger.debug('Reopening previously closed issue');\n }\n issue = issues[issues.length - 1];\n }\n for (const i of issues) {\n if (i.state === 'open' && i.number !== issue.number) {\n logger.warn({ issueNo: i.number }, 'Closing duplicate issue');\n await closeIssue(i.number);\n }\n }\n\n const repo = config.parentRepo ?? config.repository;\n const { body: serverIssue } = await githubApi.getJson(\n `repos/${repo}/issues/${issue.number}`,\n { cacheProvider: repoCacheProvider },\n Issue,\n );\n GithubIssueCache.updateIssue(serverIssue);\n\n if (\n issue.title === title &&\n serverIssue.body === body &&\n issue.state === 'open'\n ) {\n logger.debug('Issue is open and up to date - nothing to do');\n return null;\n }\n if (shouldReOpen || issue.state === 'open') {\n logger.debug('Patching issue');\n const data: Record<string, unknown> = { body, state: 'open', title };\n if (labels) {\n data.labels = labels;\n }\n const repo = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issue.number}`,\n { body: data },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n logger.debug('Issue updated');\n return 'updated';\n }\n }\n const { body: createdIssue } = await githubApi.postJson(\n `repos/${config.parentRepo ?? config.repository}/issues`,\n {\n body: {\n title,\n body,\n labels: labels ?? [],\n },\n },\n Issue,\n );\n logger.info('Issue created');\n // reset issueList so that it will be fetched again as-needed\n GithubIssueCache.updateIssue(createdIssue);\n return 'created';\n } catch (err) /* v8 ignore next */ {\n if (err.body?.message?.startsWith('Issues are disabled for this repo')) {\n logger.debug(`Issues are disabled, so could not create issue: ${title}`);\n } else {\n logger.warn({ err }, 'Could not ensure issue');\n }\n }\n return null;\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n logger.trace(`ensureIssueClosing(${title})`);\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n return;\n }\n const issueList = await getIssueList();\n for (const issue of issueList) {\n if (issue.state === 'open' && issue.title === title) {\n await closeIssue(issue.number);\n logger.debug(`Issue closed, issueNo: ${issue.number}`);\n }\n }\n}\n\nasync function tryAddMilestone(\n issueNo: number,\n milestoneNo: number | undefined,\n): Promise<void> {\n if (!milestoneNo) {\n return;\n }\n\n logger.debug(\n {\n milestone: milestoneNo,\n pr: issueNo,\n },\n 'Adding milestone to PR',\n );\n try {\n const repo = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issueNo}`,\n { body: { milestone: milestoneNo } },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n } catch (err) {\n /* v8 ignore next */\n const actualError = err.response?.body ?? err;\n logger.warn(\n {\n milestone: milestoneNo,\n pr: issueNo,\n err: actualError,\n },\n 'Unable to add milestone to PR',\n );\n }\n}\n\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.debug(`Adding assignees '${assignees.join(', ')}' to #${issueNo}`);\n const repository = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.postJson(\n `repos/${repository}/issues/${issueNo}/assignees`,\n { body: { assignees } },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n}\n\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers.join(', ')}' to #${prNo}`);\n\n const userReviewers = reviewers.filter((e) => !e.startsWith('team:'));\n const teamReviewers = reviewers\n .filter((e) => e.startsWith('team:'))\n .map((e) => e.replace(regEx(/^team:/), ''));\n try {\n await githubApi.postJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/pulls/${prNo}/requested_reviewers`,\n {\n body: {\n reviewers: userReviewers,\n team_reviewers: teamReviewers,\n },\n },\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Failed to assign reviewer');\n }\n}\n\nexport async function addLabels(\n issueNo: number,\n labels: string[] | null | undefined,\n): Promise<void> {\n logger.debug(`Adding labels '${labels?.join(', ')}' to #${issueNo}`);\n try {\n const repository = config.parentRepo ?? config.repository;\n if (isArray(labels) && labels.length) {\n await githubApi.postJson(`repos/${repository}/issues/${issueNo}/labels`, {\n body: labels,\n });\n }\n } catch (err) /* v8 ignore next */ {\n logger.warn(\n { err, issueNo, labels },\n 'Error while adding labels. Skipping',\n );\n }\n}\n\nexport async function deleteLabel(\n issueNo: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${issueNo}`);\n const repository = config.parentRepo ?? config.repository;\n try {\n await githubApi.deleteJson(\n `repos/${repository}/issues/${issueNo}/labels/${label}`,\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err, issueNo, label }, 'Failed to delete label');\n }\n}\n\nasync function addComment(issueNo: number, body: string): Promise<void> {\n // POST /repos/:owner/:repo/issues/:number/comments\n await githubApi.postJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/${issueNo}/comments`,\n {\n body: { body },\n },\n );\n}\n\nasync function editComment(commentId: number, body: string): Promise<void> {\n // PATCH /repos/:owner/:repo/issues/comments/:id\n await githubApi.patchJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/comments/${commentId}`,\n {\n body: { body },\n },\n );\n}\n\nasync function deleteComment(commentId: number): Promise<void> {\n // DELETE /repos/:owner/:repo/issues/comments/:id\n await githubApi.deleteJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/comments/${commentId}`,\n );\n}\n\nasync function getComments(issueNo: number): Promise<Comment[]> {\n // GET /repos/:owner/:repo/issues/:number/comments\n logger.debug(`Getting comments for #${issueNo}`);\n const repo = config.parentRepo ?? config.repository;\n const url = `repos/${repo}/issues/${issueNo}/comments?per_page=100`;\n try {\n const { body: comments } = await githubApi.getJsonUnchecked<Comment[]>(\n url,\n {\n paginate: true,\n cacheProvider: repoCacheProvider,\n },\n );\n logger.debug(`Found ${comments.length} comments`);\n return comments;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug('404 response when retrieving comments');\n throw new ExternalHostError(err, 'github');\n }\n throw err;\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n const sanitizedContent = sanitize(content);\n try {\n const comments = await getComments(number);\n let body: string;\n let commentId: number | null = null;\n let commentNeedsUpdating = false;\n if (topic) {\n logger.debug(`Ensuring comment \"${topic}\" in #${number}`);\n body = `### ${topic}\\n\\n${sanitizedContent}`;\n comments.forEach((comment) => {\n if (comment.body.startsWith(`### ${topic}\\n\\n`)) {\n commentId = comment.id;\n commentNeedsUpdating = comment.body !== body;\n }\n });\n } else {\n logger.debug(`Ensuring content-only comment in #${number}`);\n body = `${sanitizedContent}`;\n comments.forEach((comment) => {\n if (comment.body === body) {\n commentId = comment.id;\n commentNeedsUpdating = false;\n }\n });\n }\n if (!commentId) {\n await addComment(number, body);\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await editComment(commentId, body);\n logger.debug(\n { repository: config.repository, issueNo: number },\n 'Comment updated',\n );\n } else {\n logger.debug('Comment is already update-to-date');\n }\n return true;\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.body?.message?.includes('is locked')) {\n logger.debug('Issue is locked - cannot add comment');\n } else {\n logger.warn({ err }, 'Error ensuring comment');\n }\n return false;\n }\n}\n\nexport async function ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.trace(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n const comments = await getComments(issueNo);\n let commentId: number | null | undefined = null;\n\n if (deleteConfig.type === 'by-topic') {\n const byTopic = (comment: Comment): boolean =>\n comment.body.startsWith(`### ${deleteConfig.topic}\\n\\n`);\n commentId = comments.find(byTopic)?.id;\n } else if (deleteConfig.type === 'by-content') {\n const byContent = (comment: Comment): boolean =>\n comment.body.trim() === deleteConfig.content;\n commentId = comments.find(byContent)?.id;\n }\n\n try {\n if (commentId) {\n logger.debug(`Removing comment from issueNo: ${issueNo}`);\n await deleteComment(commentId);\n }\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error deleting comment');\n }\n}\n\n// Pull Request\n\nasync function tryPrAutomerge(\n prNumber: number,\n prNodeId: string,\n platformPrOptions: PlatformPrOptions | undefined,\n): Promise<void> {\n if (!platformPrOptions?.usePlatformAutomerge) {\n return;\n }\n\n // If GitHub Enterprise Server <3.3.0 it doesn't support automerge\n // TODO #22198\n if (platformConfig.isGhe) {\n // semver not null safe, accepts null and undefined\n if (semver.satisfies(platformConfig.gheVersion!, '<3.3.0')) {\n logger.debug(\n { prNumber },\n 'GitHub-native automerge: not supported on this version of GHE. Use 3.3.0 or newer.',\n );\n return;\n }\n }\n\n if (!config.autoMergeAllowed) {\n logger.debug(\n { prNumber },\n 'GitHub-native automerge: not enabled in repo settings',\n );\n return;\n }\n\n try {\n const mergeMethod = config.mergeMethod?.toUpperCase() || 'MERGE';\n const variables = { pullRequestId: prNodeId, mergeMethod };\n const queryOptions = { variables };\n\n const res = await githubApi.requestGraphql<GhAutomergeResponse>(\n enableAutoMergeMutation,\n queryOptions,\n );\n\n if (res?.errors) {\n logger.debug(\n { prNumber, errors: res.errors },\n 'GitHub-native automerge: fail',\n );\n return;\n }\n\n logger.debug(`GitHub-native automerge: success...PrNo: ${prNumber}`);\n } catch (err) /* v8 ignore next: missing test #22198 */ {\n logger.warn({ prNumber, err }, 'GitHub-native automerge: REST API error');\n }\n}\n\n// Creates PR and returns PR number\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: rawBody,\n labels,\n draftPR = false,\n platformPrOptions,\n milestone,\n}: CreatePRConfig): Promise<GhPr | null> {\n const body = sanitize(rawBody);\n const base = targetBranch;\n // Include the repository owner to handle forkToken and regular mode\n // TODO: can `repository` be null? (#22198)\n\n const head = `${config.repository!.split('/')[0]}:${sourceBranch}`;\n const options: any = {\n body: {\n title,\n head,\n base,\n body,\n draft: draftPR,\n },\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n options.body.maintainer_can_modify =\n !config.forkOrg &&\n platformPrOptions?.forkModeDisallowMaintainerEdits !== true;\n }\n logger.debug({ title, head, base, draft: draftPR }, 'Creating PR');\n const ghPr = (\n await githubApi.postJson<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls`,\n options,\n )\n ).body;\n logger.debug(\n { branch: sourceBranch, pr: ghPr.number, draft: draftPR },\n 'PR created',\n );\n\n const result = coerceRestPr(ghPr);\n const { number, node_id } = result;\n\n await addLabels(number, labels);\n await tryAddMilestone(number, milestone);\n await tryPrAutomerge(number, node_id, platformPrOptions);\n\n cachePr(result);\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: rawBody,\n addLabels: labelsToAdd,\n removeLabels,\n state,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n const body = sanitize(rawBody);\n const patchBody: any = { title };\n if (body) {\n patchBody.body = body;\n }\n if (targetBranch) {\n patchBody.base = targetBranch;\n }\n if (state) {\n patchBody.state = state;\n }\n const options: any = {\n body: patchBody,\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n }\n\n // Update PR labels\n try {\n if (labelsToAdd) {\n await addLabels(prNo, labelsToAdd);\n }\n\n if (removeLabels) {\n for (const label of removeLabels) {\n await deleteLabel(prNo, label);\n }\n }\n\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls/${prNo}`,\n options,\n );\n const result = coerceRestPr(ghPr);\n cachePr(result);\n logger.debug(`PR updated...prNo: ${prNo}`);\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.warn({ err }, 'Error updating PR');\n }\n}\n\nexport async function reattemptPlatformAutomerge({\n number,\n platformPrOptions,\n}: ReattemptPlatformAutomergeConfig): Promise<void> {\n try {\n const result = (await getPr(number))!;\n const { node_id } = result;\n\n await tryPrAutomerge(number, node_id, platformPrOptions);\n\n logger.debug(`PR platform automerge re-attempted...prNo: ${number}`);\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n }\n}\n\nexport async function mergePr({\n branchName,\n id: prNo,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${prNo}, ${branchName})`);\n const url = `repos/${\n config.parentRepo ?? config.repository\n }/pulls/${prNo}/merge`;\n const options: GithubHttpOptions = {\n body: {},\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n }\n let automerged = false;\n let automergeResult: HttpResponse<unknown>;\n const mergeStrategy = mapMergeStartegy(strategy) ?? config.mergeMethod;\n\n if (mergeStrategy) {\n // This path is taken if we have auto-detected the allowed merge types from the repo or\n // automergeStrategy is configured by user\n options.body.merge_method = mergeStrategy;\n try {\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n automerged = true;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404 || err.statusCode === 405) {\n const body = err.response?.body;\n if (\n isNonEmptyString(body?.message) &&\n regEx(/^Required status check \".+\" is expected\\.$/).test(body.message)\n ) {\n logger.debug(\n { response: body },\n `GitHub blocking PR merge -- Missing required status check(s)`,\n );\n return false;\n }\n if (\n isNonEmptyString(body?.message) &&\n (body.message.includes('approving review') ||\n body.message.includes('code owner review'))\n ) {\n logger.debug(\n { response: body },\n `GitHub blocking PR merge -- Needs approving review(s)`,\n );\n return false;\n }\n logger.debug(\n { response: body },\n 'GitHub blocking PR merge -- will keep trying',\n );\n } else {\n logger.warn(\n { mergeMethod: config.mergeMethod, err },\n 'Failed to merge PR',\n );\n return false;\n }\n }\n }\n if (!automerged) {\n // We need to guess the merge method and try squash -> merge -> rebase\n options.body.merge_method = 'squash';\n try {\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err1) {\n logger.debug({ err: err1 }, `Failed to squash merge PR`);\n try {\n options.body.merge_method = 'merge';\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err2) {\n logger.debug({ err: err2 }, `Failed to merge commit PR`);\n try {\n options.body.merge_method = 'rebase';\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err3) {\n logger.debug({ err: err3 }, `Failed to rebase merge PR`);\n logger.info({ pr: prNo }, 'All merge attempts failed');\n return false;\n }\n }\n }\n }\n logger.debug(\n { automergeResult: automergeResult!.body, pr: prNo },\n 'PR merged',\n );\n const cachedPr = config.prList?.find(({ number }) => number === prNo);\n if (cachedPr) {\n cachePr({ ...cachedPr, state: 'merged' });\n }\n return true;\n}\n\nexport function massageMarkdown(input: string): string {\n if (platformConfig.isGhe) {\n return smartTruncate(input, maxBodyLength());\n }\n const massagedInput = massageMarkdownLinks(input)\n // to be safe, replace all github.com links with redirect.github.com\n .replace(\n regEx(/href=\"https?:\\/\\/github.com\\//g),\n 'href=\"https://redirect.github.com/',\n )\n .replace(\n regEx(/]\\(https:\\/\\/github\\.com\\//g),\n '](https://redirect.github.com/',\n )\n .replace(\n regEx(/]: https:\\/\\/github\\.com\\//g),\n ']: https://redirect.github.com/',\n )\n .replaceAll('> ℹ **Note**\\n> \\n', '> [!NOTE]\\n')\n .replaceAll('> ⚠ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replaceAll('> ⚠️ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replaceAll('> ❗ **Important**\\n> \\n', '> [!IMPORTANT]\\n');\n return smartTruncate(massagedInput, maxBodyLength());\n}\n\nexport function maxBodyLength(): number {\n return GitHubMaxPrBodyLen;\n}\n\nexport async function getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {\n /* v8 ignore next */\n if (config.hasVulnerabilityAlertsEnabled === false) {\n logger.debug('No vulnerability alerts enabled for repo');\n return [];\n }\n let vulnerabilityAlerts: VulnerabilityAlert[] | undefined;\n try {\n vulnerabilityAlerts = (\n await githubApi.getJson(\n `/repos/${config.repositoryOwner}/${config.repositoryName}/dependabot/alerts?state=open&direction=asc&per_page=100`,\n {\n paginate: true,\n headers: { accept: 'application/vnd.github+json' },\n cacheProvider: repoCacheProvider,\n },\n GithubVulnerabilityAlert,\n )\n ).body;\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, 'Error retrieving vulnerability alerts');\n logger.warn(\n {\n url: 'https://docs.renovatebot.com/configuration-options/#vulnerabilityalerts',\n },\n 'Cannot access vulnerability alerts. Please ensure permissions have been granted.',\n );\n }\n try {\n if (vulnerabilityAlerts?.length) {\n const shortAlerts: AggregatedVulnerabilities = {};\n logger.trace(\n { alerts: vulnerabilityAlerts },\n 'GitHub vulnerability details',\n );\n for (const alert of vulnerabilityAlerts) {\n if (alert.security_vulnerability === null) {\n // As described in the documentation, there are cases in which\n // GitHub API responds with `\"securityVulnerability\": null`.\n // But it's may be faulty, so skip processing it here.\n continue;\n }\n const {\n package: { name, ecosystem },\n vulnerable_version_range: vulnerableVersionRange,\n first_patched_version: firstPatchedVersion,\n } = alert.security_vulnerability;\n const patch = firstPatchedVersion?.identifier;\n\n const normalizedName = normalizeNamePerEcosystem({ name, ecosystem });\n alert.security_vulnerability.package.name = normalizedName;\n const key = `${ecosystem.toLowerCase()}/${normalizedName}`;\n const range = vulnerableVersionRange;\n const elem = shortAlerts[key] || {};\n elem[range] = coerceToNull(patch);\n shortAlerts[key] = elem;\n }\n logger.debug({ alerts: shortAlerts }, 'GitHub vulnerability details');\n } else {\n logger.debug('No vulnerability alerts found');\n }\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, 'Error processing vulnerabity alerts');\n }\n return vulnerabilityAlerts ?? [];\n}\n\nasync function pushFiles(\n { branchName, message }: CommitFilesConfig,\n { parentCommitSha, commitSha }: CommitResult,\n): Promise<LongCommitSha | null> {\n try {\n // Push the commit to GitHub using a custom ref\n // The associated blobs will be pushed automatically\n await pushCommitToRenovateRef(commitSha, branchName);\n // Get all the blobs which the commit/tree points to\n // The blob SHAs will be the same locally as on GitHub\n const treeItems = await listCommitTree(commitSha);\n\n // For reasons unknown, we need to recreate our tree+commit on GitHub\n // Attempting to reuse the tree or commit SHA we pushed does not work\n const treeRes = await githubApi.postJson<{ sha: string }>(\n `/repos/${config.repository}/git/trees`,\n { body: { tree: treeItems } },\n );\n const treeSha = treeRes.body.sha;\n\n // Now we recreate the commit using the tree we recreated the step before\n const commitRes = await githubApi.postJson<{ sha: string }>(\n `/repos/${config.repository}/git/commits`,\n { body: { message, tree: treeSha, parents: [parentCommitSha] } },\n );\n incLimitedValue('Commits');\n const remoteCommitSha = commitRes.body.sha as LongCommitSha;\n await ensureBranchSha(branchName, remoteCommitSha);\n return remoteCommitSha;\n } catch (err) {\n logger.debug({ branchName, err }, 'Platform-native commit: unknown error');\n return null;\n }\n}\n\nexport async function commitFiles(\n config: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n const commitResult = await git.prepareCommit(config); // Commit locally and don't push\n const { branchName, files } = config;\n if (!commitResult) {\n logger.debug(\n { branchName, files: files.map(({ path }) => path) },\n `Platform-native commit: unable to prepare for commit`,\n );\n return null;\n }\n // Perform the commits using REST API\n const pushResult = await pushFiles(config, commitResult);\n if (!pushResult) {\n return null;\n }\n // Replace locally created branch with the remotely created one\n // and return the remote commit SHA\n await git.resetToCommit(commitResult.parentCommitSha);\n const commitSha = await git.fetchBranch(branchName);\n return commitSha;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/github/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport { isArray, isNonEmptyObject, isNonEmptyString } from '@sindresorhus/is';\nimport semver from 'semver';\nimport { GlobalConfig } from '../../../config/global';\nimport {\n PLATFORM_INTEGRATION_UNAUTHORIZED,\n PLATFORM_RATE_LIMIT_EXCEEDED,\n PLATFORM_UNKNOWN_ERROR,\n REPOSITORY_ACCESS_FORBIDDEN,\n REPOSITORY_ARCHIVED,\n REPOSITORY_BLOCKED,\n REPOSITORY_CANNOT_FORK,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n REPOSITORY_FORKED,\n REPOSITORY_FORK_MISSING,\n REPOSITORY_FORK_MODE_FORKED,\n REPOSITORY_NOT_FOUND,\n REPOSITORY_RENAMED,\n} from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus, VulnerabilityAlert } from '../../../types';\nimport { ExternalHostError } from '../../../types/errors/external-host-error';\nimport { isGithubFineGrainedPersonalAccessToken } from '../../../util/check-token';\nimport { coerceToNull } from '../../../util/coerce';\nimport { parseJson } from '../../../util/common';\nimport { getEnv } from '../../../util/env';\nimport * as git from '../../../util/git';\nimport { listCommitTree, pushCommitToRenovateRef } from '../../../util/git';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LongCommitSha,\n} from '../../../util/git/types';\nimport * as hostRules from '../../../util/host-rules';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport { repoCacheProvider } from '../../../util/http/cache/repository-http-cache-provider';\nimport * as githubHttp from '../../../util/http/github';\nimport type { GithubHttpOptions } from '../../../util/http/github';\nimport type { HttpResponse } from '../../../util/http/types';\nimport { coerceObject } from '../../../util/object';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { fromBase64, looseEquals } from '../../../util/string';\nimport { ensureTrailingSlash } from '../../../util/url';\nimport { incLimitedValue } from '../../../workers/global/limits';\nimport type {\n AggregatedVulnerabilities,\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n MergePRConfig,\n PlatformParams,\n PlatformPrOptions,\n PlatformResult,\n Pr,\n ReattemptPlatformAutomergeConfig,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { normalizeNamePerEcosystem } from '../utils/github-alerts';\nimport { smartTruncate } from '../utils/pr-body';\nimport { remoteBranchExists } from './branch';\nimport { coerceRestPr, githubApi, mapMergeStartegy } from './common';\nimport {\n enableAutoMergeMutation,\n getIssuesQuery,\n repoInfoQuery,\n} from './graphql';\nimport { GithubIssueCache, GithubIssue as Issue } from './issue';\nimport { massageMarkdownLinks } from './massage-markdown-links';\nimport { getPrCache, updatePrCache } from './pr';\nimport {\n GithubBranchProtection,\n GithubBranchRulesets,\n GithubVulnerabilityAlert,\n} from './schema';\nimport type {\n CombinedBranchStatus,\n Comment,\n GhAutomergeResponse,\n GhBranchStatus,\n GhPr,\n GhRepo,\n GhRestPr,\n GhRestRepo,\n LocalRepoConfig,\n PlatformConfig,\n} from './types';\nimport { getAppDetails, getUserDetails, getUserEmail } from './user';\n\nexport const id = 'github';\n\nlet config: LocalRepoConfig;\nlet platformConfig: PlatformConfig;\n\n// GitHub's max is 60k but in the hosted app we've observed that content-length is ~1k longer\nconst GitHubMaxPrBodyLen = 58000;\n\nexport function resetConfigs(): void {\n config = {} as never;\n platformConfig = {\n hostType: 'github',\n endpoint: 'https://api.github.com/',\n };\n}\n\nresetConfigs();\n\nfunction escapeHash(input: string): string {\n return input?.replace(regEx(/#/g), '%23');\n}\n\nexport function isGHApp(): boolean {\n return !!platformConfig.isGHApp;\n}\n\nexport async function detectGhe(token: string): Promise<void> {\n platformConfig.isGhe =\n URL.parse(platformConfig.endpoint).host !== 'api.github.com';\n if (platformConfig.isGhe) {\n const gheHeaderKey = 'x-github-enterprise-version';\n const gheQueryRes = await githubApi.headJson('/', { token });\n const gheHeaders = coerceObject(gheQueryRes?.headers);\n const [, gheVersion] =\n Object.entries(gheHeaders).find(\n ([k]) => k.toLowerCase() === gheHeaderKey,\n ) ?? [];\n platformConfig.gheVersion = semver.valid(gheVersion as string) ?? null;\n logger.debug(\n `Detected GitHub Enterprise Server, version: ${platformConfig.gheVersion}`,\n );\n }\n}\n\nexport async function initPlatform({\n endpoint,\n token: originalToken,\n username,\n gitAuthor,\n}: PlatformParams): Promise<PlatformResult> {\n let token = originalToken;\n if (!token) {\n throw new Error('Init: You must configure a GitHub token');\n }\n token = token.replace(/^ghs_/, 'x-access-token:ghs_');\n platformConfig.isGHApp = token.startsWith('x-access-token:');\n\n if (endpoint) {\n platformConfig.endpoint = ensureTrailingSlash(endpoint);\n githubHttp.setBaseUrl(platformConfig.endpoint);\n } else {\n logger.debug('Using default github endpoint: ' + platformConfig.endpoint);\n }\n\n await detectGhe(token);\n /**\n * GHE requires version >=3.10 to support fine-grained access tokens\n * https://docs.github.com/en/enterprise-server@3.10/admin/release-notes#authentication\n */\n if (\n isGithubFineGrainedPersonalAccessToken(token) &&\n platformConfig.isGhe &&\n (!platformConfig.gheVersion ||\n semver.lt(platformConfig.gheVersion, '3.10.0'))\n ) {\n throw new Error(\n 'Init: Fine-grained Personal Access Tokens do not support GitHub Enterprise Server API version <3.10 and cannot be used with Renovate.',\n );\n }\n\n let renovateUsername: string;\n if (username) {\n renovateUsername = username;\n } else if (platformConfig.isGHApp) {\n platformConfig.userDetails ??= await getAppDetails(token);\n renovateUsername = platformConfig.userDetails.username;\n } else {\n platformConfig.userDetails ??= await getUserDetails(\n platformConfig.endpoint,\n token,\n );\n renovateUsername = platformConfig.userDetails.username;\n }\n let discoveredGitAuthor: string | undefined;\n if (!gitAuthor) {\n if (platformConfig.isGHApp) {\n platformConfig.userDetails ??= await getAppDetails(token);\n const ghHostname = platformConfig.isGhe\n ? URL.parse(platformConfig.endpoint).hostname\n : 'github.com';\n discoveredGitAuthor = `${platformConfig.userDetails.name} <${platformConfig.userDetails.id}+${platformConfig.userDetails.username}@users.noreply.${ghHostname}>`;\n } else {\n platformConfig.userDetails ??= await getUserDetails(\n platformConfig.endpoint,\n token,\n );\n platformConfig.userEmail ??= await getUserEmail(\n platformConfig.endpoint,\n token,\n );\n if (platformConfig.userEmail) {\n discoveredGitAuthor = `${platformConfig.userDetails.name} <${platformConfig.userEmail}>`;\n }\n }\n }\n logger.debug({ platformConfig, renovateUsername }, 'Platform config');\n const platformResult: PlatformResult = {\n endpoint: platformConfig.endpoint,\n gitAuthor: gitAuthor ?? discoveredGitAuthor,\n renovateUsername,\n token,\n };\n if (\n getEnv().RENOVATE_X_GITHUB_HOST_RULES &&\n platformResult.endpoint === 'https://api.github.com/'\n ) {\n logger.debug('Adding GitHub token as GHCR password');\n platformResult.hostRules = [\n {\n matchHost: 'ghcr.io',\n hostType: 'docker',\n username: 'USERNAME',\n password: token.replace(/^x-access-token:/, ''),\n },\n ];\n logger.debug('Adding GitHub token as npm.pkg.github.com Basic token');\n platformResult.hostRules.push({\n matchHost: 'npm.pkg.github.com',\n hostType: 'npm',\n token: token.replace(/^x-access-token:/, ''),\n });\n const usernamePasswordHostTypes = ['rubygems', 'maven', 'nuget'];\n for (const hostType of usernamePasswordHostTypes) {\n logger.debug(\n `Adding GitHub token as ${hostType}.pkg.github.com password`,\n );\n platformResult.hostRules.push({\n hostType,\n matchHost: `${hostType}.pkg.github.com`,\n username: renovateUsername,\n password: token.replace(/^x-access-token:/, ''),\n });\n }\n }\n return platformResult;\n}\n\nasync function fetchRepositories(): Promise<GhRestRepo[]> {\n try {\n if (isGHApp()) {\n const res = await githubApi.getJsonUnchecked<{\n repositories: GhRestRepo[];\n }>(`installation/repositories?per_page=100`, {\n paginationField: 'repositories',\n paginate: 'all',\n });\n return res.body.repositories;\n } else {\n const res = await githubApi.getJsonUnchecked<GhRestRepo[]>(\n `user/repos?per_page=100`,\n { paginate: 'all' },\n );\n return res.body;\n }\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, `GitHub getRepos error`);\n throw err;\n }\n}\n\n// Get all repositories that the user has access to\nexport async function getRepos(config?: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Autodiscovering GitHub repositories');\n const nonEmptyRepositories = (await fetchRepositories()).filter(\n isNonEmptyObject,\n );\n const nonArchivedRepositories = nonEmptyRepositories.filter(\n (repo) => !repo.archived,\n );\n if (nonArchivedRepositories.length < nonEmptyRepositories.length) {\n logger.debug(\n `Filtered out ${\n nonEmptyRepositories.length - nonArchivedRepositories.length\n } archived repositories`,\n );\n }\n if (!config?.topics) {\n return nonArchivedRepositories.map((repo) => repo.full_name);\n }\n\n logger.debug({ topics: config.topics }, 'Filtering by topics');\n const topicRepositories = nonArchivedRepositories.filter((repo) =>\n repo.topics?.some((topic) => config?.topics?.includes(topic)),\n );\n\n if (topicRepositories.length < nonArchivedRepositories.length) {\n logger.debug(\n `Filtered out ${\n nonArchivedRepositories.length - topicRepositories.length\n } repositories not matching topic filters`,\n );\n }\n return topicRepositories.map((repo) => repo.full_name);\n}\n\nasync function getBranchProtection(\n branchName: string,\n): Promise<GithubBranchProtection> {\n if (config.parentRepo) {\n return {};\n }\n\n const res = await githubApi.getJson(\n `repos/${config.repository}/branches/${escapeHash(branchName)}/protection`,\n { cacheProvider: repoCacheProvider },\n GithubBranchProtection,\n );\n return res.body;\n}\n\nasync function getBranchRulesets(\n branchName: string,\n): Promise<GithubBranchRulesets> {\n if (config.parentRepo) {\n return [];\n }\n\n try {\n const res = await githubApi.getJson(\n `repos/${config.repository}/rules/branches/${escapeHash(branchName)}`,\n { cacheProvider: repoCacheProvider },\n GithubBranchRulesets,\n );\n return res.body;\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(`No branch rulesets found for ${branchName}`);\n return [];\n }\n throw err;\n }\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n const repo = repoName ?? config.repository;\n\n // only use cache for the same org\n const httpOptions: GithubHttpOptions = {};\n const isSameOrg = repo?.split('/')?.[0] === config.repositoryOwner;\n if (isSameOrg) {\n httpOptions.cacheProvider = repoCacheProvider;\n }\n\n let url = `repos/${repo}/contents/${fileName}`;\n if (branchOrTag) {\n url += `?ref=` + branchOrTag;\n }\n const res = await githubApi.getJsonUnchecked<{ content: string }>(\n url,\n httpOptions,\n );\n const buf = res.body.content;\n const str = fromBase64(buf);\n return str;\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\nexport async function listForks(\n token: string,\n repository: string,\n): Promise<GhRestRepo[]> {\n try {\n // Get list of existing repos\n const url = `repos/${repository}/forks?per_page=100`;\n const repos = (\n await githubApi.getJsonUnchecked<GhRestRepo[]>(url, {\n token,\n paginate: true,\n pageLimit: 100,\n })\n ).body;\n logger.debug(`Found ${repos.length} forked repo(s)`);\n return repos;\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug('Cannot list repo forks - it is likely private');\n } else {\n logger.debug({ err }, 'Unknown error listing repository forks');\n }\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n}\n\nexport async function findFork(\n token: string,\n repository: string,\n forkOrg?: string,\n): Promise<GhRestRepo | null> {\n const forks = await listForks(token, repository);\n if (forkOrg) {\n logger.debug(`Searching for forked repo in forkOrg (${forkOrg})`);\n const forkedRepo = forks.find((repo) => repo.owner.login === forkOrg);\n if (forkedRepo) {\n logger.debug(`Found repo in forkOrg: ${forkedRepo.full_name}`);\n return forkedRepo;\n }\n logger.debug(`No repo found in forkOrg`);\n }\n logger.debug(`Searching for forked repo in user account`);\n try {\n const { username } = await getUserDetails(platformConfig.endpoint, token);\n const forkedRepo = forks.find((repo) => repo.owner.login === username);\n if (forkedRepo) {\n logger.debug(`Found repo in user account: ${forkedRepo.full_name}`);\n return forkedRepo;\n }\n } catch {\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n logger.debug(`No repo found in user account`);\n return null;\n}\n\nexport async function createFork(\n token: string,\n repository: string,\n forkOrg?: string,\n): Promise<GhRestRepo> {\n let forkedRepo: GhRestRepo | undefined;\n try {\n forkedRepo = (\n await githubApi.postJson<GhRestRepo>(`repos/${repository}/forks`, {\n token,\n body: {\n organization: forkOrg ?? undefined,\n name: config.parentRepo!.replace('/', '-_-'),\n default_branch_only: true, // no baseBranchPatterns support yet\n },\n })\n ).body;\n } catch (err) {\n logger.debug({ err }, 'Error creating fork');\n }\n if (!forkedRepo) {\n throw new Error(REPOSITORY_CANNOT_FORK);\n }\n logger.info({ forkedRepo: forkedRepo.full_name }, 'Created forked repo');\n logger.debug(`Sleeping 30s after creating fork`);\n await setTimeout(30000);\n return forkedRepo;\n}\n\n// Initialize GitHub by getting base branch and SHA\nexport async function initRepo({\n repository,\n forkCreation,\n forkOrg,\n forkToken,\n renovateUsername,\n cloneSubmodules,\n cloneSubmodulesFilter,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n // config is used by the platform api itself, not necessary for the app layer to know\n config = {\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor', false),\n } as any;\n const opts = hostRules.find({\n hostType: 'github',\n url: platformConfig.endpoint,\n readOnly: true,\n });\n config.renovateUsername = renovateUsername;\n [config.repositoryOwner, config.repositoryName] = repository.split('/');\n let repo: GhRepo | undefined;\n try {\n let infoQuery = repoInfoQuery;\n\n // GitHub Enterprise Server <3.3.0 doesn't support autoMergeAllowed and hasIssuesEnabled objects\n // TODO #22198\n if (\n platformConfig.isGhe &&\n // semver not null safe, accepts null and undefined\n semver.satisfies(platformConfig.gheVersion!, '<3.3.0')\n ) {\n infoQuery = infoQuery.replace(/\\n\\s*autoMergeAllowed\\s*\\n/, '\\n');\n infoQuery = infoQuery.replace(/\\n\\s*hasIssuesEnabled\\s*\\n/, '\\n');\n }\n\n // GitHub Enterprise Server <3.9.0 doesn't support hasVulnerabilityAlertsEnabled objects\n if (\n platformConfig.isGhe &&\n // semver not null safe, accepts null and undefined\n semver.satisfies(platformConfig.gheVersion!, '<3.9.0')\n ) {\n infoQuery = infoQuery.replace(\n /\\n\\s*hasVulnerabilityAlertsEnabled\\s*\\n/,\n '\\n',\n );\n }\n\n const res = await githubApi.requestGraphql<{\n repository: GhRepo;\n }>(infoQuery, {\n variables: {\n owner: config.repositoryOwner,\n name: config.repositoryName,\n ...(!config.ignorePrAuthor && { user: renovateUsername }),\n },\n readOnly: true,\n });\n\n if (res?.errors) {\n if (res.errors.find((err) => err.type === 'RATE_LIMITED')) {\n logger.debug({ res }, 'GraphQL rate limit exceeded.');\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n logger.debug({ res }, 'Unexpected GraphQL errors');\n throw new Error(PLATFORM_UNKNOWN_ERROR);\n }\n\n repo = res?.data?.repository;\n /* v8 ignore next */\n if (!repo) {\n logger.debug({ res }, 'No repository returned');\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n /* v8 ignore next */\n if (!repo.defaultBranchRef?.name) {\n logger.debug(\n { res },\n 'No default branch returned - treating repo as empty',\n );\n throw new Error(REPOSITORY_EMPTY);\n }\n if (\n repo.nameWithOwner &&\n repo.nameWithOwner.toUpperCase() !== repository.toUpperCase()\n ) {\n logger.debug(\n { desiredRepo: repository, foundRepo: repo.nameWithOwner },\n 'Repository has been renamed',\n );\n throw new Error(REPOSITORY_RENAMED);\n }\n if (repo.isArchived) {\n logger.debug(\n 'Repository is archived - throwing error to abort renovation',\n );\n throw new Error(REPOSITORY_ARCHIVED);\n }\n // Use default branch as PR target unless later overridden.\n config.defaultBranch = repo.defaultBranchRef.name;\n // Base branch may be configured but defaultBranch is always fixed\n logger.debug(`${repository} default branch = ${config.defaultBranch}`);\n // GitHub allows administrators to block certain types of merge, so we need to check it\n if (repo.squashMergeAllowed) {\n config.mergeMethod = 'squash';\n } else if (repo.mergeCommitAllowed) {\n config.mergeMethod = 'merge';\n } else if (repo.rebaseMergeAllowed) {\n config.mergeMethod = 'rebase';\n } else {\n // This happens if we don't have Administrator read access, it is not a critical error\n logger.debug('Could not find allowed merge methods for repo');\n }\n config.autoMergeAllowed = repo.autoMergeAllowed;\n config.hasIssuesEnabled = repo.hasIssuesEnabled;\n config.hasVulnerabilityAlertsEnabled = repo.hasVulnerabilityAlertsEnabled;\n\n const recentIssues = Issue.array()\n .catch([])\n .parse(res?.data?.repository?.issues?.nodes);\n GithubIssueCache.addIssuesToReconcile(recentIssues);\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, 'Caught initRepo error');\n if (\n err.message === REPOSITORY_ARCHIVED ||\n err.message === REPOSITORY_RENAMED ||\n err.message === REPOSITORY_NOT_FOUND\n ) {\n throw err;\n }\n if (err.statusCode === 403) {\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n if (err.statusCode === 404) {\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n if (err.message.startsWith('Repository access blocked')) {\n throw new Error(REPOSITORY_BLOCKED);\n }\n if (err.message === REPOSITORY_FORK_MODE_FORKED) {\n throw err;\n }\n if (err.message === REPOSITORY_FORKED) {\n throw err;\n }\n if (err.message === REPOSITORY_DISABLED) {\n throw err;\n }\n if (err.message === 'Response code 451 (Unavailable for Legal Reasons)') {\n throw new Error(REPOSITORY_ACCESS_FORBIDDEN);\n }\n logger.debug({ err }, 'Unknown GitHub initRepo error');\n throw err;\n }\n // This shouldn't be necessary, but occasional strange errors happened until it was added\n config.prList = null;\n\n if (forkToken) {\n logger.debug('Bot is in fork mode');\n if (repo.isFork) {\n logger.debug(\n `Forked repos cannot be processed when running with a forkToken, so this repo will be skipped`,\n );\n logger.debug(\n `Parent repo for this forked repo is ${repo.parent?.nameWithOwner}`,\n );\n throw new Error(REPOSITORY_FORKED);\n }\n config.forkOrg = forkOrg;\n config.forkToken = forkToken;\n // save parent name then delete\n config.parentRepo = config.repository;\n config.repository = null;\n let forkedRepo = await findFork(forkToken, repository, forkOrg);\n if (forkedRepo) {\n config.repository = forkedRepo.full_name;\n const forkDefaultBranch = forkedRepo.default_branch;\n if (forkDefaultBranch !== config.defaultBranch) {\n const body = {\n ref: `refs/heads/${config.defaultBranch}`,\n sha: repo.defaultBranchRef.target.oid,\n };\n logger.debug(\n {\n defaultBranch: config.defaultBranch,\n forkDefaultBranch,\n body,\n },\n 'Fork has different default branch to parent, attempting to create branch',\n );\n try {\n await githubApi.postJson(`repos/${config.repository}/git/refs`, {\n body,\n token: forkToken,\n });\n logger.debug('Created new default branch in fork');\n } catch (err) /* v8 ignore next */ {\n if (err.response?.body?.message === 'Reference already exists') {\n logger.debug(\n `Branch ${config.defaultBranch} already exists in the fork`,\n );\n } else {\n logger.warn(\n { err, body: err.response?.body },\n 'Could not create parent defaultBranch in fork',\n );\n }\n }\n logger.debug(\n `Setting ${config.defaultBranch} as default branch for ${config.repository}`,\n );\n try {\n await githubApi.patchJson(`repos/${config.repository}`, {\n body: {\n name: config.repository.split('/')[1],\n default_branch: config.defaultBranch,\n },\n token: forkToken,\n });\n logger.debug('Successfully changed default branch for fork');\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Could not set default branch');\n }\n }\n } else if (forkCreation) {\n logger.debug('Forked repo is not found - attempting to create it');\n forkedRepo = await createFork(forkToken, repository, forkOrg);\n config.repository = forkedRepo.full_name;\n } else {\n logger.debug('Forked repo is not found and forkCreation is disabled');\n throw new Error(REPOSITORY_FORK_MISSING);\n }\n }\n\n const parsedEndpoint = URL.parse(platformConfig.endpoint);\n if (forkToken) {\n logger.debug('Using forkToken for git init');\n parsedEndpoint.auth = coerceToNull(config.forkToken);\n } /* v8 ignore next */ else {\n const tokenType = opts.token?.startsWith('x-access-token:')\n ? 'app'\n : 'personal access';\n logger.debug(`Using ${tokenType} token for git init`);\n parsedEndpoint.auth = opts.token ?? null;\n }\n // TODO: null checks (#22198)\n parsedEndpoint.host = parsedEndpoint.host!.replace(\n 'api.github.com',\n 'github.com',\n );\n parsedEndpoint.pathname = `${config.repository}.git`;\n const url = URL.format(parsedEndpoint);\n let upstreamUrl = undefined;\n if (forkCreation && config.parentRepo) {\n parsedEndpoint.pathname = config.parentRepo + '.git';\n upstreamUrl = URL.format(parsedEndpoint);\n }\n await git.initRepo({\n ...config,\n url,\n upstreamUrl,\n });\n const repoConfig: RepoResult = {\n defaultBranch: config.defaultBranch,\n isFork: repo.isFork === true,\n repoFingerprint: repoFingerprint(repo.id, platformConfig.endpoint),\n };\n return repoConfig;\n}\n\nasync function checkRulesetsForForceRebase(\n branchName: string,\n): Promise<boolean> {\n try {\n const rulesets = await getBranchRulesets(branchName);\n logger.trace(\n `Ruleset: Found ${rulesets.length} rulesets for branch ${branchName}`,\n );\n\n return rulesets.some((rule) => {\n if (\n rule.type === 'required_status_checks' &&\n rule.parameters?.strict_required_status_checks_policy === true\n ) {\n logger.debug(\n `Ruleset: strict required status checks found for ${branchName}`,\n );\n return true;\n }\n\n return false;\n });\n } catch (err) {\n handleBranchProtectionError('rulesets', err, branchName);\n return false;\n }\n}\n\nasync function checkBranchProtectionForForceRebase(\n branchName: string,\n): Promise<boolean> {\n try {\n const branchProtection = await getBranchProtection(branchName);\n logger.trace(`Found branch protection for branch ${branchName}`);\n\n const strictStatusChecks = branchProtection?.required_status_checks?.strict;\n if (strictStatusChecks) {\n logger.debug(\n `Branch protection: PRs must be up-to-date before merging for ${branchName}`,\n );\n return true;\n }\n return false;\n } catch (err) {\n handleBranchProtectionError('branch-protection', err, branchName);\n return false;\n }\n}\n\nexport async function getBranchForceRebase(\n branchName: string,\n): Promise<boolean> {\n config.branchForceRebase ??= {};\n\n const cachedResult = config.branchForceRebase[branchName];\n if (cachedResult !== undefined) {\n return cachedResult;\n }\n\n // Initialize to false before checking branch protection\n config.branchForceRebase[branchName] = false;\n\n // Check rulesets first (newer API)\n const hasRulesetForceRebase = await checkRulesetsForForceRebase(branchName);\n if (hasRulesetForceRebase) {\n config.branchForceRebase[branchName] = true;\n return true;\n }\n\n // Fall back to legacy branch protection\n const hasBranchProtectionForceRebase =\n await checkBranchProtectionForForceRebase(branchName);\n if (hasBranchProtectionForceRebase) {\n config.branchForceRebase[branchName] = true;\n }\n\n return config.branchForceRebase[branchName];\n}\n\nfunction handleBranchProtectionError(\n protection: 'branch-protection' | 'rulesets',\n err: any,\n branchName: string,\n): void {\n if (err.statusCode === 404) {\n logger.debug(`No ${protection} found for ${branchName}`);\n return;\n }\n\n const isUnauthorized =\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED || err.statusCode === 403;\n\n if (isUnauthorized) {\n logger.once.debug(\n `Branch protection: Do not have permissions to detect ${protection} for ${branchName}`,\n );\n return;\n }\n\n throw err;\n}\n\nfunction cachePr(pr?: GhPr | null): void {\n config.prList ??= [];\n if (pr) {\n updatePrCache(pr);\n for (let idx = 0; idx < config.prList.length; idx += 1) {\n const cachedPr = config.prList[idx];\n if (cachedPr.number === pr.number) {\n config.prList[idx] = pr;\n return;\n }\n }\n config.prList.push(pr);\n }\n}\n\n// Fetch fresh Pull Request and cache it when possible\nasync function fetchPr(prNo: number): Promise<GhPr | null> {\n try {\n const { body: ghRestPr } = await githubApi.getJsonUnchecked<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls/${prNo}`,\n );\n const result = coerceRestPr(ghRestPr);\n cachePr(result);\n return result;\n } catch (err) {\n logger.warn({ err, prNo }, `GitHub fetchPr error`);\n return null;\n }\n}\n\n// Gets details for a PR\nexport async function getPr(prNo: number): Promise<GhPr | null> {\n if (!prNo) {\n return null;\n }\n const prList = await getPrList();\n let pr = prList.find(({ number }) => number === prNo) ?? null;\n if (pr) {\n logger.debug('Returning PR from cache');\n }\n pr ??= await fetchPr(prNo);\n return pr;\n}\n\nfunction matchesState(state: string, desiredState: string): boolean {\n if (desiredState === 'all') {\n return true;\n }\n if (desiredState.startsWith('!')) {\n return state !== desiredState.substring(1);\n }\n return state === desiredState;\n}\n\nexport async function getPrList(): Promise<GhPr[]> {\n if (!config.prList) {\n const repo = config.parentRepo ?? config.repository;\n\n let username = config.renovateUsername;\n if (config.forkToken || config.ignorePrAuthor) {\n username = undefined;\n }\n\n // TODO: check null `repo` (#22198)\n const prCache = await getPrCache(githubApi, repo!, username);\n config.prList = Object.values(prCache).sort(\n ({ number: a }, { number: b }) => b - a,\n );\n }\n\n return config.prList;\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n includeOtherAuthors,\n}: FindPRConfig): Promise<GhPr | null> {\n logger.debug(`findPr(${branchName}, ${prTitle}, ${state})`);\n\n if (includeOtherAuthors) {\n const repo = config.parentRepo ?? config.repository;\n const org = repo?.split('/')[0];\n // PR might have been created by anyone, so don't use the cached Renovate PR list\n const { body: prList } = await githubApi.getJsonUnchecked<GhRestPr[]>(\n `repos/${repo}/pulls?head=${org}:${branchName}&state=open`,\n { cacheProvider: repoCacheProvider },\n );\n\n if (!prList.length) {\n logger.debug(`No PR found for branch ${branchName}`);\n return null;\n }\n\n return coerceRestPr(prList[0]);\n }\n\n const prList = await getPrList();\n const pr = prList.find((p) => {\n if (p.sourceBranch !== branchName) {\n return false;\n }\n\n if (prTitle && prTitle.toUpperCase() !== p.title.toUpperCase()) {\n return false;\n }\n\n if (!matchesState(p.state, state)) {\n return false;\n }\n\n if (!config.forkToken && !looseEquals(config.repository, p.sourceRepo)) {\n return false;\n }\n\n return true;\n });\n if (pr) {\n logger.debug(`Found PR #${pr.number}`);\n }\n return pr ?? null;\n}\n\nasync function ensureBranchSha(\n branchName: string,\n sha: LongCommitSha,\n): Promise<void> {\n const repository = config.repository!;\n try {\n const commitUrl = `/repos/${repository}/git/commits/${sha}`;\n await githubApi.head(commitUrl, { memCache: false });\n } catch (err) {\n logger.error({ err, sha, branchName }, 'Commit not found');\n throw err;\n }\n\n const refUrl = `/repos/${config.repository}/git/refs/heads/${branchName}`;\n const branchExists = await remoteBranchExists(repository, branchName);\n\n if (branchExists) {\n try {\n await githubApi.patchJson(refUrl, { body: { sha, force: true } });\n return;\n } catch (err) {\n if (err.err?.response?.statusCode === 422) {\n logger.debug(\n { err },\n 'Branch update failed due to reference not existing - will try to create',\n );\n } else {\n logger.warn({ refUrl, err }, 'Error updating branch');\n throw err;\n }\n }\n }\n\n await githubApi.postJson(`/repos/${repository}/git/refs`, {\n body: { sha, ref: `refs/heads/${branchName}` },\n });\n}\n\n// Returns the Pull Request for a branch. Null if not exists.\nexport async function getBranchPr(branchName: string): Promise<GhPr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n\n const openPr = await findPr({\n branchName,\n state: 'open',\n });\n\n if (openPr) {\n return openPr;\n }\n\n return null;\n}\n\nexport async function tryReuseAutoclosedPr(\n autoclosedPr: Pr,\n newTitle: string,\n): Promise<Pr | null> {\n const { sha, number, sourceBranch: branchName } = autoclosedPr;\n try {\n await ensureBranchSha(branchName, sha!);\n logger.debug(`Recreated autoclosed branch ${branchName} with sha ${sha}`);\n } catch (err) {\n logger.debug(\n { err, branchName, sha, autoclosedPr },\n 'Could not recreate autoclosed branch - skipping reopen',\n );\n return null;\n }\n\n try {\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.repository}/pulls/${number}`,\n {\n body: {\n state: 'open',\n title: newTitle,\n },\n },\n );\n logger.info(\n { branchName, oldTitle: autoclosedPr.title, newTitle, number },\n 'Successfully reopened autoclosed PR',\n );\n\n const result = coerceRestPr(ghPr);\n\n const localSha = git.getBranchCommit(branchName);\n if (localSha && localSha !== sha) {\n await git.forcePushToRemote(branchName, 'origin');\n result.sha = localSha;\n }\n\n cachePr(result);\n return result;\n } catch {\n logger.debug('Could not reopen autoclosed PR');\n return null;\n }\n}\n\nasync function getStatus(\n branchName: string,\n useCache = true,\n): Promise<CombinedBranchStatus> {\n const branch = escapeHash(branchName);\n const url = `repos/${config.repository}/commits/${branch}/status`;\n\n const { body: status } =\n await githubApi.getJsonUnchecked<CombinedBranchStatus>(url, {\n memCache: useCache,\n cacheProvider: repoCacheProvider,\n });\n\n return status;\n}\n\n// Returns the combined status for a branch.\nexport async function getBranchStatus(\n branchName: string,\n internalChecksAsSuccess: boolean,\n): Promise<BranchStatus> {\n logger.debug(`getBranchStatus(${branchName})`);\n let commitStatus: CombinedBranchStatus;\n try {\n commitStatus = await getStatus(branchName);\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug(\n 'Received 404 when checking branch status, assuming that branch has been deleted',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.debug('Unknown error when checking branch status');\n throw err;\n }\n logger.debug(\n { state: commitStatus.state, statuses: commitStatus.statuses },\n 'branch status check result',\n );\n if (commitStatus.statuses && !internalChecksAsSuccess) {\n commitStatus.statuses = commitStatus.statuses.filter(\n (status) =>\n status.state !== 'success' || !status.context?.startsWith('renovate/'),\n );\n if (!commitStatus.statuses.length) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n commitStatus.state = 'pending';\n }\n }\n let checkRuns: { name: string; status: string; conclusion: string }[] = [];\n // API is supported in oldest available GHE version 2.19\n try {\n const checkRunsUrl = `repos/${config.repository}/commits/${escapeHash(\n branchName,\n )}/check-runs?per_page=100`;\n const opts = {\n headers: {\n accept: 'application/vnd.github.antiope-preview+json',\n },\n paginate: true,\n paginationField: 'check_runs',\n cacheProvider: memCacheProvider,\n };\n const checkRunsRaw = (\n await githubApi.getJsonUnchecked<{\n check_runs: { name: string; status: string; conclusion: string }[];\n }>(checkRunsUrl, opts)\n ).body;\n if (checkRunsRaw.check_runs?.length) {\n checkRuns = checkRunsRaw.check_runs.map((run) => ({\n name: run.name,\n status: run.status,\n conclusion: run.conclusion,\n }));\n logger.debug({ checkRuns }, 'check runs result');\n } /* v8 ignore next */ else {\n logger.debug({ result: checkRunsRaw }, 'No check runs found');\n }\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (\n err.statusCode === 403 ||\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED\n ) {\n logger.debug('No permission to view check runs');\n } else {\n logger.warn({ err }, 'Error retrieving check runs');\n }\n }\n if (checkRuns.length === 0) {\n if (commitStatus.state === 'success') {\n return 'green';\n }\n if (commitStatus.state === 'failure') {\n return 'red';\n }\n return 'yellow';\n }\n if (\n commitStatus.state === 'failure' ||\n checkRuns.some((run) => run.conclusion === 'failure')\n ) {\n return 'red';\n }\n if (\n (commitStatus.state === 'success' || commitStatus.statuses.length === 0) &&\n checkRuns.every((run) =>\n ['skipped', 'neutral', 'success'].includes(run.conclusion),\n )\n ) {\n return 'green';\n }\n return 'yellow';\n}\n\nasync function getStatusCheck(\n branchName: string,\n useCache = true,\n): Promise<GhBranchStatus[]> {\n const branchCommit = git.getBranchCommit(branchName);\n\n const url = `repos/${config.repository}/commits/${branchCommit}/statuses`;\n\n const opts: GithubHttpOptions = useCache\n ? { cacheProvider: memCacheProvider }\n : { memCache: false };\n\n return (await githubApi.getJsonUnchecked<GhBranchStatus[]>(url, opts)).body;\n}\n\ntype GithubToRenovateStatusMapping = Record<string, BranchStatus>;\nconst githubToRenovateStatusMapping: GithubToRenovateStatusMapping = {\n success: 'green',\n error: 'red',\n failure: 'red',\n pending: 'yellow',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n try {\n const res = await getStatusCheck(branchName);\n for (const check of res) {\n if (check.context === context) {\n return githubToRenovateStatusMapping[check.state] || 'yellow';\n }\n }\n return null;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug('Commit not found when checking statuses');\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n /* v8 ignore next */\n if (config.parentRepo) {\n logger.debug('Cannot set branch status when in forking mode');\n return;\n }\n const existingStatus = await getBranchStatusCheck(branchName, context);\n if (existingStatus === state) {\n return;\n }\n logger.debug({ branch: branchName, context, state }, 'Setting branch status');\n let url: string | undefined;\n try {\n const branchCommit = git.getBranchCommit(branchName);\n url = `repos/${config.repository}/statuses/${branchCommit}`;\n const renovateToGitHubStateMapping = {\n green: 'success',\n yellow: 'pending',\n red: 'failure',\n };\n const options: any = {\n state: renovateToGitHubStateMapping[state],\n description,\n context,\n };\n if (targetUrl) {\n options.target_url = targetUrl;\n }\n await githubApi.postJson(url, { body: options });\n\n // update status cache\n await getStatus(branchName, false);\n await getStatusCheck(branchName, false);\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err, url }, 'Caught error setting branch status - aborting');\n throw new Error(REPOSITORY_CHANGED);\n }\n}\n\n// Issue\n\nasync function getIssues(): Promise<Issue[]> {\n const result = await githubApi.queryRepoField<unknown>(\n getIssuesQuery,\n 'issues',\n {\n variables: {\n owner: config.repositoryOwner,\n name: config.repositoryName,\n ...(!config.ignorePrAuthor && { user: config.renovateUsername }),\n },\n readOnly: true,\n },\n );\n\n logger.debug(`Retrieved ${result.length} issues`);\n return Issue.array().parse(result);\n}\n\nexport async function getIssueList(): Promise<Issue[]> {\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n return [];\n }\n let issueList = GithubIssueCache.getIssues();\n if (!issueList) {\n logger.debug('Retrieving issueList');\n issueList = await getIssues();\n GithubIssueCache.setIssues(issueList);\n }\n return issueList;\n}\n\nexport async function getIssue(number: number): Promise<Issue | null> {\n if (config.hasIssuesEnabled === false) {\n return null;\n }\n try {\n const repo = config.parentRepo ?? config.repository;\n const { body: issue } = await githubApi.getJson(\n `repos/${repo}/issues/${number}`,\n {\n cacheProvider: repoCacheProvider,\n },\n Issue,\n );\n GithubIssueCache.updateIssue(issue);\n return issue;\n } catch (err) {\n logger.debug({ err, number }, 'Error getting issue');\n if (err.response?.statusCode === 410) {\n logger.debug(`Issue #${number} has been deleted`);\n GithubIssueCache.deleteIssue(number);\n }\n return null;\n }\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n logger.debug(`findIssue(${title})`);\n const [issue] = (await getIssueList()).filter(\n (i) => i.state === 'open' && i.title === title,\n );\n if (!issue) {\n return null;\n }\n logger.debug(`Found issue ${issue.number}`);\n return getIssue(issue.number);\n}\n\nasync function closeIssue(issueNumber: number): Promise<void> {\n logger.debug(`closeIssue(${issueNumber})`);\n const repo = config.parentRepo ?? config.repository;\n const { body: closedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issueNumber}`,\n { body: { state: 'closed' } },\n Issue,\n );\n GithubIssueCache.updateIssue(closedIssue);\n}\n\nexport async function ensureIssue({\n title,\n reuseTitle,\n body: rawBody,\n labels,\n once = false,\n shouldReOpen = true,\n}: EnsureIssueConfig): Promise<EnsureIssueResult | null> {\n logger.debug(`ensureIssue(${title})`);\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n }\n const body = sanitize(rawBody);\n try {\n const issueList = await getIssueList();\n let issues = issueList.filter((i) => i.title === title);\n if (!issues.length) {\n issues = issueList.filter((i) => i.title === reuseTitle);\n if (issues.length) {\n logger.debug(`Reusing issue title: \"${reuseTitle}\"`);\n }\n }\n if (issues.length) {\n let issue = issues.find((i) => i.state === 'open');\n if (!issue) {\n if (once) {\n logger.debug('Issue already closed - skipping recreation');\n return null;\n }\n if (shouldReOpen) {\n logger.debug('Reopening previously closed issue');\n }\n issue = issues[issues.length - 1];\n }\n for (const i of issues) {\n if (i.state === 'open' && i.number !== issue.number) {\n logger.warn({ issueNo: i.number }, 'Closing duplicate issue');\n await closeIssue(i.number);\n }\n }\n\n const repo = config.parentRepo ?? config.repository;\n const { body: serverIssue } = await githubApi.getJson(\n `repos/${repo}/issues/${issue.number}`,\n { cacheProvider: repoCacheProvider },\n Issue,\n );\n GithubIssueCache.updateIssue(serverIssue);\n\n if (\n issue.title === title &&\n serverIssue.body === body &&\n issue.state === 'open'\n ) {\n logger.debug('Issue is open and up to date - nothing to do');\n return null;\n }\n if (shouldReOpen || issue.state === 'open') {\n logger.debug('Patching issue');\n const data: Record<string, unknown> = { body, state: 'open', title };\n if (labels) {\n data.labels = labels;\n }\n const repo = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issue.number}`,\n { body: data },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n logger.debug('Issue updated');\n return 'updated';\n }\n }\n const { body: createdIssue } = await githubApi.postJson(\n `repos/${config.parentRepo ?? config.repository}/issues`,\n {\n body: {\n title,\n body,\n labels: labels ?? [],\n },\n },\n Issue,\n );\n logger.info('Issue created');\n // reset issueList so that it will be fetched again as-needed\n GithubIssueCache.updateIssue(createdIssue);\n return 'created';\n } catch (err) /* v8 ignore next */ {\n if (err.body?.message?.startsWith('Issues are disabled for this repo')) {\n logger.debug(`Issues are disabled, so could not create issue: ${title}`);\n } else {\n logger.warn({ err }, 'Could not ensure issue');\n }\n }\n return null;\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n logger.trace(`ensureIssueClosing(${title})`);\n /* v8 ignore next */\n if (config.hasIssuesEnabled === false) {\n return;\n }\n const issueList = await getIssueList();\n for (const issue of issueList) {\n if (issue.state === 'open' && issue.title === title) {\n await closeIssue(issue.number);\n logger.debug(`Issue closed, issueNo: ${issue.number}`);\n }\n }\n}\n\nasync function tryAddMilestone(\n issueNo: number,\n milestoneNo: number | undefined,\n): Promise<void> {\n if (!milestoneNo) {\n return;\n }\n\n logger.debug(\n {\n milestone: milestoneNo,\n pr: issueNo,\n },\n 'Adding milestone to PR',\n );\n try {\n const repo = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.patchJson(\n `repos/${repo}/issues/${issueNo}`,\n { body: { milestone: milestoneNo } },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n } catch (err) {\n /* v8 ignore next */\n const actualError = err.response?.body ?? err;\n logger.warn(\n {\n milestone: milestoneNo,\n pr: issueNo,\n err: actualError,\n },\n 'Unable to add milestone to PR',\n );\n }\n}\n\nexport async function addAssignees(\n issueNo: number,\n assignees: string[],\n): Promise<void> {\n logger.debug(`Adding assignees '${assignees.join(', ')}' to #${issueNo}`);\n const repository = config.parentRepo ?? config.repository;\n const { body: updatedIssue } = await githubApi.postJson(\n `repos/${repository}/issues/${issueNo}/assignees`,\n { body: { assignees } },\n Issue,\n );\n GithubIssueCache.updateIssue(updatedIssue);\n}\n\nexport async function addReviewers(\n prNo: number,\n reviewers: string[],\n): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers.join(', ')}' to #${prNo}`);\n\n const userReviewers = reviewers.filter((e) => !e.startsWith('team:'));\n const teamReviewers = reviewers\n .filter((e) => e.startsWith('team:'))\n .map((e) => e.replace(regEx(/^team:/), ''));\n try {\n await githubApi.postJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/pulls/${prNo}/requested_reviewers`,\n {\n body: {\n reviewers: userReviewers,\n team_reviewers: teamReviewers,\n },\n },\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Failed to assign reviewer');\n }\n}\n\nexport async function addLabels(\n issueNo: number,\n labels: string[] | null | undefined,\n): Promise<void> {\n logger.debug(`Adding labels '${labels?.join(', ')}' to #${issueNo}`);\n try {\n const repository = config.parentRepo ?? config.repository;\n if (isArray(labels) && labels.length) {\n await githubApi.postJson(`repos/${repository}/issues/${issueNo}/labels`, {\n body: labels,\n });\n }\n } catch (err) /* v8 ignore next */ {\n logger.warn(\n { err, issueNo, labels },\n 'Error while adding labels. Skipping',\n );\n }\n}\n\nexport async function deleteLabel(\n issueNo: number,\n label: string,\n): Promise<void> {\n logger.debug(`Deleting label ${label} from #${issueNo}`);\n const repository = config.parentRepo ?? config.repository;\n try {\n await githubApi.deleteJson(\n `repos/${repository}/issues/${issueNo}/labels/${label}`,\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err, issueNo, label }, 'Failed to delete label');\n }\n}\n\nasync function addComment(issueNo: number, body: string): Promise<void> {\n // POST /repos/:owner/:repo/issues/:number/comments\n await githubApi.postJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/${issueNo}/comments`,\n {\n body: { body },\n },\n );\n}\n\nasync function editComment(commentId: number, body: string): Promise<void> {\n // PATCH /repos/:owner/:repo/issues/comments/:id\n await githubApi.patchJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/comments/${commentId}`,\n {\n body: { body },\n },\n );\n}\n\nasync function deleteComment(commentId: number): Promise<void> {\n // DELETE /repos/:owner/:repo/issues/comments/:id\n await githubApi.deleteJson(\n `repos/${\n config.parentRepo ?? config.repository\n }/issues/comments/${commentId}`,\n );\n}\n\nasync function getComments(issueNo: number): Promise<Comment[]> {\n // GET /repos/:owner/:repo/issues/:number/comments\n logger.debug(`Getting comments for #${issueNo}`);\n const repo = config.parentRepo ?? config.repository;\n const url = `repos/${repo}/issues/${issueNo}/comments?per_page=100`;\n try {\n const { body: comments } = await githubApi.getJsonUnchecked<Comment[]>(\n url,\n {\n paginate: true,\n cacheProvider: repoCacheProvider,\n },\n );\n logger.debug(`Found ${comments.length} comments`);\n return comments;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n logger.debug('404 response when retrieving comments');\n throw new ExternalHostError(err, 'github');\n }\n throw err;\n }\n}\n\nexport async function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n const sanitizedContent = sanitize(content);\n try {\n const comments = await getComments(number);\n let body: string;\n let commentId: number | null = null;\n let commentNeedsUpdating = false;\n if (topic) {\n logger.debug(`Ensuring comment \"${topic}\" in #${number}`);\n body = `### ${topic}\\n\\n${sanitizedContent}`;\n comments.forEach((comment) => {\n if (comment.body.startsWith(`### ${topic}\\n\\n`)) {\n commentId = comment.id;\n commentNeedsUpdating = comment.body !== body;\n }\n });\n } else {\n logger.debug(`Ensuring content-only comment in #${number}`);\n body = `${sanitizedContent}`;\n comments.forEach((comment) => {\n if (comment.body === body) {\n commentId = comment.id;\n commentNeedsUpdating = false;\n }\n });\n }\n if (!commentId) {\n await addComment(number, body);\n logger.info(\n { repository: config.repository, issueNo: number, topic },\n 'Comment added',\n );\n } else if (commentNeedsUpdating) {\n await editComment(commentId, body);\n logger.debug(\n { repository: config.repository, issueNo: number },\n 'Comment updated',\n );\n } else {\n logger.debug('Comment is already update-to-date');\n }\n return true;\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n if (err.body?.message?.includes('is locked')) {\n logger.debug('Issue is locked - cannot add comment');\n } else {\n logger.warn({ err }, 'Error ensuring comment');\n }\n return false;\n }\n}\n\nexport async function ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n const { number: issueNo } = deleteConfig;\n const key =\n deleteConfig.type === 'by-topic'\n ? deleteConfig.topic\n : deleteConfig.content;\n logger.trace(`Ensuring comment \"${key}\" in #${issueNo} is removed`);\n const comments = await getComments(issueNo);\n let commentId: number | null | undefined = null;\n\n if (deleteConfig.type === 'by-topic') {\n const byTopic = (comment: Comment): boolean =>\n comment.body.startsWith(`### ${deleteConfig.topic}\\n\\n`);\n commentId = comments.find(byTopic)?.id;\n } else if (deleteConfig.type === 'by-content') {\n const byContent = (comment: Comment): boolean =>\n comment.body.trim() === deleteConfig.content;\n commentId = comments.find(byContent)?.id;\n }\n\n try {\n if (commentId) {\n logger.debug(`Removing comment from issueNo: ${issueNo}`);\n await deleteComment(commentId);\n }\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error deleting comment');\n }\n}\n\n// Pull Request\n\nasync function tryPrAutomerge(\n prNumber: number,\n prNodeId: string,\n platformPrOptions: PlatformPrOptions | undefined,\n): Promise<void> {\n if (!platformPrOptions?.usePlatformAutomerge) {\n return;\n }\n\n // If GitHub Enterprise Server <3.3.0 it doesn't support automerge\n // TODO #22198\n if (platformConfig.isGhe) {\n // semver not null safe, accepts null and undefined\n if (semver.satisfies(platformConfig.gheVersion!, '<3.3.0')) {\n logger.debug(\n { prNumber },\n 'GitHub-native automerge: not supported on this version of GHE. Use 3.3.0 or newer.',\n );\n return;\n }\n }\n\n if (!config.autoMergeAllowed) {\n logger.debug(\n { prNumber },\n 'GitHub-native automerge: not enabled in repo settings',\n );\n return;\n }\n\n try {\n const mergeMethod = config.mergeMethod?.toUpperCase() || 'MERGE';\n const variables = { pullRequestId: prNodeId, mergeMethod };\n const queryOptions = { variables };\n\n const res = await githubApi.requestGraphql<GhAutomergeResponse>(\n enableAutoMergeMutation,\n queryOptions,\n );\n\n if (res?.errors) {\n logger.debug(\n { prNumber, errors: res.errors },\n 'GitHub-native automerge: fail',\n );\n return;\n }\n\n logger.debug(`GitHub-native automerge: success...PrNo: ${prNumber}`);\n } catch (err) /* v8 ignore next: missing test #22198 */ {\n logger.warn({ prNumber, err }, 'GitHub-native automerge: REST API error');\n }\n}\n\n// Creates PR and returns PR number\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: rawBody,\n labels,\n draftPR = false,\n platformPrOptions,\n milestone,\n}: CreatePRConfig): Promise<GhPr | null> {\n const body = sanitize(rawBody);\n const base = targetBranch;\n // Include the repository owner to handle forkToken and regular mode\n // TODO: can `repository` be null? (#22198)\n\n const head = `${config.repository!.split('/')[0]}:${sourceBranch}`;\n const options: any = {\n body: {\n title,\n head,\n base,\n body,\n draft: draftPR,\n },\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n options.body.maintainer_can_modify =\n !config.forkOrg &&\n platformPrOptions?.forkModeDisallowMaintainerEdits !== true;\n }\n logger.debug({ title, head, base, draft: draftPR }, 'Creating PR');\n const ghPr = (\n await githubApi.postJson<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls`,\n options,\n )\n ).body;\n logger.debug(\n { branch: sourceBranch, pr: ghPr.number, draft: draftPR },\n 'PR created',\n );\n\n const result = coerceRestPr(ghPr);\n const { number, node_id } = result;\n\n await addLabels(number, labels);\n await tryAddMilestone(number, milestone);\n await tryPrAutomerge(number, node_id, platformPrOptions);\n\n cachePr(result);\n return result;\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: rawBody,\n addLabels: labelsToAdd,\n removeLabels,\n state,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n const body = sanitize(rawBody);\n const patchBody: any = { title };\n if (body) {\n patchBody.body = body;\n }\n if (targetBranch) {\n patchBody.base = targetBranch;\n }\n if (state) {\n patchBody.state = state;\n }\n const options: any = {\n body: patchBody,\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n }\n\n // Update PR labels\n try {\n if (labelsToAdd) {\n await addLabels(prNo, labelsToAdd);\n }\n\n if (removeLabels) {\n for (const label of removeLabels) {\n await deleteLabel(prNo, label);\n }\n }\n\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.parentRepo ?? config.repository}/pulls/${prNo}`,\n options,\n );\n const result = coerceRestPr(ghPr);\n cachePr(result);\n logger.debug(`PR updated...prNo: ${prNo}`);\n } catch (err) /* v8 ignore next */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.warn({ err }, 'Error updating PR');\n }\n}\n\nexport async function reattemptPlatformAutomerge({\n number,\n platformPrOptions,\n}: ReattemptPlatformAutomergeConfig): Promise<void> {\n try {\n const result = (await getPr(number))!;\n const { node_id } = result;\n\n await tryPrAutomerge(number, node_id, platformPrOptions);\n\n logger.debug(`PR platform automerge re-attempted...prNo: ${number}`);\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n }\n}\n\nexport async function mergePr({\n branchName,\n id: prNo,\n strategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${prNo}, ${branchName})`);\n const url = `repos/${\n config.parentRepo ?? config.repository\n }/pulls/${prNo}/merge`;\n const options: GithubHttpOptions = {\n body: {},\n };\n /* v8 ignore next */\n if (config.forkToken) {\n options.token = config.forkToken;\n }\n let automerged = false;\n let automergeResult: HttpResponse<unknown>;\n const mergeStrategy = mapMergeStartegy(strategy) ?? config.mergeMethod;\n\n if (mergeStrategy) {\n // This path is taken if we have auto-detected the allowed merge types from the repo or\n // automergeStrategy is configured by user\n options.body.merge_method = mergeStrategy;\n try {\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n automerged = true;\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404 || err.statusCode === 405) {\n const body = err.response?.body;\n if (\n isNonEmptyString(body?.message) &&\n regEx(/^Required status check \".+\" is expected\\.$/).test(body.message)\n ) {\n logger.debug(\n { response: body },\n `GitHub blocking PR merge -- Missing required status check(s)`,\n );\n return false;\n }\n if (\n isNonEmptyString(body?.message) &&\n (body.message.includes('approving review') ||\n body.message.includes('code owner review'))\n ) {\n logger.debug(\n { response: body },\n `GitHub blocking PR merge -- Needs approving review(s)`,\n );\n return false;\n }\n logger.debug(\n { response: body },\n 'GitHub blocking PR merge -- will keep trying',\n );\n } else {\n logger.warn(\n { mergeMethod: config.mergeMethod, err },\n 'Failed to merge PR',\n );\n return false;\n }\n }\n }\n if (!automerged) {\n // We need to guess the merge method and try squash -> merge -> rebase\n options.body.merge_method = 'squash';\n try {\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err1) {\n logger.debug({ err: err1 }, `Failed to squash merge PR`);\n try {\n options.body.merge_method = 'merge';\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err2) {\n logger.debug({ err: err2 }, `Failed to merge commit PR`);\n try {\n options.body.merge_method = 'rebase';\n logger.debug({ options, url }, `mergePr`);\n automergeResult = await githubApi.putJson(url, options);\n } catch (err3) {\n logger.debug({ err: err3 }, `Failed to rebase merge PR`);\n logger.info({ pr: prNo }, 'All merge attempts failed');\n return false;\n }\n }\n }\n }\n logger.debug(\n { automergeResult: automergeResult!.body, pr: prNo },\n 'PR merged',\n );\n const cachedPr = config.prList?.find(({ number }) => number === prNo);\n if (cachedPr) {\n cachePr({ ...cachedPr, state: 'merged' });\n }\n return true;\n}\n\nexport function massageMarkdown(input: string): string {\n if (platformConfig.isGhe) {\n return smartTruncate(input, maxBodyLength());\n }\n const massagedInput = massageMarkdownLinks(input)\n // to be safe, replace all github.com links with redirect.github.com\n .replace(\n regEx(/href=\"https?:\\/\\/github.com\\//g),\n 'href=\"https://redirect.github.com/',\n )\n .replace(\n regEx(/]\\(https:\\/\\/github\\.com\\//g),\n '](https://redirect.github.com/',\n )\n .replace(\n regEx(/]: https:\\/\\/github\\.com\\//g),\n ']: https://redirect.github.com/',\n )\n .replaceAll('> ℹ **Note**\\n> \\n', '> [!NOTE]\\n')\n .replaceAll('> ℹ️ **Note**\\n> \\n', '> [!NOTE]\\n')\n .replaceAll('> ⚠ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replaceAll('> ⚠️ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replaceAll('> ❗ **Caution**\\n> \\n', '> [!CAUTION]\\n')\n .replaceAll('> ❗ **Important**\\n> \\n', '> [!IMPORTANT]\\n');\n return smartTruncate(massagedInput, maxBodyLength());\n}\n\nexport function maxBodyLength(): number {\n return GitHubMaxPrBodyLen;\n}\n\nexport async function getVulnerabilityAlerts(): Promise<VulnerabilityAlert[]> {\n /* v8 ignore next */\n if (config.hasVulnerabilityAlertsEnabled === false) {\n logger.debug('No vulnerability alerts enabled for repo');\n return [];\n }\n let vulnerabilityAlerts: VulnerabilityAlert[] | undefined;\n try {\n vulnerabilityAlerts = (\n await githubApi.getJson(\n `/repos/${config.repositoryOwner}/${config.repositoryName}/dependabot/alerts?state=open&direction=asc&per_page=100`,\n {\n paginate: true,\n headers: { accept: 'application/vnd.github+json' },\n cacheProvider: repoCacheProvider,\n },\n GithubVulnerabilityAlert,\n )\n ).body;\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, 'Error retrieving vulnerability alerts');\n logger.warn(\n {\n url: 'https://docs.renovatebot.com/configuration-options/#vulnerabilityalerts',\n },\n 'Cannot access vulnerability alerts. Please ensure permissions have been granted.',\n );\n }\n try {\n if (vulnerabilityAlerts?.length) {\n const shortAlerts: AggregatedVulnerabilities = {};\n logger.trace(\n { alerts: vulnerabilityAlerts },\n 'GitHub vulnerability details',\n );\n for (const alert of vulnerabilityAlerts) {\n if (alert.security_vulnerability === null) {\n // As described in the documentation, there are cases in which\n // GitHub API responds with `\"securityVulnerability\": null`.\n // But it's may be faulty, so skip processing it here.\n continue;\n }\n const {\n package: { name, ecosystem },\n vulnerable_version_range: vulnerableVersionRange,\n first_patched_version: firstPatchedVersion,\n } = alert.security_vulnerability;\n const patch = firstPatchedVersion?.identifier;\n\n const normalizedName = normalizeNamePerEcosystem({ name, ecosystem });\n alert.security_vulnerability.package.name = normalizedName;\n const key = `${ecosystem.toLowerCase()}/${normalizedName}`;\n const range = vulnerableVersionRange;\n const elem = shortAlerts[key] || {};\n elem[range] = coerceToNull(patch);\n shortAlerts[key] = elem;\n }\n logger.debug({ alerts: shortAlerts }, 'GitHub vulnerability details');\n } else {\n logger.debug('No vulnerability alerts found');\n }\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, 'Error processing vulnerabity alerts');\n }\n return vulnerabilityAlerts ?? [];\n}\n\nasync function pushFiles(\n { branchName, message }: CommitFilesConfig,\n { parentCommitSha, commitSha }: CommitResult,\n): Promise<LongCommitSha | null> {\n try {\n // Push the commit to GitHub using a custom ref\n // The associated blobs will be pushed automatically\n await pushCommitToRenovateRef(commitSha, branchName);\n // Get all the blobs which the commit/tree points to\n // The blob SHAs will be the same locally as on GitHub\n const treeItems = await listCommitTree(commitSha);\n\n // For reasons unknown, we need to recreate our tree+commit on GitHub\n // Attempting to reuse the tree or commit SHA we pushed does not work\n const treeRes = await githubApi.postJson<{ sha: string }>(\n `/repos/${config.repository}/git/trees`,\n { body: { tree: treeItems } },\n );\n const treeSha = treeRes.body.sha;\n\n // Now we recreate the commit using the tree we recreated the step before\n const commitRes = await githubApi.postJson<{ sha: string }>(\n `/repos/${config.repository}/git/commits`,\n { body: { message, tree: treeSha, parents: [parentCommitSha] } },\n );\n incLimitedValue('Commits');\n const remoteCommitSha = commitRes.body.sha as LongCommitSha;\n await ensureBranchSha(branchName, remoteCommitSha);\n return remoteCommitSha;\n } catch (err) {\n logger.debug({ branchName, err }, 'Platform-native commit: unknown error');\n return null;\n }\n}\n\nexport async function commitFiles(\n config: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n const commitResult = await git.prepareCommit(config); // Commit locally and don't push\n const { branchName, files } = config;\n if (!commitResult) {\n logger.debug(\n { branchName, files: files.map(({ path }) => path) },\n `Platform-native commit: unable to prepare for commit`,\n );\n return null;\n }\n // Perform the commits using REST API\n const pushResult = await pushFiles(config, commitResult);\n if (!pushResult) {\n return null;\n }\n // Replace locally created branch with the remotely created one\n // and return the remote commit SHA\n await git.resetToCommit(commitResult.parentCommitSha);\n const commitSha = await git.fetchBranch(branchName);\n return commitSha;\n}\n"]}
@@ -11,6 +11,7 @@ const global_1 = require("../../config/global");
11
11
  const logger_1 = require("../../logger");
12
12
  const platform_1 = require("../../modules/platform");
13
13
  const array_1 = require("../../util/array");
14
+ const emoji_1 = require("../../util/emoji");
14
15
  const regex_1 = require("../../util/regex");
15
16
  const string_1 = require("../../util/string");
16
17
  const template = tslib_1.__importStar(require("../../util/template"));
@@ -320,7 +321,7 @@ async function ensureDependencyDashboard(config, allBranches, packageFiles = {},
320
321
  issueBody = appendRepoProblems(config, issueBody);
321
322
  if (hasDeprecationsOrReplacements) {
322
323
  issueBody += '## Deprecations / Replacements\n';
323
- issueBody += '> ⚠️ **Warning**\n> \n';
324
+ issueBody += (0, emoji_1.emojify)('> :warning: **Warning**\n> \n');
324
325
  issueBody +=
325
326
  'These dependencies are either deprecated or have replacements available:\n\n';
326
327
  issueBody += '| Datasource | Name | Replacement PR? |\n';
@@ -436,9 +437,9 @@ function getAbandonedPackagesMd(packageFiles) {
436
437
  if (abandonedCount === 0) {
437
438
  return '';
438
439
  }
439
- let abandonedMd = '> **Note**\n> \n';
440
+ let abandonedMd = (0, emoji_1.emojify)('> :information_source: **Note**\n> \n');
440
441
  abandonedMd +=
441
- 'These dependencies have not received updates for an extended period and may be unmaintained:\n\n';
442
+ '> These dependencies have not received updates for an extended period and may be unmaintained:\n\n';
442
443
  abandonedMd += '<details>\n';
443
444
  abandonedMd += `<summary>View abandoned dependencies (${abandonedCount})</summary>\n\n`;
444
445
  abandonedMd += '| Datasource | Name | Last Updated |\n';
@@ -486,13 +487,14 @@ async function getDashboardMarkdownVulnerabilities(config, packageFiles) {
486
487
  }
487
488
  const unresolvedVulnerabilities = vulnerabilities.filter((value) => (0, is_1.isNullOrUndefined)(value.fixedVersion));
488
489
  const resolvedVulnerabilitiesLength = vulnerabilities.length - unresolvedVulnerabilities.length;
489
- result += `\`${resolvedVulnerabilitiesLength}\`/\`${vulnerabilities.length}\``;
490
+ result += (0, emoji_1.emojify)('> :exclamation: **Important**\n> \n');
491
+ result += `> \`${resolvedVulnerabilitiesLength}\`/\`${vulnerabilities.length}\``;
490
492
  if ((0, is_1.isTruthy)(config.osvVulnerabilityAlerts)) {
491
493
  result += ' CVEs have Renovate fixes.\n\n';
492
494
  }
493
495
  else {
494
496
  result +=
495
- ' CVEs have possible Renovate fixes.\nSee [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\n\n';
497
+ ' CVEs have possible Renovate fixes.\n> See [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\n\n';
496
498
  }
497
499
  let renderedVulnerabilities;
498
500
  switch (config.dependencyDashboardOSVVulnerabilitySummary) {
@@ -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 {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isNullOrUndefined,\n isTruthy,\n} 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 dependencyDashboardAllAwaitingSchedule: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unlimit-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('approve-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst awaitingScheduleRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unschedule-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst generalBranchRe = regEx(\n ` ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n);\nconst markedBranchesRe = regEx(\n ` - \\\\[x\\\\] ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n 'g',\n);\n\nconst approveAllPendingPrs = 'approve-all-pending-prs';\nconst createAllRateLimitedPrs = 'create-all-rate-limited-prs';\nconst createAllAwaitingSchedulePrs = 'create-all-awaiting-schedule-prs';\nconst createConfigMigrationPr = 'create-config-migration-pr';\nconst configMigrationPrInfo = 'config-migration-pr-info';\nconst rebaseAllOpenPrs = 'rebase-all-open-prs';\n\nfunction getMarkdownComment(comment: string): string {\n return `<!-- ${comment} -->`;\n}\n\nfunction isBoxChecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type, true));\n}\n\nfunction isBoxUnchecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type));\n}\n\nfunction getCheckbox(type: string, checked = false): string {\n return ` - [${checked ? 'x' : ' '}] ${getMarkdownComment(type)}`;\n}\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllRateLimitedPrs);\n}\n\nfunction checkOpenAllAwaitingSchedulePR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllAwaitingSchedulePrs);\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, approveAllPendingPrs);\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return isBoxChecked(issueBody, rebaseAllOpenPrs);\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes(getMarkdownComment(configMigrationPrInfo))) {\n return 'migration-pr-exists';\n }\n\n if (isBoxChecked(issueBody, createConfigMigrationPr)) {\n return 'checked';\n }\n\n if (isBoxUnchecked(issueBody, createConfigMigrationPr)) {\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 (checkOpenAllAwaitingSchedulePR(issueBody)) {\n for (const match of issueBody.matchAll(awaitingScheduleRe)) {\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 dependencyDashboardAllAwaitingSchedule =\n checkOpenAllAwaitingSchedulePR(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 dependencyDashboardAllAwaitingSchedule,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllAwaitingSchedule: false,\n dependencyDashboardAllPending: 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 = getCheckbox(`${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 splitBranchesByCategory(filteredBranches: BranchConfig[]): {\n categories: Record<string, BranchConfig[]>;\n uncategorized: BranchConfig[];\n hasCategorized: boolean;\n hasUncategorized: boolean;\n} {\n const categories: Record<string, BranchConfig[]> = {};\n const uncategorized: BranchConfig[] = [];\n let hasCategorized = false;\n let hasUncategorized = false;\n for (const branch of filteredBranches) {\n if (branch.dependencyDashboardCategory) {\n categories[branch.dependencyDashboardCategory] ??= [];\n categories[branch.dependencyDashboardCategory].push(branch);\n hasCategorized = true;\n continue;\n }\n uncategorized.push(branch);\n hasUncategorized = true;\n }\n return { categories, uncategorized, hasCategorized, hasUncategorized };\n}\n\nfunction getBranchList(branches: BranchConfig[], listItemType: string): string {\n return branches\n .map((branch: BranchConfig): string => getListItem(branch, listItemType))\n .join('');\n}\n\nfunction getBranchesListMd(\n branches: BranchConfig[],\n predicate: (\n value: BranchConfig,\n index: number,\n array: BranchConfig[],\n ) => unknown,\n title: string,\n description: string,\n listItemType = 'approvePr',\n bulkComment?: string,\n bulkMessage?: string,\n bulkIcon?: '🔐',\n): string {\n const filteredBranches = branches.filter(predicate);\n if (filteredBranches.length === 0) {\n return '';\n }\n let result = `## ${title}\\n\\n${description}\\n\\n`;\n const { categories, uncategorized, hasCategorized, hasUncategorized } =\n splitBranchesByCategory(filteredBranches);\n if (hasCategorized) {\n for (const [category, branches] of Object.entries(categories).sort(\n ([keyA], [keyB]) =>\n keyA.localeCompare(keyB, undefined, { numeric: true }),\n )) {\n result = result.trimEnd() + '\\n\\n';\n result += `### ${category}\\n\\n`;\n result += getBranchList(branches, listItemType);\n }\n if (hasUncategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += `### Others`;\n }\n }\n result = result.trimEnd() + '\\n\\n';\n result += getBranchList(uncategorized, listItemType);\n\n if (bulkComment && bulkMessage && filteredBranches.length > 1) {\n if (hasCategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += '### All\\n\\n';\n }\n result += getCheckbox(bulkComment);\n result += `${bulkIcon ? bulkIcon + ' ' : ''}**${bulkMessage}**${bulkIcon ? ' ' + bulkIcon : ''}`;\n }\n return result.trimEnd() + '\\n\\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 or replacements\n let hasDeprecationsOrReplacements = false;\n const deprecatedPackages: Record<string, Record<string, boolean>> = {};\n logger.debug('Checking packageFiles for deprecated or replacement packages');\n if (isNonEmptyObject(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 hasDeprecationsOrReplacements = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= hasReplacement;\n }\n }\n }\n }\n }\n\n const hasBranches = isNonEmptyArray(branches);\n if (\n config.dependencyDashboardAutoclose &&\n !hasBranches &&\n !hasDeprecationsOrReplacements\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 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 getMarkdownComment(configMigrationPrInfo) +\n ` See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (Blocked)\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` 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 getCheckbox(createConfigMigrationPr) +\n ' 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 (hasDeprecationsOrReplacements) {\n issueBody += '## Deprecations / Replacements\\n';\n issueBody += '> ⚠️ **Warning**\\n> \\n';\n issueBody +=\n 'These dependencies are either deprecated or have replacements available:\\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 ? '![Available](https://img.shields.io/badge/available-green?style=flat-square)'\n : '![Unavailable](https://img.shields.io/badge/unavailable-orange?style=flat-square)'\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-approval',\n 'Pending Approval',\n 'The following branches are pending approval. To create them, click on a checkbox below.',\n 'approve',\n approveAllPendingPrs,\n 'Create all pending approval PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'minimum-group-size-not-met',\n 'Group Size Not Met',\n 'The following branches have not met their minimum group size. To create them, click on a checkbox below.',\n 'approveGroup',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'not-scheduled',\n 'Awaiting Schedule',\n 'The following updates are awaiting their schedule. To get an update now, click on a checkbox below.',\n 'unschedule',\n createAllAwaitingSchedulePrs,\n 'Create all awaiting schedule PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-limit-reached',\n 'Rate-Limited',\n 'The following updates are currently rate-limited. To force their creation now, click on a checkbox below.',\n 'unlimit',\n createAllRateLimitedPrs,\n 'Create all rate-limited PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'error',\n 'Errored',\n 'The following updates encountered an error and will be retried. To force a retry now, click on a checkbox below.',\n 'retry',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-pr-approval',\n 'PR Creation Approval Required',\n 'The following branches exist but PR creation requires approval. To approve PR creation, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pr-edited',\n 'PR Edited (Blocked)',\n 'The following updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox below.',\n 'rebase',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pending',\n 'Pending Status Checks',\n 'The following updates await pending status checks. To force their creation now, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n 'Pending Branch Automerge',\n 'The following updates await pending status checks before automerging. To abort the branch automerge and create a PR instead, click on a checkbox below.',\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 'minimum-group-size-not-met',\n ];\n const inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n 'Other Branches',\n 'The following updates are pending. To force the creation of a PR, click on a checkbox below.',\n 'other',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => branch.prNo && !branch.prBlockedBy,\n 'Open',\n 'The following updates have all been created. To force a retry/rebase of any, click on a checkbox below.',\n 'rebase',\n rebaseAllOpenPrs,\n 'Click on this checkbox to rebase all open PRs at once',\n );\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'already-existed',\n 'PR Closed (Blocked)',\n 'The following updates are blocked by an existing closed PR. To recreate the PR, click on a checkbox below.',\n 'recreate',\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 = getCheckbox(\n `${dependencyDashboardChecks[branchName]}-branch=${branchName}`,\n );\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 isNullOrUndefined(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 isNullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += `\\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (isTruthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n\\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\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 (isNullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (isNullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n isNullOrUndefined(\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 = isNonEmptyString(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 {\n isNonEmptyArray,\n isNonEmptyObject,\n isNonEmptyString,\n isNullOrUndefined,\n isTruthy,\n} 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 { emojify } from '../../util/emoji';\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 dependencyDashboardAllAwaitingSchedule: boolean;\n}\n\nconst rateLimitedRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unlimit-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst pendingApprovalRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('approve-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst awaitingScheduleRe = regEx(\n ` - \\\\[ \\\\] ${getMarkdownComment('unschedule-branch=([^\\\\s]+)')}`,\n 'g',\n);\nconst generalBranchRe = regEx(\n ` ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n);\nconst markedBranchesRe = regEx(\n ` - \\\\[x\\\\] ${getMarkdownComment('([a-zA-Z]+)-branch=([^\\\\s]+)')}`,\n 'g',\n);\n\nconst approveAllPendingPrs = 'approve-all-pending-prs';\nconst createAllRateLimitedPrs = 'create-all-rate-limited-prs';\nconst createAllAwaitingSchedulePrs = 'create-all-awaiting-schedule-prs';\nconst createConfigMigrationPr = 'create-config-migration-pr';\nconst configMigrationPrInfo = 'config-migration-pr-info';\nconst rebaseAllOpenPrs = 'rebase-all-open-prs';\n\nfunction getMarkdownComment(comment: string): string {\n return `<!-- ${comment} -->`;\n}\n\nfunction isBoxChecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type, true));\n}\n\nfunction isBoxUnchecked(issueBody: string, type: string): boolean {\n return issueBody.includes(getCheckbox(type));\n}\n\nfunction getCheckbox(type: string, checked = false): string {\n return ` - [${checked ? 'x' : ' '}] ${getMarkdownComment(type)}`;\n}\n\nfunction checkOpenAllRateLimitedPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllRateLimitedPrs);\n}\n\nfunction checkOpenAllAwaitingSchedulePR(issueBody: string): boolean {\n return isBoxChecked(issueBody, createAllAwaitingSchedulePrs);\n}\n\nfunction checkApproveAllPendingPR(issueBody: string): boolean {\n return isBoxChecked(issueBody, approveAllPendingPrs);\n}\n\nfunction checkRebaseAll(issueBody: string): boolean {\n return isBoxChecked(issueBody, rebaseAllOpenPrs);\n}\n\nfunction getConfigMigrationCheckboxState(\n issueBody: string,\n): 'no-checkbox' | 'checked' | 'unchecked' | 'migration-pr-exists' {\n if (issueBody.includes(getMarkdownComment(configMigrationPrInfo))) {\n return 'migration-pr-exists';\n }\n\n if (isBoxChecked(issueBody, createConfigMigrationPr)) {\n return 'checked';\n }\n\n if (isBoxUnchecked(issueBody, createConfigMigrationPr)) {\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 (checkOpenAllAwaitingSchedulePR(issueBody)) {\n for (const match of issueBody.matchAll(awaitingScheduleRe)) {\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 dependencyDashboardAllAwaitingSchedule =\n checkOpenAllAwaitingSchedulePR(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 dependencyDashboardAllAwaitingSchedule,\n dependencyDashboardAllPending,\n dependencyDashboardAllRateLimited,\n };\n}\n\nexport async function readDashboardBody(\n config: SelectAllConfig,\n): Promise<void> {\n let dashboardChecks: DependencyDashboard = {\n dependencyDashboardChecks: {},\n dependencyDashboardRebaseAllOpen: false,\n dependencyDashboardAllAwaitingSchedule: false,\n dependencyDashboardAllPending: 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 = getCheckbox(`${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 splitBranchesByCategory(filteredBranches: BranchConfig[]): {\n categories: Record<string, BranchConfig[]>;\n uncategorized: BranchConfig[];\n hasCategorized: boolean;\n hasUncategorized: boolean;\n} {\n const categories: Record<string, BranchConfig[]> = {};\n const uncategorized: BranchConfig[] = [];\n let hasCategorized = false;\n let hasUncategorized = false;\n for (const branch of filteredBranches) {\n if (branch.dependencyDashboardCategory) {\n categories[branch.dependencyDashboardCategory] ??= [];\n categories[branch.dependencyDashboardCategory].push(branch);\n hasCategorized = true;\n continue;\n }\n uncategorized.push(branch);\n hasUncategorized = true;\n }\n return { categories, uncategorized, hasCategorized, hasUncategorized };\n}\n\nfunction getBranchList(branches: BranchConfig[], listItemType: string): string {\n return branches\n .map((branch: BranchConfig): string => getListItem(branch, listItemType))\n .join('');\n}\n\nfunction getBranchesListMd(\n branches: BranchConfig[],\n predicate: (\n value: BranchConfig,\n index: number,\n array: BranchConfig[],\n ) => unknown,\n title: string,\n description: string,\n listItemType = 'approvePr',\n bulkComment?: string,\n bulkMessage?: string,\n bulkIcon?: '🔐',\n): string {\n const filteredBranches = branches.filter(predicate);\n if (filteredBranches.length === 0) {\n return '';\n }\n let result = `## ${title}\\n\\n${description}\\n\\n`;\n const { categories, uncategorized, hasCategorized, hasUncategorized } =\n splitBranchesByCategory(filteredBranches);\n if (hasCategorized) {\n for (const [category, branches] of Object.entries(categories).sort(\n ([keyA], [keyB]) =>\n keyA.localeCompare(keyB, undefined, { numeric: true }),\n )) {\n result = result.trimEnd() + '\\n\\n';\n result += `### ${category}\\n\\n`;\n result += getBranchList(branches, listItemType);\n }\n if (hasUncategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += `### Others`;\n }\n }\n result = result.trimEnd() + '\\n\\n';\n result += getBranchList(uncategorized, listItemType);\n\n if (bulkComment && bulkMessage && filteredBranches.length > 1) {\n if (hasCategorized) {\n result = result.trimEnd() + '\\n\\n';\n result += '### All\\n\\n';\n }\n result += getCheckbox(bulkComment);\n result += `${bulkIcon ? bulkIcon + ' ' : ''}**${bulkMessage}**${bulkIcon ? ' ' + bulkIcon : ''}`;\n }\n return result.trimEnd() + '\\n\\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 or replacements\n let hasDeprecationsOrReplacements = false;\n const deprecatedPackages: Record<string, Record<string, boolean>> = {};\n logger.debug('Checking packageFiles for deprecated or replacement packages');\n if (isNonEmptyObject(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 hasDeprecationsOrReplacements = true;\n deprecatedPackages[manager] ??= {};\n deprecatedPackages[manager][name] ??= hasReplacement;\n }\n }\n }\n }\n }\n\n const hasBranches = isNonEmptyArray(branches);\n if (\n config.dependencyDashboardAutoclose &&\n !hasBranches &&\n !hasDeprecationsOrReplacements\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 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 getMarkdownComment(configMigrationPrInfo) +\n ` See Config Migration PR: #${configMigrationRes.prNumber}.\\n\\n`;\n } else if (configMigrationRes?.result === 'pr-modified') {\n issueBody +=\n '## Config Migration Needed (Blocked)\\n\\n' +\n getMarkdownComment(configMigrationPrInfo) +\n ` 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 getCheckbox(createConfigMigrationPr) +\n ' 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 (hasDeprecationsOrReplacements) {\n issueBody += '## Deprecations / Replacements\\n';\n issueBody += emojify('> :warning: **Warning**\\n> \\n');\n issueBody +=\n 'These dependencies are either deprecated or have replacements available:\\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 ? '![Available](https://img.shields.io/badge/available-green?style=flat-square)'\n : '![Unavailable](https://img.shields.io/badge/unavailable-orange?style=flat-square)'\n } |\\n`;\n }\n }\n issueBody += '\\n';\n }\n\n if (config.dependencyDashboardReportAbandonment) {\n issueBody += getAbandonedPackagesMd(packageFiles);\n }\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-approval',\n 'Pending Approval',\n 'The following branches are pending approval. To create them, click on a checkbox below.',\n 'approve',\n approveAllPendingPrs,\n 'Create all pending approval PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'minimum-group-size-not-met',\n 'Group Size Not Met',\n 'The following branches have not met their minimum group size. To create them, click on a checkbox below.',\n 'approveGroup',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'not-scheduled',\n 'Awaiting Schedule',\n 'The following updates are awaiting their schedule. To get an update now, click on a checkbox below.',\n 'unschedule',\n createAllAwaitingSchedulePrs,\n 'Create all awaiting schedule PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) =>\n branch.result === 'branch-limit-reached' ||\n branch.result === 'pr-limit-reached' ||\n branch.result === 'commit-limit-reached',\n 'Rate-Limited',\n 'The following updates are currently rate-limited. To force their creation now, click on a checkbox below.',\n 'unlimit',\n createAllRateLimitedPrs,\n 'Create all rate-limited PRs at once',\n '🔐',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'error',\n 'Errored',\n 'The following updates encountered an error and will be retried. To force a retry now, click on a checkbox below.',\n 'retry',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'needs-pr-approval',\n 'PR Creation Approval Required',\n 'The following branches exist but PR creation requires approval. To approve PR creation, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pr-edited',\n 'PR Edited (Blocked)',\n 'The following updates have been manually edited so Renovate will no longer make changes. To discard all commits and start over, click on a checkbox below.',\n 'rebase',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'pending',\n 'Pending Status Checks',\n 'The following updates await pending status checks. To force their creation now, click on a checkbox below.',\n );\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.prBlockedBy === 'BranchAutomerge',\n 'Pending Branch Automerge',\n 'The following updates await pending status checks before automerging. To abort the branch automerge and create a PR instead, click on a checkbox below.',\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 'minimum-group-size-not-met',\n ];\n const inProgress = branches.filter(\n (branch) =>\n !otherRes.includes(branch.result!) &&\n branch.prBlockedBy !== 'BranchAutomerge',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => !!branch.prBlockedBy || !branch.prNo,\n 'Other Branches',\n 'The following updates are pending. To force the creation of a PR, click on a checkbox below.',\n 'other',\n );\n issueBody += getBranchesListMd(\n inProgress,\n (branch) => branch.prNo && !branch.prBlockedBy,\n 'Open',\n 'The following updates have all been created. To force a retry/rebase of any, click on a checkbox below.',\n 'rebase',\n rebaseAllOpenPrs,\n 'Click on this checkbox to rebase all open PRs at once',\n );\n\n issueBody += getBranchesListMd(\n branches,\n (branch) => branch.result === 'already-existed',\n 'PR Closed (Blocked)',\n 'The following updates are blocked by an existing closed PR. To recreate the PR, click on a checkbox below.',\n 'recreate',\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 = getCheckbox(\n `${dependencyDashboardChecks[branchName]}-branch=${branchName}`,\n );\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 = emojify('> :information_source: **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 isNullOrUndefined(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 isNullOrUndefined(value.fixedVersion),\n );\n const resolvedVulnerabilitiesLength =\n vulnerabilities.length - unresolvedVulnerabilities.length;\n\n result += emojify('> :exclamation: **Important**\\n> \\n');\n result += `> \\`${resolvedVulnerabilitiesLength}\\`/\\`${vulnerabilities.length}\\``;\n if (isTruthy(config.osvVulnerabilityAlerts)) {\n result += ' CVEs have Renovate fixes.\\n\\n';\n } else {\n result +=\n ' CVEs have possible Renovate fixes.\\n> See [`osvVulnerabilityAlerts`](https://docs.renovatebot.com/configuration-options/#osvvulnerabilityalerts) to allow Renovate to supply fixes.\\n\\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 (isNullOrUndefined(managerRecords[manager!])) {\n managerRecords[manager!] = {};\n }\n if (isNullOrUndefined(managerRecords[manager!][packageFile])) {\n managerRecords[manager!][packageFile] = {};\n }\n if (\n isNullOrUndefined(\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 = isNonEmptyString(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"]}
@@ -79,7 +79,7 @@ function addPullRequestNoteIfAttestationHasBeenLost(upgrade) {
79
79
  newRelease.attestation !== true) {
80
80
  upgrade.prBodyNotes ??= [];
81
81
  upgrade.prBodyNotes.push([
82
- '> :exclamation: **Warning**',
82
+ '> :stop_sign: **Caution**',
83
83
  '>',
84
84
  `> ${name} ${currentVersion} was released with an attestation, but ${newVersion} has no attestation.`,
85
85
  `> Verify that release ${newVersion} was published by the expected author.`,
@@ -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 { isArray, isNonEmptyArray, isNumber } 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 || isArray(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n isNonEmptyArray(config.ignoreReviewers) &&\n isNonEmptyArray(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 isNonEmptyArray(pr.reviewers);\n}\n\nfunction addPullRequestNoteIfAttestationHasBeenLost(\n upgrade: BranchUpgradeConfig,\n): void {\n const { packageName, depName, currentVersion, newVersion } = upgrade;\n const name = packageName ?? depName;\n\n const currentRelease = upgrade.releases?.find(\n (release) => release.version === currentVersion,\n );\n const newRelease = upgrade.releases?.find(\n (release) => release.version === newVersion,\n );\n\n if (\n currentRelease &&\n newRelease &&\n currentRelease.attestation === true &&\n newRelease.attestation !== true\n ) {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :exclamation: **Warning**',\n '>',\n `> ${name} ${currentVersion} was released with an attestation, but ${newVersion} has no attestation.`,\n `> Verify that release ${newVersion} was published by the expected author.`,\n '\\n',\n ].join('\\n'),\n );\n }\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, prTitle));\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 isNumber(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=${config.prNotPendingHours}, 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 (isNumber(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation as prNotPendingHours is set to ${config.prNotPendingHours}`,\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.push(\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\n addPullRequestNoteIfAttestationHasBeenLost(upgrade);\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"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/update/pr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isArray, isNonEmptyArray, isNumber } 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 || isArray(debugData.labels)) {\n updatedPrDebugData.labels = labels;\n }\n\n return updatedPrDebugData;\n}\n\nfunction hasNotIgnoredReviewers(pr: Pr, config: BranchConfig): boolean {\n if (\n isNonEmptyArray(config.ignoreReviewers) &&\n isNonEmptyArray(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 isNonEmptyArray(pr.reviewers);\n}\n\nfunction addPullRequestNoteIfAttestationHasBeenLost(\n upgrade: BranchUpgradeConfig,\n): void {\n const { packageName, depName, currentVersion, newVersion } = upgrade;\n const name = packageName ?? depName;\n\n const currentRelease = upgrade.releases?.find(\n (release) => release.version === currentVersion,\n );\n const newRelease = upgrade.releases?.find(\n (release) => release.version === newVersion,\n );\n\n if (\n currentRelease &&\n newRelease &&\n currentRelease.attestation === true &&\n newRelease.attestation !== true\n ) {\n upgrade.prBodyNotes ??= [];\n upgrade.prBodyNotes.push(\n [\n '> :stop_sign: **Caution**',\n '>',\n `> ${name} ${currentVersion} was released with an attestation, but ${newVersion} has no attestation.`,\n `> Verify that release ${newVersion} was published by the expected author.`,\n '\\n',\n ].join('\\n'),\n );\n }\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, prTitle));\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 isNumber(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=${config.prNotPendingHours}, 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 (isNumber(config.prNotPendingHours) &&\n elapsedHours < config.prNotPendingHours))\n ) {\n logger.debug(\n `Branch is ${elapsedHours} hours old - skipping PR creation as prNotPendingHours is set to ${config.prNotPendingHours}`,\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.push(\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\n addPullRequestNoteIfAttestationHasBeenLost(upgrade);\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": "42.76.4",
4
+ "version": "42.77.0",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -1,7 +1,7 @@
1
1
  {
2
- "title": "JSON schema for Renovate 42.76.4 config files (https://renovatebot.com/)",
2
+ "title": "JSON schema for Renovate 42.77.0 config files (https://renovatebot.com/)",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "x-renovate-version": "42.76.4",
4
+ "x-renovate-version": "42.77.0",
5
5
  "allowComments": true,
6
6
  "type": "object",
7
7
  "properties": {