renovate 40.19.0 → 40.19.1

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.
@@ -525,6 +525,27 @@ async function initRepo({ endpoint, repository, forkCreation, forkOrg, forkToken
525
525
  logger_1.logger.warn({ err }, 'Could not set default branch');
526
526
  } /* v8 ignore stop */
527
527
  }
528
+ // This is a lovely "hack" by GitHub that lets us force update our fork's default branch
529
+ // with the base commit from the parent repository
530
+ const url = `repos/${config.repository}/git/refs/heads/${config.defaultBranch}`;
531
+ const sha = repo.defaultBranchRef.target.oid;
532
+ try {
533
+ logger_1.logger.debug(`Updating forked repository default sha ${sha} to match upstream`);
534
+ await common_2.githubApi.patchJson(url, {
535
+ body: {
536
+ sha,
537
+ force: true,
538
+ },
539
+ token: (0, string_1.coerceString)(forkToken, opts.token),
540
+ });
541
+ }
542
+ catch (err) /* v8 ignore start */ {
543
+ logger_1.logger.warn({ url, sha, err: err.err ?? err }, 'Error updating fork from upstream - cannot continue');
544
+ if (err instanceof external_host_error_1.ExternalHostError) {
545
+ throw err;
546
+ }
547
+ throw new external_host_error_1.ExternalHostError(err);
548
+ } /* v8 ignore stop */
528
549
  }
529
550
  else if (forkCreation) {
530
551
  logger_1.logger.debug('Forked repo is not found - attempting to create it');
@@ -552,15 +573,9 @@ async function initRepo({ endpoint, repository, forkCreation, forkOrg, forkToken
552
573
  parsedEndpoint.host = parsedEndpoint.host.replace('api.github.com', 'github.com');
553
574
  parsedEndpoint.pathname = `${config.repository}.git`;
554
575
  const url = node_url_1.default.format(parsedEndpoint);
555
- let upstreamUrl = undefined;
556
- if (forkCreation && config.parentRepo) {
557
- parsedEndpoint.pathname = config.parentRepo + '.git';
558
- upstreamUrl = node_url_1.default.format(parsedEndpoint);
559
- }
560
576
  await git.initRepo({
561
577
  ...config,
562
578
  url,
563
- upstreamUrl,
564
579
  });
565
580
  const repoConfig = {
566
581
  defaultBranch: config.defaultBranch,
@@ -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 is from '@sindresorhus/is';\nimport semver from 'semver';\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 { VulnerabilityAlertSchema } from './schema';\nimport type {\n BranchProtection,\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\nconst GitHubMaxPrBodyLen = 60000;\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 start */ {\n logger.error({ err }, `GitHub getRepos error`);\n throw err;\n } /* v8 ignore stop */\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 is.nonEmptyObject,\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<BranchProtection> {\n /* v8 ignore start */\n if (config.parentRepo) {\n return {};\n } /* v8 ignore stop */\n const res = await githubApi.getJsonUnchecked<BranchProtection>(\n `repos/${config.repository}/branches/${escapeHash(branchName)}/protection`,\n { cacheProvider: repoCacheProvider },\n );\n return res.body;\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 baseBranches 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 endpoint,\n repository,\n forkCreation,\n forkOrg,\n forkToken,\n renovateUsername,\n cloneSubmodules,\n cloneSubmodulesFilter,\n ignorePrAuthor,\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,\n } as any;\n /* v8 ignore start */\n if (endpoint) {\n // Necessary for Renovate Pro - do not remove\n logger.debug(`Overriding default GitHub endpoint with ${endpoint}`);\n platformConfig.endpoint = endpoint;\n githubHttp.setBaseUrl(endpoint);\n } /* v8 ignore stop */\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 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 }, 'Graph QL rate limit exceeded.');\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n logger.debug({ res }, 'Unexpected Graph QL errors');\n throw new Error(PLATFORM_UNKNOWN_ERROR);\n }\n\n repo = res?.data?.repository;\n /* v8 ignore start */\n if (!repo) {\n logger.debug({ res }, 'No repository returned');\n throw new Error(REPOSITORY_NOT_FOUND);\n } /* v8 ignore stop */\n /* v8 ignore start */\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Could not set default branch');\n } /* v8 ignore stop */\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 start */ 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 } /* v8 ignore stop */\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\nexport async function getBranchForceRebase(\n branchName: string,\n): Promise<boolean> {\n config.branchForceRebase ??= {};\n if (config.branchForceRebase[branchName] === undefined) {\n try {\n config.branchForceRebase[branchName] = false;\n const branchProtection = await getBranchProtection(branchName);\n logger.debug(`Found branch protection for branch ${branchName}`);\n if (branchProtection?.required_status_checks?.strict) {\n logger.debug(\n `Branch protection: PRs must be up-to-date before merging for ${branchName}`,\n );\n config.branchForceRebase[branchName] = true;\n }\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(`No branch protection found for ${branchName}`);\n } else if (\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED ||\n err.statusCode === 403\n ) {\n logger.once.debug(\n 'Branch protection: Do not have permissions to detect branch protection',\n );\n } else {\n throw err;\n }\n }\n }\n return !!config.branchForceRebase[branchName];\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 const username =\n !config.forkToken && !config.ignorePrAuthor && config.renovateUsername\n ? config.renovateUsername\n : null;\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): 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 title = autoclosedPr.title.replace(regEx(/ - autoclosed$/), '');\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.repository}/pulls/${number}`,\n {\n body: {\n state: 'open',\n title,\n },\n },\n );\n logger.info(\n { branchName, title, number },\n 'Successfully reopened autoclosed PR',\n );\n const result = coerceRestPr(ghPr);\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 start */ {\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 } /* v8 ignore stop */\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 start */ else {\n logger.debug({ result: checkRunsRaw }, 'No check runs found');\n } /* v8 ignore stop */\n } catch (err) /* v8 ignore start */ {\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n /* v8 ignore start */\n if (config.parentRepo) {\n logger.debug('Cannot set branch status when in forking mode');\n return;\n } /* v8 ignore stop */\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 start */ {\n logger.debug({ err, url }, 'Caught error setting branch status - aborting');\n throw new Error(REPOSITORY_CHANGED);\n } /* v8 ignore stop */\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 start */\n if (config.hasIssuesEnabled === false) {\n return [];\n } /* v8 ignore stop */\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 start */\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n } /* v8 ignore stop */\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) {\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 start */ {\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 } /* v8 ignore stop */\n return null;\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n logger.trace(`ensureIssueClosing(${title})`);\n /* v8 ignore start */\n if (config.hasIssuesEnabled === false) {\n return;\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Failed to assign reviewer');\n } /* v8 ignore stop */\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 (is.array(labels) && labels.length) {\n await githubApi.postJson(`repos/${repository}/issues/${issueNo}/labels`, {\n body: labels,\n });\n }\n } catch (err) /* v8 ignore start */ {\n logger.warn(\n { err, issueNo, labels },\n 'Error while adding labels. Skipping',\n );\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err, issueNo, label }, 'Failed to delete label');\n } /* v8 ignore stop */\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 start */ {\n if (err.statusCode === 404) {\n logger.debug('404 response when retrieving comments');\n throw new ExternalHostError(err, 'github');\n }\n throw err;\n } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Error deleting comment');\n } /* v8 ignore stop */\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 start: missing test #22198 */ {\n logger.warn({ prNumber, err }, 'GitHub-native automerge: REST API error');\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n options.body.maintainer_can_modify =\n !config.forkOrg &&\n platformPrOptions?.forkModeDisallowMaintainerEdits !== true;\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n } /* v8 ignore stop */\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 start */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.warn({ err }, 'Error updating PR');\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n } /* v8 ignore stop */\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 start */ {\n if (err.statusCode === 404 || err.statusCode === 405) {\n const body = err.response?.body;\n if (\n is.nonEmptyString(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 is.nonEmptyString(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 } /* v8 ignore stop */\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 .replace('> ℹ **Note**\\n> \\n', '> [!NOTE]\\n')\n .replace('> ⚠ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replace('> ⚠️ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replace('> ❗ **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 start */\n if (config.hasVulnerabilityAlertsEnabled === false) {\n logger.debug('No vulnerability alerts enabled for repo');\n return [];\n } /* v8 ignore stop */\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: false,\n headers: { accept: 'application/vnd.github+json' },\n cacheProvider: repoCacheProvider,\n },\n VulnerabilityAlertSchema,\n )\n ).body;\n } catch (err) /* v8 ignore start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.error({ err }, 'Error processing vulnerabity alerts');\n } /* v8 ignore stop */\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 is from '@sindresorhus/is';\nimport semver from 'semver';\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 { coerceString, 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 { VulnerabilityAlertSchema } from './schema';\nimport type {\n BranchProtection,\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\nconst GitHubMaxPrBodyLen = 60000;\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 start */ {\n logger.error({ err }, `GitHub getRepos error`);\n throw err;\n } /* v8 ignore stop */\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 is.nonEmptyObject,\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<BranchProtection> {\n /* v8 ignore start */\n if (config.parentRepo) {\n return {};\n } /* v8 ignore stop */\n const res = await githubApi.getJsonUnchecked<BranchProtection>(\n `repos/${config.repository}/branches/${escapeHash(branchName)}/protection`,\n { cacheProvider: repoCacheProvider },\n );\n return res.body;\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 baseBranches 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 endpoint,\n repository,\n forkCreation,\n forkOrg,\n forkToken,\n renovateUsername,\n cloneSubmodules,\n cloneSubmodulesFilter,\n ignorePrAuthor,\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,\n } as any;\n /* v8 ignore start */\n if (endpoint) {\n // Necessary for Renovate Pro - do not remove\n logger.debug(`Overriding default GitHub endpoint with ${endpoint}`);\n platformConfig.endpoint = endpoint;\n githubHttp.setBaseUrl(endpoint);\n } /* v8 ignore stop */\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 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 }, 'Graph QL rate limit exceeded.');\n throw new Error(PLATFORM_RATE_LIMIT_EXCEEDED);\n }\n logger.debug({ res }, 'Unexpected Graph QL errors');\n throw new Error(PLATFORM_UNKNOWN_ERROR);\n }\n\n repo = res?.data?.repository;\n /* v8 ignore start */\n if (!repo) {\n logger.debug({ res }, 'No repository returned');\n throw new Error(REPOSITORY_NOT_FOUND);\n } /* v8 ignore stop */\n /* v8 ignore start */\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Could not set default branch');\n } /* v8 ignore stop */\n }\n // This is a lovely \"hack\" by GitHub that lets us force update our fork's default branch\n // with the base commit from the parent repository\n const url = `repos/${config.repository}/git/refs/heads/${config.defaultBranch}`;\n const sha = repo.defaultBranchRef.target.oid;\n try {\n logger.debug(\n `Updating forked repository default sha ${sha} to match upstream`,\n );\n await githubApi.patchJson(url, {\n body: {\n sha,\n force: true,\n },\n token: coerceString(forkToken, opts.token),\n });\n } catch (err) /* v8 ignore start */ {\n logger.warn(\n { url, sha, err: err.err ?? err },\n 'Error updating fork from upstream - cannot continue',\n );\n if (err instanceof ExternalHostError) {\n throw err;\n }\n throw new ExternalHostError(err);\n } /* v8 ignore stop */\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 start */ 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 } /* v8 ignore stop */\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 await git.initRepo({\n ...config,\n url,\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\nexport async function getBranchForceRebase(\n branchName: string,\n): Promise<boolean> {\n config.branchForceRebase ??= {};\n if (config.branchForceRebase[branchName] === undefined) {\n try {\n config.branchForceRebase[branchName] = false;\n const branchProtection = await getBranchProtection(branchName);\n logger.debug(`Found branch protection for branch ${branchName}`);\n if (branchProtection?.required_status_checks?.strict) {\n logger.debug(\n `Branch protection: PRs must be up-to-date before merging for ${branchName}`,\n );\n config.branchForceRebase[branchName] = true;\n }\n } catch (err) {\n if (err.statusCode === 404) {\n logger.debug(`No branch protection found for ${branchName}`);\n } else if (\n err.message === PLATFORM_INTEGRATION_UNAUTHORIZED ||\n err.statusCode === 403\n ) {\n logger.once.debug(\n 'Branch protection: Do not have permissions to detect branch protection',\n );\n } else {\n throw err;\n }\n }\n }\n return !!config.branchForceRebase[branchName];\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 const username =\n !config.forkToken && !config.ignorePrAuthor && config.renovateUsername\n ? config.renovateUsername\n : null;\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): 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 title = autoclosedPr.title.replace(regEx(/ - autoclosed$/), '');\n const { body: ghPr } = await githubApi.patchJson<GhRestPr>(\n `repos/${config.repository}/pulls/${number}`,\n {\n body: {\n state: 'open',\n title,\n },\n },\n );\n logger.info(\n { branchName, title, number },\n 'Successfully reopened autoclosed PR',\n );\n const result = coerceRestPr(ghPr);\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 start */ {\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 } /* v8 ignore stop */\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 start */ else {\n logger.debug({ result: checkRunsRaw }, 'No check runs found');\n } /* v8 ignore stop */\n } catch (err) /* v8 ignore start */ {\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 } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n /* v8 ignore start */\n if (config.parentRepo) {\n logger.debug('Cannot set branch status when in forking mode');\n return;\n } /* v8 ignore stop */\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 start */ {\n logger.debug({ err, url }, 'Caught error setting branch status - aborting');\n throw new Error(REPOSITORY_CHANGED);\n } /* v8 ignore stop */\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 start */\n if (config.hasIssuesEnabled === false) {\n return [];\n } /* v8 ignore stop */\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 start */\n if (config.hasIssuesEnabled === false) {\n logger.info(\n 'Cannot ensure issue because issues are disabled in this repository',\n );\n return null;\n } /* v8 ignore stop */\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) {\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 start */ {\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 } /* v8 ignore stop */\n return null;\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n logger.trace(`ensureIssueClosing(${title})`);\n /* v8 ignore start */\n if (config.hasIssuesEnabled === false) {\n return;\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Failed to assign reviewer');\n } /* v8 ignore stop */\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 (is.array(labels) && labels.length) {\n await githubApi.postJson(`repos/${repository}/issues/${issueNo}/labels`, {\n body: labels,\n });\n }\n } catch (err) /* v8 ignore start */ {\n logger.warn(\n { err, issueNo, labels },\n 'Error while adding labels. Skipping',\n );\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err, issueNo, label }, 'Failed to delete label');\n } /* v8 ignore stop */\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 start */ {\n if (err.statusCode === 404) {\n logger.debug('404 response when retrieving comments');\n throw new ExternalHostError(err, 'github');\n }\n throw err;\n } /* v8 ignore stop */\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 start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Error deleting comment');\n } /* v8 ignore stop */\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 start: missing test #22198 */ {\n logger.warn({ prNumber, err }, 'GitHub-native automerge: REST API error');\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n options.body.maintainer_can_modify =\n !config.forkOrg &&\n platformPrOptions?.forkModeDisallowMaintainerEdits !== true;\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n } /* v8 ignore stop */\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 start */ {\n if (err instanceof ExternalHostError) {\n throw err;\n }\n logger.warn({ err }, 'Error updating PR');\n } /* v8 ignore stop */\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 start */ {\n logger.warn({ err }, 'Error re-attempting PR platform automerge');\n } /* v8 ignore stop */\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 start */\n if (config.forkToken) {\n options.token = config.forkToken;\n } /* v8 ignore stop */\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 start */ {\n if (err.statusCode === 404 || err.statusCode === 405) {\n const body = err.response?.body;\n if (\n is.nonEmptyString(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 is.nonEmptyString(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 } /* v8 ignore stop */\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 .replace('> ℹ **Note**\\n> \\n', '> [!NOTE]\\n')\n .replace('> ⚠ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replace('> ⚠️ **Warning**\\n> \\n', '> [!WARNING]\\n')\n .replace('> ❗ **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 start */\n if (config.hasVulnerabilityAlertsEnabled === false) {\n logger.debug('No vulnerability alerts enabled for repo');\n return [];\n } /* v8 ignore stop */\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: false,\n headers: { accept: 'application/vnd.github+json' },\n cacheProvider: repoCacheProvider,\n },\n VulnerabilityAlertSchema,\n )\n ).body;\n } catch (err) /* v8 ignore start */ {\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 } /* v8 ignore stop */\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 start */ {\n logger.error({ err }, 'Error processing vulnerabity alerts');\n } /* v8 ignore stop */\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"]}
@@ -182,10 +182,9 @@ async function validateGitVersion() {
182
182
  logger_1.logger.debug(`Found valid git version: ${version}`);
183
183
  return true;
184
184
  }
185
- async function fetchBranchCommits(preferUpstream = true) {
185
+ async function fetchBranchCommits() {
186
186
  config.branchCommits = {};
187
- const url = preferUpstream && config.upstreamUrl ? config.upstreamUrl : config.url;
188
- const opts = ['ls-remote', '--heads', url];
187
+ const opts = ['ls-remote', '--heads', config.url];
189
188
  if (config.extraCloneOpts) {
190
189
  Object.entries(config.extraCloneOpts).forEach((e) =>
191
190
  // TODO: types (#22198)
@@ -456,22 +455,6 @@ async function syncGit() {
456
455
  (await getDefaultBranch(git));
457
456
  /* v8 ignore next -- TODO: add test */
458
457
  delete (0, repository_1.getCache)()?.semanticCommits;
459
- if (config.upstreamUrl) {
460
- logger_1.logger.debug(`Resetting ${config.currentBranch} to upstream`);
461
- await git.addRemote('upstream', config.upstreamUrl);
462
- await git.fetch(['upstream']);
463
- await resetToBranch(config.currentBranch);
464
- const resetLog = await git.reset([
465
- '--hard',
466
- `upstream/${config.currentBranch}`,
467
- ]);
468
- logger_1.logger.debug({ resetLog }, 'git reset log');
469
- const pushLog = await git.push(['origin', config.currentBranch, '--force']);
470
- logger_1.logger.debug({ pushLog }, 'git push log');
471
- await fetchBranchCommits(false);
472
- }
473
- config.currentBranchSha = (await git.raw(['rev-parse', 'HEAD'])).trim();
474
- logger_1.logger.debug(`Current branch SHA: ${config.currentBranchSha}`);
475
458
  }
476
459
  async function getRepoStatus(path) {
477
460
  if (is_1.default.string(path)) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/git/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport is from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport type { Options, SimpleGit, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport upath from 'upath';\nimport { configFileNames } from '../../config/app-strings';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport type { GitProtocol } from '../../types/git';\nimport { incLimitedValue } from '../../workers/global/limits';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport { newlineRegex, regEx } from '../regex';\nimport { matchRegexOrGlobList } from '../string-match';\nimport { parseGitAuthor } from './author';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache';\nimport { getNoVerify, simpleGitConfig } from './config';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache';\nimport { configSigningKey, writePrivateKey } from './private-key';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types';\n\nexport { setNoVerify } from './config';\nexport { setPrivateKey } from './private-key';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n // Can't be `undefined` here.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw lastError;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: SimpleGit): Promise<string> {\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore start -- TODO: add test */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n /* v8 ignore stop */\n return res.replace('origin/', '').trim();\n /* v8 ignore start -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn({ err }, 'Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n /* v8 ignore stop */\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: SimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = simpleGit();\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore next 4 -- TODO: add test */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n /* v8 ignore next 4 */\n } catch (err) {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore next 7 -- TODO: add test */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(preferUpstream = true): Promise<void> {\n config.branchCommits = {};\n const url =\n preferUpstream && config.upstreamUrl ? config.upstreamUrl : config.url;\n const opts = ['ls-remote', '--heads', url];\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables? use `getChildEnv` instead?\n git = simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n });\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next 4 -- TODO: add test */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore next 3 -- TODO: add test */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport async function syncGit(): Promise<void> {\n if (gitInitialized) {\n /* v8 ignore next 3 -- TODO: add test */\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore next 3 -- failsafe TODO: add test */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error');\n }\n }\n if (clone) {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await fs.emptyDir(localDir);\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() => emptyDirAndClone());\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter);\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test */\n delete getCache()?.semanticCommits;\n\n if (config.upstreamUrl) {\n logger.debug(`Resetting ${config.currentBranch} to upstream`);\n await git.addRemote('upstream', config.upstreamUrl);\n await git.fetch(['upstream']);\n await resetToBranch(config.currentBranch);\n const resetLog = await git.reset([\n '--hard',\n `upstream/${config.currentBranch}`,\n ]);\n logger.debug({ resetLog }, 'git reset log');\n const pushLog = await git.push(['origin', config.currentBranch, '--force']);\n logger.debug({ pushLog }, 'git push log');\n await fetchBranchCommits(false);\n }\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n logger.debug(`Current branch SHA: ${config.currentBranchSha}`);\n}\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (is.string(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits[branchName] || null;\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n });\n return res.all.map((commit) => commit.message);\n /* v8 ignore next 3 -- TODO: add test */\n } catch {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = (await git.log({ n: 1 }))?.latest?.date;\n if (latestCommitDate) {\n logger.debug({ branchName, latestCommitDate }, 'latest commit');\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', `refs/heads/${branch}`]);\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore next 3 -- TODO: add test */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(is.string)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug('branch.isBehindBase(): using git to calculate');\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n /* v8 ignore next 7 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug('branch.isModified(): using git to calculate');\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (is.boolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug('branch.isConflicted(): using git to calculate');\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore next 6 -- TODO: add test */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n /* v8 ignore next 2 -- TODO: add test (always throws) */\n await deleteLocalBranch(branchName);\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await git.show(['-s', '--format=%ai', 'origin/' + branchName]);\n return new Date(Date.parse(time));\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport async function getBranchFiles(\n branchName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([`origin/${branchName}`, `origin/${branchName}^`]),\n );\n return diff.files.map((file) => file.file);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'getBranchFiles error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next 2 -- TODO: add test */\n const addParams =\n fileName === configFileNames[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n commitRes.summary &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const pushOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n pushOptions['--no-verify'] = null;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, pushOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n result = true;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n const { treeSha } =\n /* v8 ignore next -- will never happen ? */\n treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/util/git/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { setTimeout } from 'timers/promises';\nimport is from '@sindresorhus/is';\nimport fs from 'fs-extra';\nimport semver from 'semver';\nimport type { Options, SimpleGit, TaskOptions } from 'simple-git';\nimport { ResetMode, simpleGit } from 'simple-git';\nimport upath from 'upath';\nimport { configFileNames } from '../../config/app-strings';\nimport { GlobalConfig } from '../../config/global';\nimport type { RenovateConfig } from '../../config/types';\nimport {\n CONFIG_VALIDATION,\n INVALID_PATH,\n REPOSITORY_CHANGED,\n REPOSITORY_DISABLED,\n REPOSITORY_EMPTY,\n SYSTEM_INSUFFICIENT_DISK_SPACE,\n TEMPORARY_ERROR,\n} from '../../constants/error-messages';\nimport { logger } from '../../logger';\nimport { ExternalHostError } from '../../types/errors/external-host-error';\nimport type { GitProtocol } from '../../types/git';\nimport { incLimitedValue } from '../../workers/global/limits';\nimport { getCache } from '../cache/repository';\nimport { getEnv } from '../env';\nimport { newlineRegex, regEx } from '../regex';\nimport { matchRegexOrGlobList } from '../string-match';\nimport { parseGitAuthor } from './author';\nimport {\n getCachedBehindBaseResult,\n setCachedBehindBaseResult,\n} from './behind-base-branch-cache';\nimport { getNoVerify, simpleGitConfig } from './config';\nimport {\n getCachedConflictResult,\n setCachedConflictResult,\n} from './conflicts-cache';\nimport {\n bulkChangesDisallowed,\n checkForPlatformFailure,\n handleCommitError,\n} from './error';\nimport {\n getCachedModifiedResult,\n setCachedModifiedResult,\n} from './modified-cache';\nimport { configSigningKey, writePrivateKey } from './private-key';\nimport type {\n CommitFilesConfig,\n CommitResult,\n LocalConfig,\n LongCommitSha,\n PushFilesConfig,\n StatusResult,\n StorageConfig,\n TreeItem,\n} from './types';\n\nexport { setNoVerify } from './config';\nexport { setPrivateKey } from './private-key';\n\n// Retry parameters\nconst retryCount = 5;\nconst delaySeconds = 3;\nconst delayFactor = 2;\n\n// A generic wrapper for simpleGit.* calls to make them more fault-tolerant\nexport async function gitRetry<T>(gitFunc: () => Promise<T>): Promise<T> {\n let round = 0;\n let lastError: Error | undefined;\n\n while (round <= retryCount) {\n if (round > 0) {\n logger.debug(`gitRetry round ${round}`);\n }\n try {\n const res = await gitFunc();\n if (round > 1) {\n logger.debug('Successful retry of git function');\n }\n return res;\n } catch (err) {\n lastError = err;\n logger.debug({ err }, `Git function thrown`);\n // Try to transform the Error to ExternalHostError\n const errChecked = checkForPlatformFailure(err);\n if (errChecked instanceof ExternalHostError) {\n logger.debug(\n { err: errChecked },\n `ExternalHostError thrown in round ${\n round + 1\n } of ${retryCount} - retrying in the next round`,\n );\n } else {\n throw err;\n }\n }\n\n const nextDelay = delayFactor ^ ((round - 1) * delaySeconds);\n logger.trace({ nextDelay }, `Delay next round`);\n await setTimeout(1000 * nextDelay);\n\n round++;\n }\n\n // Can't be `undefined` here.\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw lastError;\n}\n\nasync function isDirectory(dir: string): Promise<boolean> {\n try {\n return (await fs.stat(dir)).isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function getDefaultBranch(git: SimpleGit): Promise<string> {\n // see https://stackoverflow.com/a/62352647/3005034\n try {\n let res = await git.raw(['rev-parse', '--abbrev-ref', 'origin/HEAD']);\n /* v8 ignore start -- TODO: add test */\n if (!res) {\n logger.debug('Could not determine default branch using git rev-parse');\n const headPrefix = 'HEAD branch: ';\n res = (await git.raw(['remote', 'show', 'origin']))\n .split('\\n')\n .map((line) => line.trim())\n .find((line) => line.startsWith(headPrefix))!\n .replace(headPrefix, '');\n }\n /* v8 ignore stop */\n return res.replace('origin/', '').trim();\n /* v8 ignore start -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (\n err.message.startsWith(\n 'fatal: ref refs/remotes/origin/HEAD is not a symbolic ref',\n )\n ) {\n throw new Error(REPOSITORY_EMPTY);\n }\n if (err.message.includes(\"fatal: ambiguous argument 'origin/HEAD'\")) {\n logger.warn({ err }, 'Error getting default branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n /* v8 ignore stop */\n}\n\nlet config: LocalConfig = {} as any;\n\n// TODO: can be undefined\nlet git: SimpleGit;\nlet gitInitialized: boolean;\nlet submodulesInitizialized: boolean;\n\nlet privateKeySet = false;\n\nexport const GIT_MINIMUM_VERSION = '2.33.0'; // git show-current\n\nexport async function validateGitVersion(): Promise<boolean> {\n let version: string | undefined;\n const globalGit = simpleGit();\n try {\n const { major, minor, patch, installed } = await globalGit.version();\n /* v8 ignore next 4 -- TODO: add test */\n if (!installed) {\n logger.error('Git not installed');\n return false;\n }\n version = `${major}.${minor}.${patch}`;\n /* v8 ignore next 4 */\n } catch (err) {\n logger.error({ err }, 'Error fetching git version');\n return false;\n }\n /* v8 ignore next 7 -- TODO: add test */\n if (!(version && semver.gte(version, GIT_MINIMUM_VERSION))) {\n logger.error(\n { detectedVersion: version, minimumVersion: GIT_MINIMUM_VERSION },\n 'Git version needs upgrading',\n );\n return false;\n }\n logger.debug(`Found valid git version: ${version}`);\n return true;\n}\n\nasync function fetchBranchCommits(): Promise<void> {\n config.branchCommits = {};\n const opts = ['ls-remote', '--heads', config.url];\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.unshift(e[0], `${e[1]!}`),\n );\n }\n try {\n const lsRemoteRes = await gitRetry(() => git.raw(opts));\n logger.trace({ lsRemoteRes }, 'git ls-remote result');\n lsRemoteRes\n .split(newlineRegex)\n .filter(Boolean)\n .map((line) => line.trim().split(regEx(/\\s+/)))\n .forEach(([sha, ref]) => {\n config.branchCommits[ref.replace('refs/heads/', '')] =\n sha as LongCommitSha;\n });\n logger.trace({ branchCommits: config.branchCommits }, 'branch commits');\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug({ err }, 'git error');\n if (err.message?.includes('Please ask the owner to check their account')) {\n throw new Error(REPOSITORY_DISABLED);\n }\n throw err;\n }\n}\n\nexport async function fetchRevSpec(revSpec: string): Promise<void> {\n await gitRetry(() => git.fetch(['origin', revSpec]));\n}\n\nexport async function initRepo(args: StorageConfig): Promise<void> {\n config = { ...args } as any;\n config.ignoredAuthors = [];\n config.additionalBranches = [];\n config.branchIsModified = {};\n // TODO: safe to pass all env variables? use `getChildEnv` instead?\n git = simpleGit(GlobalConfig.get('localDir'), simpleGitConfig()).env({\n ...getEnv(),\n LANG: 'C.UTF-8',\n LC_ALL: 'C.UTF-8',\n });\n gitInitialized = false;\n submodulesInitizialized = false;\n await fetchBranchCommits();\n}\n\nasync function resetToBranch(branchName: string): Promise<void> {\n logger.debug(`resetToBranch(${branchName})`);\n await git.raw(['reset', '--hard']);\n await gitRetry(() => git.checkout(branchName));\n await git.raw(['reset', '--hard', 'origin/' + branchName]);\n await git.raw(['clean', '-fd']);\n}\n\n/* v8 ignore next 4 -- TODO: add test */\nexport async function resetToCommit(commit: LongCommitSha): Promise<void> {\n logger.debug(`resetToCommit(${commit})`);\n await git.raw(['reset', '--hard', commit]);\n}\n\nasync function deleteLocalBranch(branchName: string): Promise<void> {\n await git.branch(['-D', branchName]);\n}\n\nasync function cleanLocalBranches(): Promise<void> {\n const existingBranches = (await git.raw(['branch']))\n .split(newlineRegex)\n .map((branch) => branch.trim())\n .filter((branch) => branch.length > 0 && !branch.startsWith('* '));\n logger.debug({ existingBranches });\n for (const branchName of existingBranches) {\n await deleteLocalBranch(branchName);\n }\n}\n\nexport function setGitAuthor(gitAuthor: string | undefined): void {\n const gitAuthorParsed = parseGitAuthor(\n gitAuthor ?? 'Renovate Bot <renovate@whitesourcesoftware.com>',\n );\n if (!gitAuthorParsed) {\n const error = new Error(CONFIG_VALIDATION);\n error.validationSource = 'None';\n error.validationError = 'Invalid gitAuthor';\n error.validationMessage = `\\`gitAuthor\\` is not parsed as valid RFC5322 format: \\`${gitAuthor!}\\``;\n throw error;\n }\n config.gitAuthorName = gitAuthorParsed.name;\n config.gitAuthorEmail = gitAuthorParsed.address;\n}\n\nexport async function writeGitAuthor(): Promise<void> {\n const { gitAuthorName, gitAuthorEmail, writeGitDone } = config;\n /* v8 ignore next 3 -- TODO: add test */\n if (writeGitDone) {\n return;\n }\n config.writeGitDone = true;\n try {\n if (gitAuthorName) {\n logger.debug(`Setting git author name: ${gitAuthorName}`);\n await git.addConfig('user.name', gitAuthorName);\n }\n if (gitAuthorEmail) {\n logger.debug(`Setting git author email: ${gitAuthorEmail}`);\n await git.addConfig('user.email', gitAuthorEmail);\n }\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(\n { err, gitAuthorName, gitAuthorEmail },\n 'Error setting git author config',\n );\n throw new Error(TEMPORARY_ERROR);\n }\n}\n\nexport function setUserRepoConfig({\n gitIgnoredAuthors,\n gitAuthor,\n}: RenovateConfig): void {\n config.ignoredAuthors = gitIgnoredAuthors ?? [];\n setGitAuthor(gitAuthor);\n}\n\nexport async function getSubmodules(): Promise<string[]> {\n try {\n return (\n (await git.raw([\n 'config',\n '--file',\n '.gitmodules',\n '--get-regexp',\n '\\\\.path',\n ])) || ''\n )\n .trim()\n .split(regEx(/[\\n\\s]/))\n .filter((_e: string, i: number) => i % 2);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'Error getting submodules');\n return [];\n }\n}\n\nexport async function cloneSubmodules(\n shouldClone: boolean,\n cloneSubmodulesFilter: string[] | undefined,\n): Promise<void> {\n if (!shouldClone || submodulesInitizialized) {\n return;\n }\n submodulesInitizialized = true;\n await syncGit();\n const submodules = await getSubmodules();\n for (const submodule of submodules) {\n if (!matchRegexOrGlobList(submodule, cloneSubmodulesFilter ?? ['*'])) {\n logger.debug(\n { cloneSubmodulesFilter },\n `Skipping submodule ${submodule}`,\n );\n continue;\n }\n try {\n logger.debug(`Cloning git submodule at ${submodule}`);\n await gitRetry(() =>\n git.submoduleUpdate(['--init', '--recursive', submodule]),\n );\n } catch (err) {\n logger.warn({ err, submodule }, `Unable to initialise git submodule`);\n }\n }\n}\n\nexport function isCloned(): boolean {\n return gitInitialized;\n}\n\nexport async function syncGit(): Promise<void> {\n if (gitInitialized) {\n /* v8 ignore next 3 -- TODO: add test */\n if (getEnv().RENOVATE_X_CLEAR_HOOKS) {\n await git.raw(['config', 'core.hooksPath', '/dev/null']);\n }\n return;\n }\n /* v8 ignore next 3 -- failsafe TODO: add test */\n if (GlobalConfig.get('platform') === 'local') {\n throw new Error('Cannot sync git when platform=local');\n }\n gitInitialized = true;\n const localDir = GlobalConfig.get('localDir')!;\n logger.debug(`Initializing git repository into ${localDir}`);\n const gitHead = upath.join(localDir, '.git/HEAD');\n let clone = true;\n\n if (await fs.pathExists(gitHead)) {\n try {\n await git.raw(['remote', 'set-url', 'origin', config.url]);\n const fetchStart = Date.now();\n await gitRetry(() => git.fetch(['--prune', 'origin']));\n config.currentBranch =\n config.currentBranch || (await getDefaultBranch(git));\n await resetToBranch(config.currentBranch);\n await cleanLocalBranches();\n const durationMs = Math.round(Date.now() - fetchStart);\n logger.info({ durationMs }, 'git fetch completed');\n clone = false;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n logger.info({ err }, 'git fetch error');\n }\n }\n if (clone) {\n const cloneStart = Date.now();\n try {\n const opts: string[] = [];\n if (config.defaultBranch) {\n opts.push('-b', config.defaultBranch);\n }\n if (config.fullClone) {\n logger.debug('Performing full clone');\n } else {\n logger.debug('Performing blobless clone');\n opts.push('--filter=blob:none');\n }\n if (config.extraCloneOpts) {\n Object.entries(config.extraCloneOpts).forEach((e) =>\n // TODO: types (#22198)\n opts.push(e[0], `${e[1]!}`),\n );\n }\n const emptyDirAndClone = async (): Promise<void> => {\n await fs.emptyDir(localDir);\n await git.clone(config.url, '.', opts);\n };\n await gitRetry(() => emptyDirAndClone());\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'git clone error');\n if (err.message?.includes('No space left on device')) {\n throw new Error(SYSTEM_INSUFFICIENT_DISK_SPACE);\n }\n if (err.message === REPOSITORY_EMPTY) {\n throw err;\n }\n throw new ExternalHostError(err, 'git');\n }\n const durationMs = Math.round(Date.now() - cloneStart);\n logger.debug({ durationMs }, 'git clone completed');\n }\n try {\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: not a git repository')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n // This will only happen now if set in global config\n await cloneSubmodules(!!config.cloneSubmodules, config.cloneSubmodulesFilter);\n try {\n const latestCommit = (await git.log({ n: 1 })).latest;\n logger.debug({ latestCommit }, 'latest repository commit');\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message.includes('does not have any commits yet')) {\n throw new Error(REPOSITORY_EMPTY);\n }\n logger.warn({ err }, 'Cannot retrieve latest commit');\n }\n config.currentBranch =\n config.currentBranch ??\n config.defaultBranch ??\n (await getDefaultBranch(git));\n /* v8 ignore next -- TODO: add test */\n delete getCache()?.semanticCommits;\n}\n\nexport async function getRepoStatus(path?: string): Promise<StatusResult> {\n if (is.string(path)) {\n const localDir = GlobalConfig.get('localDir');\n const localPath = upath.resolve(localDir, path);\n if (!localPath.startsWith(upath.resolve(localDir))) {\n logger.warn(\n { localPath, localDir },\n 'Preventing access to file outside the local directory',\n );\n throw new Error(INVALID_PATH);\n }\n }\n\n await syncGit();\n return git.status(path ? [path] : []);\n}\n\nexport function branchExists(branchName: string): boolean {\n return !!config.branchCommits[branchName];\n}\n\n// Return the commit SHA for a branch\nexport function getBranchCommit(branchName: string): LongCommitSha | null {\n return config.branchCommits[branchName] || null;\n}\n\nexport async function getCommitMessages(): Promise<string[]> {\n logger.debug('getCommitMessages');\n if (GlobalConfig.get('platform') !== 'local') {\n await syncGit();\n }\n try {\n const res = await git.log({\n n: 20,\n format: { message: '%s' },\n });\n return res.all.map((commit) => commit.message);\n /* v8 ignore next 3 -- TODO: add test */\n } catch {\n return [];\n }\n}\n\nexport async function checkoutBranch(\n branchName: string,\n): Promise<LongCommitSha> {\n logger.debug(`Setting current branch to ${branchName}`);\n await syncGit();\n try {\n await gitRetry(() =>\n git.checkout(\n submodulesInitizialized\n ? ['-f', '--recurse-submodules', branchName, '--']\n : ['-f', branchName, '--'],\n ),\n );\n config.currentBranch = branchName;\n config.currentBranchSha = (\n await git.raw(['rev-parse', 'HEAD'])\n ).trim() as LongCommitSha;\n const latestCommitDate = (await git.log({ n: 1 }))?.latest?.date;\n if (latestCommitDate) {\n logger.debug({ branchName, latestCommitDate }, 'latest commit');\n }\n await git.reset(ResetMode.HARD);\n return config.currentBranchSha;\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n if (err.message?.includes('fatal: ambiguous argument')) {\n logger.warn({ err }, 'Failed to checkout branch');\n throw new Error(TEMPORARY_ERROR);\n }\n throw err;\n }\n}\n\nexport async function getFileList(): Promise<string[]> {\n await syncGit();\n const branch = config.currentBranch;\n let files: string;\n try {\n files = await git.raw(['ls-tree', '-r', `refs/heads/${branch}`]);\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: Not a valid object name')) {\n logger.debug(\n { err },\n 'Branch not found when checking branch list - aborting',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n /* v8 ignore next 3 -- TODO: add test */\n if (!files) {\n return [];\n }\n // submodules are starting with `160000 commit`\n return files\n .split(newlineRegex)\n .filter(is.string)\n .filter((line) => line.startsWith('100'))\n .map((line) => line.split(regEx(/\\t/)).pop()!);\n}\n\nexport function getBranchList(): string[] {\n return Object.keys(config.branchCommits ?? {});\n}\n\nexport async function isBranchBehindBase(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branchName);\n let isBehind = getCachedBehindBaseResult(\n branchName,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (isBehind !== null) {\n logger.debug(`branch.isBehindBase(): using cached result \"${isBehind}\"`);\n return isBehind;\n }\n\n logger.debug('branch.isBehindBase(): using git to calculate');\n\n await syncGit();\n try {\n const behindCount = (\n await git.raw(['rev-list', '--count', `${branchSha!}..${baseBranchSha!}`])\n ).trim();\n isBehind = behindCount !== '0';\n logger.debug(\n { baseBranch, branchName },\n `branch.isBehindBase(): ${isBehind}`,\n );\n setCachedBehindBaseResult(branchName, isBehind);\n return isBehind;\n /* v8 ignore next 7 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n throw err;\n }\n}\n\nexport async function isBranchModified(\n branchName: string,\n baseBranch: string,\n): Promise<boolean> {\n if (!branchExists(branchName)) {\n logger.debug('branch.isModified(): no cache');\n return false;\n }\n // First check local config\n if (config.branchIsModified[branchName] !== undefined) {\n return config.branchIsModified[branchName];\n }\n // Second check repository cache\n const isModified = getCachedModifiedResult(\n branchName,\n getBranchCommit(branchName), // branch sha\n );\n if (isModified !== null) {\n logger.debug(`branch.isModified(): using cached result \"${isModified}\"`);\n config.branchIsModified[branchName] = isModified;\n return isModified;\n }\n\n logger.debug('branch.isModified(): using git to calculate');\n\n await syncGit();\n const committedAuthors = new Set<string>();\n try {\n const commits = await git.log([\n `origin/${baseBranch}..origin/${branchName}`,\n ]);\n\n for (const commit of commits.all) {\n committedAuthors.add(commit.author_email);\n }\n /* v8 ignore next 10 -- TODO: add test */\n } catch (err) {\n if (err.message?.includes('fatal: bad revision')) {\n logger.debug(\n { err },\n 'Remote branch not found when checking last commit author - aborting run',\n );\n throw new Error(REPOSITORY_CHANGED);\n }\n logger.warn({ err }, 'Error checking last author for isBranchModified');\n }\n const { gitAuthorEmail, ignoredAuthors } = config;\n\n const includedAuthors = new Set(committedAuthors);\n\n if (gitAuthorEmail) {\n includedAuthors.delete(gitAuthorEmail);\n }\n\n for (const ignoredAuthor of ignoredAuthors) {\n includedAuthors.delete(ignoredAuthor);\n }\n\n if (includedAuthors.size === 0) {\n // authors all match - branch has not been modified\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = false',\n );\n logger.debug('branch.isModified() = false');\n config.branchIsModified[branchName] = false;\n setCachedModifiedResult(branchName, false);\n return false;\n }\n logger.trace(\n {\n branchName,\n baseBranch,\n committedAuthors: [...committedAuthors],\n includedAuthors: [...includedAuthors],\n gitAuthorEmail,\n ignoredAuthors,\n },\n 'branch.isModified() = true',\n );\n logger.debug(\n { branchName, unrecognizedAuthors: [...includedAuthors] },\n 'branch.isModified() = true',\n );\n config.branchIsModified[branchName] = true;\n setCachedModifiedResult(branchName, true);\n return true;\n}\n\nexport async function isBranchConflicted(\n baseBranch: string,\n branch: string,\n): Promise<boolean> {\n logger.debug(`isBranchConflicted(${baseBranch}, ${branch})`);\n\n const baseBranchSha = getBranchCommit(baseBranch);\n const branchSha = getBranchCommit(branch);\n if (!baseBranchSha || !branchSha) {\n logger.warn(\n { baseBranch, branch },\n 'isBranchConflicted: branch does not exist',\n );\n return true;\n }\n\n const isConflicted = getCachedConflictResult(\n branch,\n branchSha,\n baseBranch,\n baseBranchSha,\n );\n if (is.boolean(isConflicted)) {\n logger.debug(\n `branch.isConflicted(): using cached result \"${isConflicted}\"`,\n );\n return isConflicted;\n }\n\n logger.debug('branch.isConflicted(): using git to calculate');\n\n let result = false;\n await syncGit();\n await writeGitAuthor();\n\n const origBranch = config.currentBranch;\n try {\n await git.reset(ResetMode.HARD);\n //TODO: see #18600\n if (origBranch !== baseBranch) {\n await git.checkout(baseBranch);\n }\n await git.merge(['--no-commit', '--no-ff', `origin/${branch}`]);\n } catch (err) {\n result = true;\n /* v8 ignore next 6 -- TODO: add test */\n if (!err?.git?.conflicts?.length) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: unknown error',\n );\n }\n } finally {\n try {\n await git.merge(['--abort']);\n if (origBranch !== baseBranch) {\n await git.checkout(origBranch);\n }\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n logger.debug(\n { baseBranch, branch, err },\n 'isBranchConflicted: cleanup error',\n );\n }\n }\n\n setCachedConflictResult(branch, result);\n logger.debug(`branch.isConflicted(): ${result}`);\n return result;\n}\n\nexport async function deleteBranch(branchName: string): Promise<void> {\n await syncGit();\n try {\n const deleteCommand = ['push', '--delete', 'origin', branchName];\n\n if (getNoVerify().includes('push')) {\n deleteCommand.push('--no-verify');\n }\n\n await gitRetry(() => git.raw(deleteCommand));\n logger.debug(`Deleted remote branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No remote branch to delete with name: ${branchName}`);\n }\n try {\n /* v8 ignore next 2 -- TODO: add test (always throws) */\n await deleteLocalBranch(branchName);\n logger.debug(`Deleted local branch: ${branchName}`);\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n logger.debug(`No local branch to delete with name: ${branchName}`);\n }\n delete config.branchCommits[branchName];\n}\n\nexport async function mergeToLocal(refSpecToMerge: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await fetchRevSpec(refSpecToMerge);\n await gitRetry(() => git.merge(['FETCH_HEAD']));\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n refSpecToMerge,\n status,\n err,\n },\n 'mergeLocally error',\n );\n throw err;\n }\n}\n\nexport async function mergeBranch(branchName: string): Promise<void> {\n let status: StatusResult | undefined;\n try {\n await syncGit();\n await writeGitAuthor();\n await git.reset(ResetMode.HARD);\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + branchName]),\n );\n await gitRetry(() =>\n git.checkout([\n '-B',\n config.currentBranch,\n 'origin/' + config.currentBranch,\n ]),\n );\n status = await git.status();\n await gitRetry(() => git.merge(['--ff-only', branchName]));\n await gitRetry(() => git.push('origin', config.currentBranch));\n incLimitedValue('Commits');\n } catch (err) {\n logger.debug(\n {\n baseBranch: config.currentBranch,\n baseSha: config.currentBranchSha,\n branchName,\n branchSha: getBranchCommit(branchName),\n status,\n err,\n },\n 'mergeBranch error',\n );\n throw err;\n }\n}\n\nexport async function getBranchLastCommitTime(\n branchName: string,\n): Promise<Date> {\n await syncGit();\n try {\n const time = await git.show(['-s', '--format=%ai', 'origin/' + branchName]);\n return new Date(Date.parse(time));\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return new Date();\n }\n}\n\nexport async function getBranchFiles(\n branchName: string,\n): Promise<string[] | null> {\n await syncGit();\n try {\n const diff = await gitRetry(() =>\n git.diffSummary([`origin/${branchName}`, `origin/${branchName}^`]),\n );\n return diff.files.map((file) => file.file);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, 'getBranchFiles error');\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFile(\n filePath: string,\n branchName?: string,\n): Promise<string | null> {\n await syncGit();\n try {\n const content = await git.show([\n 'origin/' + (branchName ?? config.currentBranch) + ':' + filePath,\n ]);\n return content;\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n /* v8 ignore next 3 -- TODO: add test */\n if (errChecked) {\n throw errChecked;\n }\n return null;\n }\n}\n\nexport async function getFiles(\n fileNames: string[],\n): Promise<Record<string, string | null>> {\n const fileContentMap: Record<string, string | null> = {};\n\n for (const fileName of fileNames) {\n fileContentMap[fileName] = await getFile(fileName);\n }\n\n return fileContentMap;\n}\n\nexport async function hasDiff(\n sourceRef: string,\n targetRef: string,\n): Promise<boolean> {\n await syncGit();\n try {\n return (\n (await gitRetry(() => git.diff([sourceRef, targetRef, '--']))) !== ''\n );\n } catch {\n return true;\n }\n}\n\nasync function handleCommitAuth(localDir: string): Promise<void> {\n if (!privateKeySet) {\n await writePrivateKey();\n privateKeySet = true;\n }\n await configSigningKey(localDir);\n await writeGitAuthor();\n}\n\n/**\n *\n * Prepare local branch with commit\n *\n * 0. Hard reset\n * 1. Creates local branch with `origin/` prefix\n * 2. Perform `git add` (respecting mode) and `git remove` for each file\n * 3. Perform commit\n * 4. Check whether resulting commit is empty or not (due to .gitignore)\n * 5. If not empty, return commit info for further processing\n *\n */\nexport async function prepareCommit({\n branchName,\n files,\n message,\n force = false,\n}: CommitFilesConfig): Promise<CommitResult | null> {\n const localDir = GlobalConfig.get('localDir')!;\n await syncGit();\n logger.debug(`Preparing files for committing to branch ${branchName}`);\n await handleCommitAuth(localDir);\n try {\n await git.reset(ResetMode.HARD);\n await git.raw(['clean', '-fd']);\n const parentCommitSha = config.currentBranchSha;\n await gitRetry(() =>\n git.checkout(['-B', branchName, 'origin/' + config.currentBranch]),\n );\n const deletedFiles: string[] = [];\n const addedModifiedFiles: string[] = [];\n const ignoredFiles: string[] = [];\n for (const file of files) {\n const fileName = file.path;\n if (file.type === 'deletion') {\n try {\n await git.rm([fileName]);\n deletedFiles.push(fileName);\n /* v8 ignore next 8 -- TODO: add test */\n } catch (err) {\n const errChecked = checkForPlatformFailure(err);\n if (errChecked) {\n throw errChecked;\n }\n logger.trace({ err, fileName }, 'Cannot delete file');\n ignoredFiles.push(fileName);\n }\n } else {\n if (await isDirectory(upath.join(localDir, fileName))) {\n // This is usually a git submodule update\n logger.trace({ fileName }, 'Adding directory commit');\n } else if (file.contents === null) {\n continue;\n } else {\n let contents: Buffer;\n if (typeof file.contents === 'string') {\n contents = Buffer.from(file.contents);\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n contents = file.contents;\n }\n // some file systems including Windows don't support the mode\n // so the index should be manually updated after adding the file\n if (file.isSymlink) {\n await fs.symlink(file.contents, upath.join(localDir, fileName));\n } else {\n await fs.outputFile(upath.join(localDir, fileName), contents, {\n mode: file.isExecutable ? 0o777 : 0o666,\n });\n }\n }\n try {\n /* v8 ignore next 2 -- TODO: add test */\n const addParams =\n fileName === configFileNames[0] ? ['-f', fileName] : fileName;\n await git.add(addParams);\n if (file.isExecutable) {\n await git.raw(['update-index', '--chmod=+x', fileName]);\n }\n addedModifiedFiles.push(fileName);\n /* v8 ignore next 11 -- TODO: add test */\n } catch (err) {\n if (\n !err.message.includes(\n 'The following paths are ignored by one of your .gitignore files',\n )\n ) {\n throw err;\n }\n logger.debug(`Cannot commit ignored file: ${fileName}`);\n ignoredFiles.push(file.path);\n }\n }\n }\n\n const commitOptions: Options = {};\n if (getNoVerify().includes('commit')) {\n commitOptions['--no-verify'] = null;\n }\n\n const commitRes = await git.commit(message, [], commitOptions);\n if (\n commitRes.summary &&\n commitRes.summary.changes === 0 &&\n commitRes.summary.insertions === 0 &&\n commitRes.summary.deletions === 0\n ) {\n logger.warn({ commitRes }, 'Detected empty commit - aborting git push');\n return null;\n }\n logger.debug(\n { deletedFiles, ignoredFiles, result: commitRes },\n `git commit`,\n );\n if (!force && !(await hasDiff('HEAD', `origin/${branchName}`))) {\n logger.debug(\n { branchName, deletedFiles, addedModifiedFiles, ignoredFiles },\n 'No file changes detected. Skipping commit',\n );\n return null;\n }\n\n const commitSha = (\n await git.revparse([branchName])\n ).trim() as LongCommitSha;\n const result: CommitResult = {\n parentCommitSha,\n commitSha,\n files: files.filter((fileChange) => {\n if (fileChange.type === 'deletion') {\n return deletedFiles.includes(fileChange.path);\n }\n return addedModifiedFiles.includes(fileChange.path);\n }),\n };\n\n return result;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName, files);\n }\n}\n\nexport async function pushCommit({\n sourceRef,\n targetRef,\n files,\n}: PushFilesConfig): Promise<boolean> {\n await syncGit();\n logger.debug(`Pushing refSpec ${sourceRef}:${targetRef ?? sourceRef}`);\n let result = false;\n try {\n const pushOptions: TaskOptions = {\n '--force-with-lease': null,\n '-u': null,\n };\n if (getNoVerify().includes('push')) {\n pushOptions['--no-verify'] = null;\n }\n\n const pushRes = await gitRetry(() =>\n git.push('origin', `${sourceRef}:${targetRef ?? sourceRef}`, pushOptions),\n );\n delete pushRes.repo;\n logger.debug({ result: pushRes }, 'git push');\n incLimitedValue('Commits');\n result = true;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n handleCommitError(err, sourceRef, files);\n }\n return result;\n}\n\nexport async function fetchBranch(\n branchName: string,\n): Promise<LongCommitSha | null> {\n await syncGit();\n logger.debug(`Fetching branch ${branchName}`);\n try {\n const ref = `refs/heads/${branchName}:refs/remotes/origin/${branchName}`;\n await gitRetry(() => git.pull(['origin', ref, '--force']));\n const commit = (await git.revparse([branchName])).trim() as LongCommitSha;\n config.branchCommits[branchName] = commit;\n config.branchIsModified[branchName] = false;\n return commit;\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n return handleCommitError(err, branchName);\n }\n}\n\nexport async function commitFiles(\n commitConfig: CommitFilesConfig,\n): Promise<LongCommitSha | null> {\n try {\n const commitResult = await prepareCommit(commitConfig);\n if (commitResult) {\n const pushResult = await pushCommit({\n sourceRef: commitConfig.branchName,\n files: commitConfig.files,\n });\n if (pushResult) {\n const { branchName } = commitConfig;\n const { commitSha } = commitResult;\n config.branchCommits[branchName] = commitSha;\n config.branchIsModified[branchName] = false;\n return commitSha;\n }\n }\n return null;\n /* v8 ignore next 6 -- TODO: add test */\n } catch (err) {\n if (err.message.includes('[rejected] (stale info)')) {\n throw new Error(REPOSITORY_CHANGED);\n }\n throw err;\n }\n}\n\nexport function getUrl({\n protocol,\n auth,\n hostname,\n host,\n repository,\n}: {\n protocol?: GitProtocol;\n auth?: string;\n hostname?: string;\n host?: string;\n repository: string;\n}): string {\n if (protocol === 'ssh') {\n // TODO: types (#22198)\n return `git@${hostname!}:${repository}.git`;\n }\n return URL.format({\n protocol: protocol ?? 'https',\n auth,\n hostname,\n host,\n pathname: repository + '.git',\n });\n}\n\nlet remoteRefsExist = false;\n\n/**\n *\n * Non-branch refs allow us to store git objects without triggering CI pipelines.\n * It's useful for API-based branch rebasing.\n *\n * @see https://stackoverflow.com/questions/63866947/pushing-git-non-branch-references-to-a-remote/63868286\n *\n */\nexport async function pushCommitToRenovateRef(\n commitSha: string,\n refName: string,\n): Promise<void> {\n const fullRefName = `refs/renovate/branches/${refName}`;\n await git.raw(['update-ref', fullRefName, commitSha]);\n await git.push(['--force', 'origin', fullRefName]);\n remoteRefsExist = true;\n}\n\n/**\n *\n * Removes all remote \"refs/renovate/branches/*\" refs in two steps:\n *\n * Step 1: list refs\n *\n * $ git ls-remote origin \"refs/renovate/branches/*\"\n *\n * > cca38e9ea6d10946bdb2d0ca5a52c205783897aa refs/renovate/branches/foo\n * > 29ac154936c880068994e17eb7f12da7fdca70e5 refs/renovate/branches/bar\n * > 3fafaddc339894b6d4f97595940fd91af71d0355 refs/renovate/branches/baz\n * > ...\n *\n * Step 2:\n *\n * $ git push --delete origin refs/renovate/branches/foo refs/renovate/branches/bar refs/renovate/branches/baz\n *\n * If Step 2 fails because the repo doesn't allow bulk changes, we'll remove them one by one instead:\n *\n * $ git push --delete origin refs/renovate/branches/foo\n * $ git push --delete origin refs/renovate/branches/bar\n * $ git push --delete origin refs/renovate/branches/baz\n */\nexport async function clearRenovateRefs(): Promise<void> {\n if (!gitInitialized || !remoteRefsExist) {\n return;\n }\n\n logger.debug(`Cleaning up Renovate refs: refs/renovate/branches/*`);\n const renovateRefs: string[] = [];\n\n try {\n const rawOutput = await git.listRemote([\n config.url,\n 'refs/renovate/branches/*',\n ]);\n const refs = rawOutput\n .split(newlineRegex)\n .map((line) => line.replace(regEx(/[0-9a-f]+\\s+/i), '').trim())\n .filter((line) => line.startsWith('refs/renovate/branches/'));\n renovateRefs.push(...refs);\n /* v8 ignore next 3 -- TODO: add test */\n } catch (err) {\n logger.warn({ err }, `Renovate refs cleanup error`);\n }\n\n if (renovateRefs.length) {\n try {\n const pushOpts = ['--delete', 'origin', ...renovateRefs];\n await git.push(pushOpts);\n } catch (err) {\n if (bulkChangesDisallowed(err)) {\n for (const ref of renovateRefs) {\n try {\n const pushOpts = ['--delete', 'origin', ref];\n await git.push(pushOpts);\n /* v8 ignore next 4 -- TODO: add test */\n } catch (err) {\n logger.debug({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n break;\n }\n }\n /* v8 ignore next 3 -- TODO: add test */\n } else {\n logger.warn({ err }, 'Error deleting \"refs/renovate/branches/*\"');\n }\n }\n }\n\n remoteRefsExist = false;\n}\n\nconst treeItemRegex = regEx(\n /^(?<mode>\\d{6})\\s+(?<type>blob|tree|commit)\\s+(?<sha>[0-9a-f]{40})\\s+(?<path>.*)$/,\n);\n\nconst treeShaRegex = regEx(/tree\\s+(?<treeSha>[0-9a-f]{40})\\s*/);\n\n/**\n *\n * Obtain top-level items of commit tree.\n * We don't need subtree items, so here are 2 steps only.\n *\n * Step 1: commit SHA -> tree SHA\n *\n * $ git cat-file -p <commit-sha>\n *\n * > tree <tree-sha>\n * > parent 59b8b0e79319b7dc38f7a29d618628f3b44c2fd7\n * > ...\n *\n * Step 2: tree SHA -> tree items (top-level)\n *\n * $ git cat-file -p <tree-sha>\n *\n * > 040000 tree 389400684d1f004960addc752be13097fe85d776 src\n * > ...\n * > 100644 blob 7d2edde437ad4e7bceb70dbfe70e93350d99c98b package.json\n *\n */\nexport async function listCommitTree(\n commitSha: LongCommitSha,\n): Promise<TreeItem[]> {\n const commitOutput = await git.catFile(['-p', commitSha]);\n const { treeSha } =\n /* v8 ignore next -- will never happen ? */\n treeShaRegex.exec(commitOutput)?.groups ?? {};\n const contents = await git.catFile(['-p', treeSha]);\n const lines = contents.split(newlineRegex);\n const result: TreeItem[] = [];\n for (const line of lines) {\n const matchGroups = treeItemRegex.exec(line)?.groups;\n if (matchGroups) {\n const { path, mode, type, sha } = matchGroups;\n result.push({ path, mode, type, sha: sha as LongCommitSha });\n }\n }\n return result;\n}\n"]}
@@ -16,7 +16,6 @@ export interface StorageConfig {
16
16
  currentBranch?: string;
17
17
  defaultBranch?: string;
18
18
  url: string;
19
- upstreamUrl?: string;
20
19
  extraCloneOpts?: GitOptions;
21
20
  cloneSubmodules?: boolean;
22
21
  cloneSubmodulesFilter?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/util/git/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { PlatformCommitOptions } from '../../config/types';\nimport type { GitOptions } from '../../types/git';\n\nexport type { DiffResult, StatusResult } from 'simple-git';\n\nexport interface GitAuthor {\n name?: string | null;\n address?: string;\n}\n\nexport type GitNoVerifyOption = 'commit' | 'push';\n\n/**\n * We want to make sure this is a long sha of 40 characters and not just any string\n */\nexport type LongCommitSha = string & { __longCommitSha: never };\n\nexport interface StorageConfig {\n currentBranch?: string;\n defaultBranch?: string;\n url: string;\n upstreamUrl?: string;\n extraCloneOpts?: GitOptions;\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n fullClone?: boolean;\n}\n\nexport interface LocalConfig extends StorageConfig {\n additionalBranches: string[];\n currentBranch: string;\n currentBranchSha: LongCommitSha;\n branchCommits: Record<string, LongCommitSha>;\n branchIsModified: Record<string, boolean>;\n commitBranches: Record<string, string[]>;\n ignoredAuthors: string[];\n gitAuthorName?: string | null;\n gitAuthorEmail?: string;\n\n writeGitDone?: boolean;\n}\n\nexport interface FileAddition {\n /**\n * Addition creates new file or modifies existing one\n */\n type: 'addition';\n\n /**\n * Relative file path\n */\n path: string;\n\n /**\n * File contents\n */\n contents: string | Buffer | null;\n\n /**\n * The executable bit\n */\n isExecutable?: boolean;\n\n isSymlink?: boolean;\n}\n\nexport interface FileDeletion {\n /**\n * Deletion removes the file\n */\n type: 'deletion';\n\n /**\n * Relative file path\n */\n path: string;\n}\n\nexport type FileChange = FileAddition | FileDeletion;\n\nexport interface CommitFilesConfig {\n baseBranch?: string;\n branchName: string;\n files: FileChange[];\n message: string | string[];\n force?: boolean;\n platformCommit?: PlatformCommitOptions;\n /** Only needed by Gerrit platform */\n prTitle?: string;\n /** Only needed by Gerrit platform */\n autoApprove?: boolean;\n}\n\nexport interface PushFilesConfig {\n sourceRef: string;\n targetRef?: string;\n files: FileChange[];\n}\n\nexport type BranchName = string;\n\nexport interface CommitResult {\n parentCommitSha: LongCommitSha;\n commitSha: LongCommitSha;\n files: FileChange[];\n}\n\nexport interface TreeItem {\n path: string;\n mode: string;\n type: string;\n sha: LongCommitSha;\n}\n\n/**\n * Represents a git authentication rule in the form of e.g.:\n * git config --global url.\"https://api@github.com/\".insteadOf \"https://github.com/\"\n */\nexport interface AuthenticationRule {\n url: string;\n insteadOf: string;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../lib/util/git/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { PlatformCommitOptions } from '../../config/types';\nimport type { GitOptions } from '../../types/git';\n\nexport type { DiffResult, StatusResult } from 'simple-git';\n\nexport interface GitAuthor {\n name?: string | null;\n address?: string;\n}\n\nexport type GitNoVerifyOption = 'commit' | 'push';\n\n/**\n * We want to make sure this is a long sha of 40 characters and not just any string\n */\nexport type LongCommitSha = string & { __longCommitSha: never };\n\nexport interface StorageConfig {\n currentBranch?: string;\n defaultBranch?: string;\n url: string;\n extraCloneOpts?: GitOptions;\n cloneSubmodules?: boolean;\n cloneSubmodulesFilter?: string[];\n fullClone?: boolean;\n}\n\nexport interface LocalConfig extends StorageConfig {\n additionalBranches: string[];\n currentBranch: string;\n currentBranchSha: LongCommitSha;\n branchCommits: Record<string, LongCommitSha>;\n branchIsModified: Record<string, boolean>;\n commitBranches: Record<string, string[]>;\n ignoredAuthors: string[];\n gitAuthorName?: string | null;\n gitAuthorEmail?: string;\n\n writeGitDone?: boolean;\n}\n\nexport interface FileAddition {\n /**\n * Addition creates new file or modifies existing one\n */\n type: 'addition';\n\n /**\n * Relative file path\n */\n path: string;\n\n /**\n * File contents\n */\n contents: string | Buffer | null;\n\n /**\n * The executable bit\n */\n isExecutable?: boolean;\n\n isSymlink?: boolean;\n}\n\nexport interface FileDeletion {\n /**\n * Deletion removes the file\n */\n type: 'deletion';\n\n /**\n * Relative file path\n */\n path: string;\n}\n\nexport type FileChange = FileAddition | FileDeletion;\n\nexport interface CommitFilesConfig {\n baseBranch?: string;\n branchName: string;\n files: FileChange[];\n message: string | string[];\n force?: boolean;\n platformCommit?: PlatformCommitOptions;\n /** Only needed by Gerrit platform */\n prTitle?: string;\n /** Only needed by Gerrit platform */\n autoApprove?: boolean;\n}\n\nexport interface PushFilesConfig {\n sourceRef: string;\n targetRef?: string;\n files: FileChange[];\n}\n\nexport type BranchName = string;\n\nexport interface CommitResult {\n parentCommitSha: LongCommitSha;\n commitSha: LongCommitSha;\n files: FileChange[];\n}\n\nexport interface TreeItem {\n path: string;\n mode: string;\n type: string;\n sha: LongCommitSha;\n}\n\n/**\n * Represents a git authentication rule in the form of e.g.:\n * git config --global url.\"https://api@github.com/\".insteadOf \"https://github.com/\"\n */\nexport interface AuthenticationRule {\n url: string;\n insteadOf: string;\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": "40.19.0",
4
+ "version": "40.19.1",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",