renovate 42.81.9 → 42.81.11
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.
|
@@ -15,6 +15,11 @@ export declare function getBranchStatus(branchName: string, internalChecksAsSucc
|
|
|
15
15
|
export declare function getBranchStatusCheck(branchName: string, context: string): Promise<BranchStatus | null>;
|
|
16
16
|
export declare function setBranchStatus({ branchName, context, description, state, url: targetUrl, }: BranchStatusConfig): Promise<void>;
|
|
17
17
|
export declare function findIssue(title: string): Promise<Issue | null>;
|
|
18
|
+
/**
|
|
19
|
+
* Remove or transform markdown into Bitbucket supported syntax.
|
|
20
|
+
*
|
|
21
|
+
* See https://bitbucket.org/tutorials/markdowndemo/src for supported markdown syntax
|
|
22
|
+
*/
|
|
18
23
|
export declare function massageMarkdown(input: string): string;
|
|
19
24
|
export declare function maxBodyLength(): number;
|
|
20
25
|
export declare function ensureIssue({ title, reuseTitle, body, }: EnsureIssueConfig): Promise<EnsureIssueResult | null>;
|
|
@@ -415,9 +415,12 @@ async function closeIssue(issueNumber) {
|
|
|
415
415
|
body: { state: 'closed' },
|
|
416
416
|
});
|
|
417
417
|
}
|
|
418
|
+
/**
|
|
419
|
+
* Remove or transform markdown into Bitbucket supported syntax.
|
|
420
|
+
*
|
|
421
|
+
* See https://bitbucket.org/tutorials/markdowndemo/src for supported markdown syntax
|
|
422
|
+
*/
|
|
418
423
|
function massageMarkdown(input) {
|
|
419
|
-
// Remove any HTML we use
|
|
420
|
-
// See https://bitbucket.org/tutorials/markdowndemo/src for supported markdown syntax
|
|
421
424
|
const after = (0, pr_body_1.smartTruncate)(input, maxBodyLength())
|
|
422
425
|
.replace('you tick the rebase/retry checkbox', 'by renaming this PR to start with "rebase!"')
|
|
423
426
|
.replace('checking the rebase/retry box above', 'renaming the PR to start with "rebase!"')
|
|
@@ -425,14 +428,14 @@ function massageMarkdown(input) {
|
|
|
425
428
|
.replace((0, regex_1.regEx)(`\n---\n\n.*?<!-- rebase-check -->.*?\n`), '')
|
|
426
429
|
.replace((0, regex_1.regEx)(/\]\(\.\.\/pull\//g), '](../../pull-requests/')
|
|
427
430
|
.replace((0, regex_1.regEx)(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');
|
|
428
|
-
return
|
|
431
|
+
return massageDetailSummaryHtmlToNestedLists(after);
|
|
429
432
|
}
|
|
430
433
|
/**
|
|
431
|
-
* Massage collapsible html sections into nested unordered lists
|
|
434
|
+
* Massage collapsible html sections into nested unordered lists.
|
|
432
435
|
*
|
|
433
436
|
* Bitbucket doesn't currently support collapsible syntax; https://jira.atlassian.com/browse/BCLOUD-20231
|
|
434
437
|
*/
|
|
435
|
-
function
|
|
438
|
+
function massageDetailSummaryHtmlToNestedLists(body) {
|
|
436
439
|
let depth = 0;
|
|
437
440
|
// Parse detail parts to calculate correct list depth
|
|
438
441
|
const detailsParts = body.split('<details>').map((raw) => {
|
|
@@ -452,10 +455,10 @@ function massageNestedCollapsibleSectionsIntoLists(body) {
|
|
|
452
455
|
const partIndentation = '\t'.repeat(partDepth - 1);
|
|
453
456
|
const nestedListItemIndentation = '\t'.repeat(partDepth);
|
|
454
457
|
const rawContainsBlockquote = raw.includes('<blockquote>');
|
|
455
|
-
t = t
|
|
456
|
-
|
|
457
|
-
.replace((0, regex_1.regEx)(
|
|
458
|
-
|
|
458
|
+
t = t.replace((0, regex_1.regEx)(/<\/?summary>/g), partDepth === 1 ? '**' : '`');
|
|
459
|
+
if (partDepth > 1) {
|
|
460
|
+
t = t.replace((0, regex_1.regEx)(/^([ \t]*- [`[])/gm), `${nestedListItemIndentation}$1`);
|
|
461
|
+
}
|
|
459
462
|
let result = partIndentation;
|
|
460
463
|
if (rawContainsBlockquote || partDepth > 1) {
|
|
461
464
|
result += ' - ';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/bitbucket/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { isNonEmptyArray, isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { REPOSITORY_NOT_FOUND } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport * as hostRules from '../../../util/host-rules';\nimport type { BitbucketHttpOptions } from '../../../util/http/bitbucket';\nimport { BitbucketHttp, setBaseUrl } from '../../../util/http/bitbucket';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport {\n aggressiveRepoCacheProvider,\n repoCacheProvider,\n} from '../../../util/http/cache/repository-http-cache-provider';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { UUIDRegex, matchRegexOrGlobList } from '../../../util/string-match';\nimport type {\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body';\nimport * as comments from './comments';\nimport { BitbucketPrCache } from './pr-cache';\nimport { RepoInfo, Repositories, UnresolvedPrTasks } from './schema';\nimport type {\n Account,\n BitbucketStatus,\n BranchResponse,\n Config,\n EffectiveReviewer,\n PagedResult,\n PrResponse,\n RepoBranchingModel,\n} from './types';\nimport * as utils from './utils';\nimport { mergeBodyTransformer } from './utils';\n\nexport const id = 'bitbucket';\n\nconst bitbucketHttp = new BitbucketHttp();\n\nconst BITBUCKET_PROD_ENDPOINT = 'https://api.bitbucket.org/';\n\nlet config: Config = {} as any;\n\nexport function resetPlatform(): void {\n config = {} as any;\n renovateUserUuid = null;\n}\n\nconst defaults = { endpoint: BITBUCKET_PROD_ENDPOINT };\n\nconst pathSeparator = '/';\n\nlet renovateUserUuid: string | null = null;\n\nexport async function initPlatform({\n endpoint,\n username,\n password,\n token,\n}: PlatformParams): Promise<PlatformResult> {\n if (!(username && password) && !token) {\n throw new Error(\n 'Init: You must configure either a Bitbucket token or username and password',\n );\n }\n if (endpoint && endpoint !== BITBUCKET_PROD_ENDPOINT) {\n logger.warn(\n `Init: Bitbucket Cloud endpoint should generally be ${BITBUCKET_PROD_ENDPOINT} but is being configured to a different value. Did you mean to use Bitbucket Server?`,\n );\n defaults.endpoint = endpoint;\n }\n setBaseUrl(defaults.endpoint);\n renovateUserUuid = null;\n const options: HttpOptions = { memCache: false };\n if (token) {\n options.token = token;\n } else {\n options.username = username;\n options.password = password;\n }\n try {\n const { uuid } = (\n await bitbucketHttp.getJsonUnchecked<Account>('/2.0/user', options)\n ).body;\n renovateUserUuid = uuid;\n } catch (err) {\n if (\n err.statusCode === 403 &&\n err.body?.error?.detail?.required?.includes('account')\n ) {\n logger.warn(`Bitbucket: missing 'account' scope for password`);\n } else {\n logger.debug({ err }, 'Unknown error fetching Bitbucket user identity');\n }\n }\n // TODO: Add a connection check that endpoint/username/password combination are valid (#9594)\n const platformConfig: PlatformResult = {\n endpoint: endpoint ?? BITBUCKET_PROD_ENDPOINT,\n };\n return Promise.resolve(platformConfig);\n}\n\n// Get all repositories that the user has access to\nexport async function getRepos(config: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Autodiscovering Bitbucket Cloud repositories');\n try {\n let { body: repos } = await bitbucketHttp.getJson(\n `/2.0/repositories/?role=contributor`,\n { paginate: true },\n Repositories,\n );\n\n // if autodiscoverProjects is configured\n // filter the repos list\n const autodiscoverProjects = config.projects;\n if (isNonEmptyArray(autodiscoverProjects)) {\n logger.debug(\n { autodiscoverProjects: config.projects },\n 'Applying autodiscoverProjects filter',\n );\n repos = repos.filter(\n (repo) =>\n repo.projectName &&\n matchRegexOrGlobList(repo.projectName, autodiscoverProjects),\n );\n }\n\n return repos.map(({ owner, name }) => `${owner}/${name}`);\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, `bitbucket getRepos error`);\n throw err;\n }\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D\n const repo = repoName ?? config.repository;\n const path = fileName;\n\n let finalBranchOrTag = branchOrTag;\n if (branchOrTag?.includes(pathSeparator)) {\n // Branch name contains slash, so we have to replace branch name with SHA1 of the head commit; otherwise the API will not work.\n finalBranchOrTag = await getBranchCommit(branchOrTag);\n }\n\n const url =\n `/2.0/repositories/${repo}/src/` +\n (finalBranchOrTag ?? `HEAD`) +\n `/${path}`;\n const res = await bitbucketHttp.getText(url, {\n cacheProvider: repoCacheProvider,\n });\n return res.body;\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n // TODO #22198\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\n// Initialize bitbucket by getting base branch and SHA\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n bbUseDevelopmentBranch,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n const opts = hostRules.find({\n hostType: 'bitbucket',\n url: defaults.endpoint,\n });\n config = {\n repository,\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor', false),\n } as Config;\n let info: RepoInfo;\n let mainBranch: string;\n try {\n const { body: repoInfo } = await bitbucketHttp.getJson(\n `/2.0/repositories/${repository}`,\n RepoInfo,\n );\n info = repoInfo;\n\n mainBranch = info.mainbranch;\n\n if (bbUseDevelopmentBranch) {\n // Fetch Bitbucket development branch\n const developmentBranch = (\n await bitbucketHttp.getJsonUnchecked<RepoBranchingModel>(\n `/2.0/repositories/${repository}/branching-model`,\n )\n ).body.development?.branch?.name;\n\n if (developmentBranch) {\n mainBranch = developmentBranch;\n }\n }\n\n config.defaultBranch = mainBranch;\n\n config = {\n ...config,\n owner: info.owner,\n mergeMethod: info.mergeMethod,\n has_issues: info.has_issues,\n is_private: info.is_private,\n };\n\n logger.debug(`${repository} owner = ${config.owner}`);\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ err }, 'Unknown Bitbucket initRepo error');\n throw err;\n }\n\n const { hostname } = URL.parse(defaults.endpoint);\n\n // Converts API hostnames to their respective HTTP git hosts:\n // `api.bitbucket.org` to `bitbucket.org`\n // `api-staging.<host>` to `staging.<host>`\n // TODO #22198\n const hostnameWithoutApiPrefix = regEx(/api[.|-](.+)/).exec(hostname!)?.[1];\n\n let auth = '';\n if (opts.token) {\n auth = `x-token-auth:${opts.token}`;\n } else if (opts.password?.startsWith('ATAT')) {\n auth = `x-bitbucket-api-token-auth:${opts.password}`;\n } else {\n auth = `${opts.username!}:${opts.password!}`;\n }\n\n const url = git.getUrl({\n protocol: 'https',\n auth,\n hostname: hostnameWithoutApiPrefix,\n repository,\n });\n\n await git.initRepo({\n ...config,\n url,\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch: mainBranch,\n isFork: info.isFork,\n repoFingerprint: repoFingerprint(info.uuid, defaults.endpoint),\n };\n return repoConfig;\n}\n\n/* v8 ignore next */\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<Pr[]> {\n logger.trace('getPrList()');\n return await BitbucketPrCache.getPrs(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n );\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n includeOtherAuthors,\n}: FindPRConfig): Promise<Pr | null> {\n logger.debug(`findPr(${branchName}, ${prTitle}, ${state})`);\n\n if (includeOtherAuthors) {\n // PR might have been created by anyone, so don't use the cached Renovate PR list\n const prs = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<PrResponse>>(\n `/2.0/repositories/${config.repository}/pullrequests?q=source.branch.name=\"${branchName}\"&state=open`,\n { cacheProvider: memCacheProvider },\n )\n ).body.values;\n\n if (prs.length === 0) {\n logger.debug(`No PR found for branch ${branchName}`);\n return null;\n }\n\n return utils.prInfo(prs[0]);\n }\n\n const prList = await getPrList();\n const pr = prList.find(\n (p) =>\n p.sourceBranch === branchName &&\n (!prTitle || p.title.toUpperCase() === prTitle.toUpperCase()) &&\n matchesState(p.state, state),\n );\n\n if (!pr) {\n return null;\n }\n logger.debug(`Found PR #${pr.number}`);\n\n /**\n * Bitbucket doesn't support renaming or reopening declined PRs.\n * Instead, we have to use comment-driven signals.\n */\n if (pr.state === 'closed') {\n const reopenComments = await comments.reopenComments(config, pr.number);\n\n if (isNonEmptyArray(reopenComments)) {\n if (config.is_private) {\n // Only workspace members could have commented on a private repository\n logger.debug(\n `Found '${comments.REOPEN_PR_COMMENT_KEYWORD}' comment from workspace member. Renovate will reopen PR ${pr.number} as a new PR`,\n );\n return null;\n }\n\n for (const comment of reopenComments) {\n if (await isAccountMemberOfWorkspace(comment.user, config.repository)) {\n logger.debug(\n `Found '${comments.REOPEN_PR_COMMENT_KEYWORD}' comment from workspace member. Renovate will reopen PR ${pr.number} as a new PR`,\n );\n return null;\n }\n }\n }\n }\n\n return pr;\n}\n\n// Gets details for a PR\nexport async function getPr(prNo: number): Promise<Pr | null> {\n const pr = (\n await bitbucketHttp.getJsonUnchecked<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n\n /* v8 ignore next */\n if (!pr) {\n return null;\n }\n\n const res: Pr = {\n ...utils.prInfo(pr),\n };\n\n if (isNonEmptyArray(pr.reviewers)) {\n res.reviewers = pr.reviewers\n .map(({ uuid }) => uuid)\n .filter(isNonEmptyString);\n }\n\n return res;\n}\n\nconst escapeHash = (input: string): string =>\n input?.replace(regEx(/#/g), '%23');\n\n// Return the commit SHA for a branch\nasync function getBranchCommit(\n branchName: string,\n): Promise<string | undefined> {\n try {\n const branch = (\n await bitbucketHttp.getJsonUnchecked<BranchResponse>(\n `/2.0/repositories/${config.repository}/refs/branches/${escapeHash(\n branchName,\n )}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n return branch.target.hash;\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, `getBranchCommit('${branchName}') failed'`);\n return undefined;\n }\n}\n\n// Returns the Pull Request for a branch. Null if not exists.\nexport async function getBranchPr(branchName: string): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatus(\n branchName: string,\n memCache = true,\n): Promise<BitbucketStatus[]> {\n const sha = await getBranchCommit(branchName);\n const opts: BitbucketHttpOptions = { paginate: true };\n /* v8 ignore next: temporary code */\n if (memCache) {\n opts.cacheProvider = aggressiveRepoCacheProvider;\n } else {\n opts.memCache = false;\n }\n return (\n await bitbucketHttp.getJsonUnchecked<PagedResult<BitbucketStatus>>(\n `/2.0/repositories/${config.repository}/commit/${sha!}/statuses`,\n opts,\n )\n ).body.values;\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 const statuses = await getStatus(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status: { state: string }) =>\n status.state === 'FAILED' || status.state === 'STOPPED',\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status: { state: string }) => status.state === 'INPROGRESS',\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === 'SUCCESSFUL' && status.key?.startsWith('renovate/'),\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nconst bbToRenovateStatusMapping: Record<string, BranchStatus> = {\n SUCCESSFUL: 'green',\n INPROGRESS: 'yellow',\n FAILED: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const statuses = await getStatus(branchName);\n const bbState = statuses.find((status) => status.key === context)?.state;\n // TODO #22198\n return bbToRenovateStatusMapping[bbState!] || null;\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n const sha = await getBranchCommit(branchName);\n\n // TargetUrl can not be empty so default to bitbucket\n /* v8 ignore next */\n const url = targetUrl ?? 'https://bitbucket.org';\n\n const body = {\n name: context,\n state: utils.buildStates[state],\n key: context,\n description,\n url,\n };\n\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/commit/${sha}/statuses/build`,\n { body },\n );\n\n // invalidate status cache\n const branchStatusesUrl = bitbucketHttp\n .resolveUrl(`/2.0/repositories/${config.repository}/commit/${sha}/statuses`)\n .toString();\n aggressiveRepoCacheProvider.markSynced('get', branchStatusesUrl, false);\n}\n\ninterface BbIssue {\n id: number;\n title: string;\n kind: string;\n content?: { raw: string };\n}\n\nasync function findOpenIssues(title: string): Promise<BbIssue[]> {\n try {\n const filters = [\n `title=${JSON.stringify(title)}`,\n '(state = \"new\" OR state = \"open\")',\n ];\n if (renovateUserUuid) {\n filters.push(`reporter.uuid=\"${renovateUserUuid}\"`);\n }\n const filter = encodeURIComponent(filters.join(' AND '));\n return (\n (\n await bitbucketHttp.getJsonUnchecked<{ values: BbIssue[] }>(\n `/2.0/repositories/${config.repository}/issues?q=${filter}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body.values /* v8 ignore next */ || []\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error finding issues');\n return [];\n }\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n logger.debug(`findIssue(${title})`);\n\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot findIssue');\n return null;\n }\n const issues = await findOpenIssues(title);\n if (!issues.length) {\n return null;\n }\n const [issue] = issues;\n return {\n number: issue.id,\n body: issue.content?.raw,\n };\n}\n\nasync function closeIssue(issueNumber: number): Promise<void> {\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/issues/${issueNumber}`,\n {\n body: { state: 'closed' },\n },\n );\n}\n\nexport function massageMarkdown(input: string): string {\n // Remove any HTML we use\n // See https://bitbucket.org/tutorials/markdowndemo/src for supported markdown syntax\n\n const after = smartTruncate(input, maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'by renaming this PR to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(\n regEx(\n /<details>\\n(<summary>View abandoned dependencies.*<\\/summary>\\n\\n)([\\s\\S]*?)<\\/details>/,\n ),\n '$2',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/\\]\\(\\.\\.\\/pull\\//g), '](../../pull-requests/')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n\n return massageNestedCollapsibleSectionsIntoLists(after);\n}\n\n/**\n * Massage collapsible html sections into nested unordered lists shown on Dependency Dashboard issue.\n *\n * Bitbucket doesn't currently support collapsible syntax; https://jira.atlassian.com/browse/BCLOUD-20231\n */\nfunction massageNestedCollapsibleSectionsIntoLists(body: string): string {\n let depth = 0;\n // Parse detail parts to calculate correct list depth\n const detailsParts = body.split('<details>').map((raw) => {\n const partDepth = depth;\n\n depth += 1;\n const countClosingDetailsTags = raw.split('</details>').length - 1;\n depth = Math.max(0, depth - countClosingDetailsTags);\n\n return { raw, partDepth };\n });\n\n // Reassemble parts while replacing collapsible html elements with markdown list\n return detailsParts\n .map(({ raw, partDepth }) => {\n let t = raw;\n\n if (partDepth === 0) {\n return t;\n }\n\n const partIndentation = '\\t'.repeat(partDepth - 1);\n const nestedListItemIndentation = '\\t'.repeat(partDepth);\n\n const rawContainsBlockquote = raw.includes('<blockquote>');\n\n t = t\n .replace(regEx(/<\\/?summary>/g), partDepth === 1 ? '**' : '`')\n .replace(regEx(/( - `)/g), `${nestedListItemIndentation}$1`)\n .replace(regEx(/(- \\[)/g), `${nestedListItemIndentation}$1`);\n\n let result = partIndentation;\n if (rawContainsBlockquote || partDepth > 1) {\n result += ' - ';\n }\n result += t;\n\n return result;\n })\n .join('')\n .replace(/<\\/?(summary|details|blockquote)>/g, '');\n}\n\nexport function maxBodyLength(): number {\n return 250000;\n}\n\nexport async function ensureIssue({\n title,\n reuseTitle,\n body,\n}: EnsureIssueConfig): Promise<EnsureIssueResult | null> {\n logger.debug(`ensureIssue()`);\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot ensureIssue');\n logger.debug(`Failed to ensure Issue with title:${title}`);\n return null;\n }\n try {\n let issues = await findOpenIssues(title);\n const description = massageMarkdown(sanitize(body));\n const issueKind = 'task';\n\n if (!issues.length && reuseTitle) {\n issues = await findOpenIssues(reuseTitle);\n }\n if (issues.length) {\n // Close any duplicates\n for (const issue of issues.slice(1)) {\n await closeIssue(issue.id);\n }\n const [issue] = issues;\n\n if (\n issue.title !== title ||\n String(issue.content?.raw).trim() !== description.trim() ||\n issue.kind !== issueKind\n ) {\n logger.debug('Issue updated');\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/issues/${issue.id}`,\n {\n body: {\n kind: issueKind,\n content: {\n raw: readOnlyIssueBody(description),\n markup: 'markdown',\n },\n },\n },\n );\n return 'updated';\n }\n } else {\n logger.info('Issue created');\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/issues`,\n {\n body: {\n title,\n kind: issueKind,\n content: {\n raw: readOnlyIssueBody(description),\n markup: 'markdown',\n },\n },\n },\n );\n return 'created';\n }\n } catch (err) /* v8 ignore next */ {\n if (err.message.startsWith('Repository has no issue tracker.')) {\n logger.debug(`Issues are disabled, so could not create issue: ${title}`);\n } else {\n logger.warn({ err }, 'Could not ensure issue');\n }\n }\n return null;\n}\n\n/* v8 ignore next */\nexport async function getIssueList(): Promise<Issue[]> {\n logger.debug(`getIssueList()`);\n\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot getIssueList');\n return [];\n }\n try {\n const filters = ['(state = \"new\" OR state = \"open\")'];\n if (renovateUserUuid) {\n filters.push(`reporter.uuid=\"${renovateUserUuid}\"`);\n }\n const filter = encodeURIComponent(filters.join(' AND '));\n const url = `/2.0/repositories/${config.repository}/issues?q=${filter}`;\n const res = await bitbucketHttp.getJsonUnchecked<{ values: Issue[] }>(url, {\n cacheProvider: repoCacheProvider,\n });\n return res.body.values || [];\n } catch (err) {\n logger.warn({ err }, 'Error finding issues');\n return [];\n }\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot ensureIssueClosing');\n return;\n }\n const issues = await findOpenIssues(title);\n for (const issue of issues) {\n await closeIssue(issue.id);\n }\n}\n\nexport function addAssignees(\n _prNr: number,\n _assignees: string[],\n): Promise<void> {\n // Bitbucket supports \"participants\" and \"reviewers\" so does not seem to have the concept of \"assignee\"\n logger.warn('Cannot add assignees');\n return Promise.resolve();\n}\n\nexport async function addReviewers(\n prId: number,\n reviewers: string[],\n): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers.join(', ')}' to #${prId}`);\n\n // TODO #22198\n const { title } = (await getPr(prId))!;\n\n const body = {\n title,\n reviewers: reviewers.map((username: string) => {\n const isUUID =\n username.startsWith('{') &&\n username.endsWith('}') &&\n UUIDRegex.test(username.slice(1, -1));\n const key = isUUID ? 'uuid' : 'username';\n return {\n [key]: username,\n };\n }),\n };\n\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prId}`,\n {\n body,\n },\n );\n}\n\n/* v8 ignore next */\nexport function deleteLabel(): never {\n throw new Error('deleteLabel not implemented');\n}\n\nexport function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n // https://developer.atlassian.com/bitbucket/api/2/reference/search?q=pullrequest+comment\n return comments.ensureComment({\n config,\n number,\n topic,\n content: sanitize(content),\n });\n}\n\nexport function ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n return comments.ensureCommentRemoval(config, deleteConfig);\n}\n\nasync function sanitizeReviewers(\n reviewers: Account[],\n err: any,\n): Promise<Account[] | undefined> {\n if (err.statusCode === 400 && err.body?.error?.fields?.reviewers) {\n const sanitizedReviewers: Account[] = [];\n\n const MSG_AUTHOR_AND_REVIEWER =\n 'is the author and cannot be included as a reviewer.';\n const MSG_MALFORMED_REVIEWERS_LIST = 'Malformed reviewers list';\n const MSG_NOT_WORKSPACE_MEMBER =\n 'is not a member of this workspace and cannot be added to this pull request';\n\n for (const msg of err.body.error.fields.reviewers) {\n // Bitbucket returns a 400 if any of the PR reviewer accounts are now inactive (ie: disabled/suspended)\n if (msg === MSG_MALFORMED_REVIEWERS_LIST) {\n logger.debug(\n { err },\n 'PR contains reviewers that may be either inactive or no longer a member of this workspace. Will try setting only active reviewers',\n );\n\n // Validate that each previous PR reviewer account is still active\n for (const reviewer of reviewers) {\n const reviewerUser = (\n await bitbucketHttp.getJsonUnchecked<Account>(\n `/2.0/users/${reviewer.uuid}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n\n if (reviewerUser.account_status === 'active') {\n // There are cases where an active user may still not be a member of a workspace\n if (await isAccountMemberOfWorkspace(reviewer, config.repository)) {\n sanitizedReviewers.push(reviewer);\n }\n }\n }\n // Bitbucket returns a 400 if any of the PR reviewer accounts are no longer members of this workspace\n } else if (msg.endsWith(MSG_NOT_WORKSPACE_MEMBER)) {\n logger.debug(\n { err },\n 'PR contains reviewer accounts which are no longer member of this workspace. Will try setting only member reviewers',\n );\n\n // Validate that each previous PR reviewer account is still a member of this workspace\n for (const reviewer of reviewers) {\n if (await isAccountMemberOfWorkspace(reviewer, config.repository)) {\n sanitizedReviewers.push(reviewer);\n }\n }\n } else if (msg.endsWith(MSG_AUTHOR_AND_REVIEWER)) {\n logger.debug(\n { err },\n 'PR contains reviewer accounts which are also the author. Will try setting only non-author reviewers',\n );\n const author = msg.replace(MSG_AUTHOR_AND_REVIEWER, '').trim();\n for (const reviewer of reviewers) {\n if (reviewer.display_name !== author) {\n sanitizedReviewers.push(reviewer);\n }\n }\n } else {\n return undefined;\n }\n }\n\n return sanitizedReviewers;\n }\n\n return undefined;\n}\n\nasync function isAccountMemberOfWorkspace(\n reviewer: Account,\n repository: string,\n): Promise<boolean> {\n const workspace = repository.split('/')[0];\n\n try {\n await bitbucketHttp.get(\n `/2.0/workspaces/${workspace}/members/${reviewer.uuid}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n );\n\n return true;\n } catch (err) {\n // HTTP 404: User cannot be found, or the user is not a member of this workspace.\n if (err.statusCode === 404) {\n logger.debug(\n { err },\n `User ${reviewer.display_name} is not a member of the workspace ${workspace}. Will be removed from the PR`,\n );\n\n return false;\n }\n throw err;\n }\n}\n\n// Creates PR and returns PR number\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: description,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n // labels is not supported in Bitbucket: https://bitbucket.org/site/master/issues/11976/ability-to-add-labels-to-pull-requests-bb\n\n const base = targetBranch;\n\n logger.debug({ repository: config.repository, title, base }, 'Creating PR');\n\n let reviewers: Account[] = [];\n\n if (platformPrOptions?.bbUseDefaultReviewers) {\n const reviewersResponse = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<EffectiveReviewer>>(\n `/2.0/repositories/${config.repository}/effective-default-reviewers`,\n {\n paginate: true,\n cacheProvider: aggressiveRepoCacheProvider,\n },\n )\n ).body;\n reviewers = reviewersResponse.values.map((reviewer: EffectiveReviewer) => ({\n uuid: reviewer.user.uuid,\n display_name: reviewer.user.display_name,\n }));\n }\n\n const body = {\n title,\n description: sanitize(description),\n source: {\n branch: {\n name: sourceBranch,\n },\n },\n destination: {\n branch: {\n name: base,\n },\n },\n close_source_branch: true,\n reviewers,\n };\n\n try {\n const prRes = (\n await bitbucketHttp.postJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests`,\n {\n body,\n },\n )\n ).body;\n const pr = utils.prInfo(prRes);\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n pr,\n );\n if (platformPrOptions?.bbAutoResolvePrTasks) {\n await autoResolvePrTasks(pr);\n }\n return pr;\n } catch (err) /* v8 ignore next */ {\n // Try sanitizing reviewers\n const sanitizedReviewers = await sanitizeReviewers(reviewers, err);\n\n if (sanitizedReviewers === undefined) {\n logger.warn({ err }, 'Error creating pull request');\n throw err;\n } else {\n const prRes = (\n await bitbucketHttp.postJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests`,\n {\n body: {\n ...body,\n reviewers: sanitizedReviewers,\n },\n },\n )\n ).body;\n const pr = utils.prInfo(prRes);\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n pr,\n );\n if (platformPrOptions?.bbAutoResolvePrTasks) {\n await autoResolvePrTasks(pr);\n }\n return pr;\n }\n }\n}\n\nasync function autoResolvePrTasks(pr: Pr): Promise<void> {\n logger.debug(`Auto resolve PR tasks in #${pr.number}`);\n try {\n const unResolvedTasks = (\n await bitbucketHttp.getJson(\n `/2.0/repositories/${config.repository}/pullrequests/${pr.number}/tasks`,\n { paginate: true, pagelen: 100 },\n UnresolvedPrTasks,\n )\n ).body;\n\n logger.trace(\n {\n prId: pr.number,\n listTaskRes: unResolvedTasks,\n },\n 'List PR tasks',\n );\n\n for (const task of unResolvedTasks) {\n const res = await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${pr.number}/tasks/${task.id}`,\n {\n body: {\n state: 'RESOLVED',\n content: {\n raw: task.content.raw,\n },\n },\n },\n );\n logger.trace(\n {\n prId: pr.number,\n updateTaskResponse: res,\n },\n 'Put PR tasks - mark resolved',\n );\n }\n } catch (err) {\n logger.warn({ prId: pr.number, err }, 'Error resolving PR tasks');\n }\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: description,\n state,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n // Updating a PR in Bitbucket will clear the reviewers if reviewers is not present\n const pr = (\n await bitbucketHttp.getJsonUnchecked<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n )\n ).body;\n\n let updatedPrRes: PrResponse;\n try {\n const body: any = {\n title,\n description: sanitize(description),\n reviewers: pr.reviewers,\n };\n if (targetBranch) {\n body.destination = {\n branch: {\n name: targetBranch,\n },\n };\n }\n\n updatedPrRes = (\n await bitbucketHttp.putJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n { body },\n )\n ).body;\n } catch (err) {\n // Try sanitizing reviewers\n const sanitizedReviewers = await sanitizeReviewers(pr.reviewers, err);\n\n if (sanitizedReviewers === undefined) {\n throw err;\n } else {\n updatedPrRes = (\n await bitbucketHttp.putJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n {\n body: {\n title,\n description: sanitize(description),\n reviewers: sanitizedReviewers,\n },\n },\n )\n ).body;\n }\n }\n\n if (state === 'closed' && pr) {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/decline`,\n );\n }\n\n // update pr cache\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n utils.prInfo({ ...updatedPrRes, ...(state && { state }) }),\n );\n}\n\nexport async function mergePr({\n branchName,\n id: prNo,\n strategy: mergeStrategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${prNo}, ${branchName}, ${mergeStrategy})`);\n\n // Bitbucket Cloud does not support a rebase-alike; https://jira.atlassian.com/browse/BCLOUD-16610\n if (mergeStrategy === 'rebase') {\n logger.warn('Bitbucket Cloud does not support a \"rebase\" strategy.');\n return false;\n }\n\n try {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/merge`,\n {\n body: mergeBodyTransformer(mergeStrategy),\n },\n );\n logger.debug('Automerging succeeded');\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, `PR merge error`);\n logger.info({ pr: prNo }, 'PR automerge failed');\n return false;\n }\n return true;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../lib/modules/platform/bitbucket/index.ts"],"names":[],"mappings":"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","sourcesContent":["import URL from 'node:url';\nimport { isNonEmptyArray, isNonEmptyString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../config/global';\nimport { REPOSITORY_NOT_FOUND } from '../../../constants/error-messages';\nimport { logger } from '../../../logger';\nimport type { BranchStatus } from '../../../types';\nimport { parseJson } from '../../../util/common';\nimport * as git from '../../../util/git';\nimport * as hostRules from '../../../util/host-rules';\nimport type { BitbucketHttpOptions } from '../../../util/http/bitbucket';\nimport { BitbucketHttp, setBaseUrl } from '../../../util/http/bitbucket';\nimport { memCacheProvider } from '../../../util/http/cache/memory-http-cache-provider';\nimport {\n aggressiveRepoCacheProvider,\n repoCacheProvider,\n} from '../../../util/http/cache/repository-http-cache-provider';\nimport type { HttpOptions } from '../../../util/http/types';\nimport { regEx } from '../../../util/regex';\nimport { sanitize } from '../../../util/sanitize';\nimport { UUIDRegex, matchRegexOrGlobList } from '../../../util/string-match';\nimport type {\n AutodiscoverConfig,\n BranchStatusConfig,\n CreatePRConfig,\n EnsureCommentConfig,\n EnsureCommentRemovalConfig,\n EnsureIssueConfig,\n EnsureIssueResult,\n FindPRConfig,\n Issue,\n MergePRConfig,\n PlatformParams,\n PlatformResult,\n Pr,\n RepoParams,\n RepoResult,\n UpdatePrConfig,\n} from '../types';\nimport { repoFingerprint } from '../util';\nimport { smartTruncate } from '../utils/pr-body';\nimport { readOnlyIssueBody } from '../utils/read-only-issue-body';\nimport * as comments from './comments';\nimport { BitbucketPrCache } from './pr-cache';\nimport { RepoInfo, Repositories, UnresolvedPrTasks } from './schema';\nimport type {\n Account,\n BitbucketStatus,\n BranchResponse,\n Config,\n EffectiveReviewer,\n PagedResult,\n PrResponse,\n RepoBranchingModel,\n} from './types';\nimport * as utils from './utils';\nimport { mergeBodyTransformer } from './utils';\n\nexport const id = 'bitbucket';\n\nconst bitbucketHttp = new BitbucketHttp();\n\nconst BITBUCKET_PROD_ENDPOINT = 'https://api.bitbucket.org/';\n\nlet config: Config = {} as any;\n\nexport function resetPlatform(): void {\n config = {} as any;\n renovateUserUuid = null;\n}\n\nconst defaults = { endpoint: BITBUCKET_PROD_ENDPOINT };\n\nconst pathSeparator = '/';\n\nlet renovateUserUuid: string | null = null;\n\nexport async function initPlatform({\n endpoint,\n username,\n password,\n token,\n}: PlatformParams): Promise<PlatformResult> {\n if (!(username && password) && !token) {\n throw new Error(\n 'Init: You must configure either a Bitbucket token or username and password',\n );\n }\n if (endpoint && endpoint !== BITBUCKET_PROD_ENDPOINT) {\n logger.warn(\n `Init: Bitbucket Cloud endpoint should generally be ${BITBUCKET_PROD_ENDPOINT} but is being configured to a different value. Did you mean to use Bitbucket Server?`,\n );\n defaults.endpoint = endpoint;\n }\n setBaseUrl(defaults.endpoint);\n renovateUserUuid = null;\n const options: HttpOptions = { memCache: false };\n if (token) {\n options.token = token;\n } else {\n options.username = username;\n options.password = password;\n }\n try {\n const { uuid } = (\n await bitbucketHttp.getJsonUnchecked<Account>('/2.0/user', options)\n ).body;\n renovateUserUuid = uuid;\n } catch (err) {\n if (\n err.statusCode === 403 &&\n err.body?.error?.detail?.required?.includes('account')\n ) {\n logger.warn(`Bitbucket: missing 'account' scope for password`);\n } else {\n logger.debug({ err }, 'Unknown error fetching Bitbucket user identity');\n }\n }\n // TODO: Add a connection check that endpoint/username/password combination are valid (#9594)\n const platformConfig: PlatformResult = {\n endpoint: endpoint ?? BITBUCKET_PROD_ENDPOINT,\n };\n return Promise.resolve(platformConfig);\n}\n\n// Get all repositories that the user has access to\nexport async function getRepos(config: AutodiscoverConfig): Promise<string[]> {\n logger.debug('Autodiscovering Bitbucket Cloud repositories');\n try {\n let { body: repos } = await bitbucketHttp.getJson(\n `/2.0/repositories/?role=contributor`,\n { paginate: true },\n Repositories,\n );\n\n // if autodiscoverProjects is configured\n // filter the repos list\n const autodiscoverProjects = config.projects;\n if (isNonEmptyArray(autodiscoverProjects)) {\n logger.debug(\n { autodiscoverProjects: config.projects },\n 'Applying autodiscoverProjects filter',\n );\n repos = repos.filter(\n (repo) =>\n repo.projectName &&\n matchRegexOrGlobList(repo.projectName, autodiscoverProjects),\n );\n }\n\n return repos.map(({ owner, name }) => `${owner}/${name}`);\n } catch (err) /* v8 ignore next */ {\n logger.error({ err }, `bitbucket getRepos error`);\n throw err;\n }\n}\n\nexport async function getRawFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<string | null> {\n // See: https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Bworkspace%7D/%7Brepo_slug%7D/src/%7Bcommit%7D/%7Bpath%7D\n const repo = repoName ?? config.repository;\n const path = fileName;\n\n let finalBranchOrTag = branchOrTag;\n if (branchOrTag?.includes(pathSeparator)) {\n // Branch name contains slash, so we have to replace branch name with SHA1 of the head commit; otherwise the API will not work.\n finalBranchOrTag = await getBranchCommit(branchOrTag);\n }\n\n const url =\n `/2.0/repositories/${repo}/src/` +\n (finalBranchOrTag ?? `HEAD`) +\n `/${path}`;\n const res = await bitbucketHttp.getText(url, {\n cacheProvider: repoCacheProvider,\n });\n return res.body;\n}\n\nexport async function getJsonFile(\n fileName: string,\n repoName?: string,\n branchOrTag?: string,\n): Promise<any> {\n // TODO #22198\n const raw = await getRawFile(fileName, repoName, branchOrTag);\n return parseJson(raw, fileName);\n}\n\n// Initialize bitbucket by getting base branch and SHA\nexport async function initRepo({\n repository,\n cloneSubmodules,\n cloneSubmodulesFilter,\n bbUseDevelopmentBranch,\n}: RepoParams): Promise<RepoResult> {\n logger.debug(`initRepo(\"${repository}\")`);\n const opts = hostRules.find({\n hostType: 'bitbucket',\n url: defaults.endpoint,\n });\n config = {\n repository,\n ignorePrAuthor: GlobalConfig.get('ignorePrAuthor', false),\n } as Config;\n let info: RepoInfo;\n let mainBranch: string;\n try {\n const { body: repoInfo } = await bitbucketHttp.getJson(\n `/2.0/repositories/${repository}`,\n RepoInfo,\n );\n info = repoInfo;\n\n mainBranch = info.mainbranch;\n\n if (bbUseDevelopmentBranch) {\n // Fetch Bitbucket development branch\n const developmentBranch = (\n await bitbucketHttp.getJsonUnchecked<RepoBranchingModel>(\n `/2.0/repositories/${repository}/branching-model`,\n )\n ).body.development?.branch?.name;\n\n if (developmentBranch) {\n mainBranch = developmentBranch;\n }\n }\n\n config.defaultBranch = mainBranch;\n\n config = {\n ...config,\n owner: info.owner,\n mergeMethod: info.mergeMethod,\n has_issues: info.has_issues,\n is_private: info.is_private,\n };\n\n logger.debug(`${repository} owner = ${config.owner}`);\n } catch (err) /* v8 ignore next */ {\n if (err.statusCode === 404) {\n throw new Error(REPOSITORY_NOT_FOUND);\n }\n logger.debug({ err }, 'Unknown Bitbucket initRepo error');\n throw err;\n }\n\n const { hostname } = URL.parse(defaults.endpoint);\n\n // Converts API hostnames to their respective HTTP git hosts:\n // `api.bitbucket.org` to `bitbucket.org`\n // `api-staging.<host>` to `staging.<host>`\n // TODO #22198\n const hostnameWithoutApiPrefix = regEx(/api[.|-](.+)/).exec(hostname!)?.[1];\n\n let auth = '';\n if (opts.token) {\n auth = `x-token-auth:${opts.token}`;\n } else if (opts.password?.startsWith('ATAT')) {\n auth = `x-bitbucket-api-token-auth:${opts.password}`;\n } else {\n auth = `${opts.username!}:${opts.password!}`;\n }\n\n const url = git.getUrl({\n protocol: 'https',\n auth,\n hostname: hostnameWithoutApiPrefix,\n repository,\n });\n\n await git.initRepo({\n ...config,\n url,\n cloneSubmodules,\n cloneSubmodulesFilter,\n });\n const repoConfig: RepoResult = {\n defaultBranch: mainBranch,\n isFork: info.isFork,\n repoFingerprint: repoFingerprint(info.uuid, defaults.endpoint),\n };\n return repoConfig;\n}\n\n/* v8 ignore next */\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<Pr[]> {\n logger.trace('getPrList()');\n return await BitbucketPrCache.getPrs(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n );\n}\n\nexport async function findPr({\n branchName,\n prTitle,\n state = 'all',\n includeOtherAuthors,\n}: FindPRConfig): Promise<Pr | null> {\n logger.debug(`findPr(${branchName}, ${prTitle}, ${state})`);\n\n if (includeOtherAuthors) {\n // PR might have been created by anyone, so don't use the cached Renovate PR list\n const prs = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<PrResponse>>(\n `/2.0/repositories/${config.repository}/pullrequests?q=source.branch.name=\"${branchName}\"&state=open`,\n { cacheProvider: memCacheProvider },\n )\n ).body.values;\n\n if (prs.length === 0) {\n logger.debug(`No PR found for branch ${branchName}`);\n return null;\n }\n\n return utils.prInfo(prs[0]);\n }\n\n const prList = await getPrList();\n const pr = prList.find(\n (p) =>\n p.sourceBranch === branchName &&\n (!prTitle || p.title.toUpperCase() === prTitle.toUpperCase()) &&\n matchesState(p.state, state),\n );\n\n if (!pr) {\n return null;\n }\n logger.debug(`Found PR #${pr.number}`);\n\n /**\n * Bitbucket doesn't support renaming or reopening declined PRs.\n * Instead, we have to use comment-driven signals.\n */\n if (pr.state === 'closed') {\n const reopenComments = await comments.reopenComments(config, pr.number);\n\n if (isNonEmptyArray(reopenComments)) {\n if (config.is_private) {\n // Only workspace members could have commented on a private repository\n logger.debug(\n `Found '${comments.REOPEN_PR_COMMENT_KEYWORD}' comment from workspace member. Renovate will reopen PR ${pr.number} as a new PR`,\n );\n return null;\n }\n\n for (const comment of reopenComments) {\n if (await isAccountMemberOfWorkspace(comment.user, config.repository)) {\n logger.debug(\n `Found '${comments.REOPEN_PR_COMMENT_KEYWORD}' comment from workspace member. Renovate will reopen PR ${pr.number} as a new PR`,\n );\n return null;\n }\n }\n }\n }\n\n return pr;\n}\n\n// Gets details for a PR\nexport async function getPr(prNo: number): Promise<Pr | null> {\n const pr = (\n await bitbucketHttp.getJsonUnchecked<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n\n /* v8 ignore next */\n if (!pr) {\n return null;\n }\n\n const res: Pr = {\n ...utils.prInfo(pr),\n };\n\n if (isNonEmptyArray(pr.reviewers)) {\n res.reviewers = pr.reviewers\n .map(({ uuid }) => uuid)\n .filter(isNonEmptyString);\n }\n\n return res;\n}\n\nconst escapeHash = (input: string): string =>\n input?.replace(regEx(/#/g), '%23');\n\n// Return the commit SHA for a branch\nasync function getBranchCommit(\n branchName: string,\n): Promise<string | undefined> {\n try {\n const branch = (\n await bitbucketHttp.getJsonUnchecked<BranchResponse>(\n `/2.0/repositories/${config.repository}/refs/branches/${escapeHash(\n branchName,\n )}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n return branch.target.hash;\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, `getBranchCommit('${branchName}') failed'`);\n return undefined;\n }\n}\n\n// Returns the Pull Request for a branch. Null if not exists.\nexport async function getBranchPr(branchName: string): Promise<Pr | null> {\n logger.debug(`getBranchPr(${branchName})`);\n const existingPr = await findPr({\n branchName,\n state: 'open',\n });\n return existingPr ? getPr(existingPr.number) : null;\n}\n\nasync function getStatus(\n branchName: string,\n memCache = true,\n): Promise<BitbucketStatus[]> {\n const sha = await getBranchCommit(branchName);\n const opts: BitbucketHttpOptions = { paginate: true };\n /* v8 ignore next: temporary code */\n if (memCache) {\n opts.cacheProvider = aggressiveRepoCacheProvider;\n } else {\n opts.memCache = false;\n }\n return (\n await bitbucketHttp.getJsonUnchecked<PagedResult<BitbucketStatus>>(\n `/2.0/repositories/${config.repository}/commit/${sha!}/statuses`,\n opts,\n )\n ).body.values;\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 const statuses = await getStatus(branchName);\n logger.debug({ branch: branchName, statuses }, 'branch status check result');\n if (!statuses.length) {\n logger.debug('empty branch status check result = returning \"pending\"');\n return 'yellow';\n }\n const noOfFailures = statuses.filter(\n (status: { state: string }) =>\n status.state === 'FAILED' || status.state === 'STOPPED',\n ).length;\n if (noOfFailures) {\n return 'red';\n }\n const noOfPending = statuses.filter(\n (status: { state: string }) => status.state === 'INPROGRESS',\n ).length;\n if (noOfPending) {\n return 'yellow';\n }\n if (\n !internalChecksAsSuccess &&\n statuses.every(\n (status) =>\n status.state === 'SUCCESSFUL' && status.key?.startsWith('renovate/'),\n )\n ) {\n logger.debug(\n 'Successful checks are all internal renovate/ checks, so returning \"pending\" branch status',\n );\n return 'yellow';\n }\n return 'green';\n}\n\nconst bbToRenovateStatusMapping: Record<string, BranchStatus> = {\n SUCCESSFUL: 'green',\n INPROGRESS: 'yellow',\n FAILED: 'red',\n};\n\nexport async function getBranchStatusCheck(\n branchName: string,\n context: string,\n): Promise<BranchStatus | null> {\n const statuses = await getStatus(branchName);\n const bbState = statuses.find((status) => status.key === context)?.state;\n // TODO #22198\n return bbToRenovateStatusMapping[bbState!] || null;\n}\n\nexport async function setBranchStatus({\n branchName,\n context,\n description,\n state,\n url: targetUrl,\n}: BranchStatusConfig): Promise<void> {\n const sha = await getBranchCommit(branchName);\n\n // TargetUrl can not be empty so default to bitbucket\n /* v8 ignore next */\n const url = targetUrl ?? 'https://bitbucket.org';\n\n const body = {\n name: context,\n state: utils.buildStates[state],\n key: context,\n description,\n url,\n };\n\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/commit/${sha}/statuses/build`,\n { body },\n );\n\n // invalidate status cache\n const branchStatusesUrl = bitbucketHttp\n .resolveUrl(`/2.0/repositories/${config.repository}/commit/${sha}/statuses`)\n .toString();\n aggressiveRepoCacheProvider.markSynced('get', branchStatusesUrl, false);\n}\n\ninterface BbIssue {\n id: number;\n title: string;\n kind: string;\n content?: { raw: string };\n}\n\nasync function findOpenIssues(title: string): Promise<BbIssue[]> {\n try {\n const filters = [\n `title=${JSON.stringify(title)}`,\n '(state = \"new\" OR state = \"open\")',\n ];\n if (renovateUserUuid) {\n filters.push(`reporter.uuid=\"${renovateUserUuid}\"`);\n }\n const filter = encodeURIComponent(filters.join(' AND '));\n return (\n (\n await bitbucketHttp.getJsonUnchecked<{ values: BbIssue[] }>(\n `/2.0/repositories/${config.repository}/issues?q=${filter}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body.values /* v8 ignore next */ || []\n );\n } catch (err) /* v8 ignore next */ {\n logger.warn({ err }, 'Error finding issues');\n return [];\n }\n}\n\nexport async function findIssue(title: string): Promise<Issue | null> {\n logger.debug(`findIssue(${title})`);\n\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot findIssue');\n return null;\n }\n const issues = await findOpenIssues(title);\n if (!issues.length) {\n return null;\n }\n const [issue] = issues;\n return {\n number: issue.id,\n body: issue.content?.raw,\n };\n}\n\nasync function closeIssue(issueNumber: number): Promise<void> {\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/issues/${issueNumber}`,\n {\n body: { state: 'closed' },\n },\n );\n}\n\n/**\n * Remove or transform markdown into Bitbucket supported syntax.\n *\n * See https://bitbucket.org/tutorials/markdowndemo/src for supported markdown syntax\n */\nexport function massageMarkdown(input: string): string {\n const after = smartTruncate(input, maxBodyLength())\n .replace(\n 'you tick the rebase/retry checkbox',\n 'by renaming this PR to start with \"rebase!\"',\n )\n .replace(\n 'checking the rebase/retry box above',\n 'renaming the PR to start with \"rebase!\"',\n )\n .replace(\n regEx(\n /<details>\\n(<summary>View abandoned dependencies.*<\\/summary>\\n\\n)([\\s\\S]*?)<\\/details>/,\n ),\n '$2',\n )\n .replace(regEx(`\\n---\\n\\n.*?<!-- rebase-check -->.*?\\n`), '')\n .replace(regEx(/\\]\\(\\.\\.\\/pull\\//g), '](../../pull-requests/')\n .replace(regEx(/<!--renovate-(?:debug|config-hash):.*?-->/g), '');\n\n return massageDetailSummaryHtmlToNestedLists(after);\n}\n\n/**\n * Massage collapsible html sections into nested unordered lists.\n *\n * Bitbucket doesn't currently support collapsible syntax; https://jira.atlassian.com/browse/BCLOUD-20231\n */\nfunction massageDetailSummaryHtmlToNestedLists(body: string): string {\n let depth = 0;\n // Parse detail parts to calculate correct list depth\n const detailsParts = body.split('<details>').map((raw) => {\n const partDepth = depth;\n\n depth += 1;\n const countClosingDetailsTags = raw.split('</details>').length - 1;\n depth = Math.max(0, depth - countClosingDetailsTags);\n\n return { raw, partDepth };\n });\n\n // Reassemble parts while replacing collapsible html elements with markdown list\n return detailsParts\n .map(({ raw, partDepth }) => {\n let t = raw;\n\n if (partDepth === 0) {\n return t;\n }\n\n const partIndentation = '\\t'.repeat(partDepth - 1);\n const nestedListItemIndentation = '\\t'.repeat(partDepth);\n\n const rawContainsBlockquote = raw.includes('<blockquote>');\n\n t = t.replace(regEx(/<\\/?summary>/g), partDepth === 1 ? '**' : '`');\n\n if (partDepth > 1) {\n t = t.replace(\n regEx(/^([ \\t]*- [`[])/gm),\n `${nestedListItemIndentation}$1`,\n );\n }\n\n let result = partIndentation;\n if (rawContainsBlockquote || partDepth > 1) {\n result += ' - ';\n }\n result += t;\n\n return result;\n })\n .join('')\n .replace(/<\\/?(summary|details|blockquote)>/g, '');\n}\n\nexport function maxBodyLength(): number {\n return 250000;\n}\n\nexport async function ensureIssue({\n title,\n reuseTitle,\n body,\n}: EnsureIssueConfig): Promise<EnsureIssueResult | null> {\n logger.debug(`ensureIssue()`);\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot ensureIssue');\n logger.debug(`Failed to ensure Issue with title:${title}`);\n return null;\n }\n try {\n let issues = await findOpenIssues(title);\n const description = massageMarkdown(sanitize(body));\n const issueKind = 'task';\n\n if (!issues.length && reuseTitle) {\n issues = await findOpenIssues(reuseTitle);\n }\n if (issues.length) {\n // Close any duplicates\n for (const issue of issues.slice(1)) {\n await closeIssue(issue.id);\n }\n const [issue] = issues;\n\n if (\n issue.title !== title ||\n String(issue.content?.raw).trim() !== description.trim() ||\n issue.kind !== issueKind\n ) {\n logger.debug('Issue updated');\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/issues/${issue.id}`,\n {\n body: {\n kind: issueKind,\n content: {\n raw: readOnlyIssueBody(description),\n markup: 'markdown',\n },\n },\n },\n );\n return 'updated';\n }\n } else {\n logger.info('Issue created');\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/issues`,\n {\n body: {\n title,\n kind: issueKind,\n content: {\n raw: readOnlyIssueBody(description),\n markup: 'markdown',\n },\n },\n },\n );\n return 'created';\n }\n } catch (err) /* v8 ignore next */ {\n if (err.message.startsWith('Repository has no issue tracker.')) {\n logger.debug(`Issues are disabled, so could not create issue: ${title}`);\n } else {\n logger.warn({ err }, 'Could not ensure issue');\n }\n }\n return null;\n}\n\n/* v8 ignore next */\nexport async function getIssueList(): Promise<Issue[]> {\n logger.debug(`getIssueList()`);\n\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot getIssueList');\n return [];\n }\n try {\n const filters = ['(state = \"new\" OR state = \"open\")'];\n if (renovateUserUuid) {\n filters.push(`reporter.uuid=\"${renovateUserUuid}\"`);\n }\n const filter = encodeURIComponent(filters.join(' AND '));\n const url = `/2.0/repositories/${config.repository}/issues?q=${filter}`;\n const res = await bitbucketHttp.getJsonUnchecked<{ values: Issue[] }>(url, {\n cacheProvider: repoCacheProvider,\n });\n return res.body.values || [];\n } catch (err) {\n logger.warn({ err }, 'Error finding issues');\n return [];\n }\n}\n\nexport async function ensureIssueClosing(title: string): Promise<void> {\n /* v8 ignore next */\n if (!config.has_issues) {\n logger.debug('Issues are disabled - cannot ensureIssueClosing');\n return;\n }\n const issues = await findOpenIssues(title);\n for (const issue of issues) {\n await closeIssue(issue.id);\n }\n}\n\nexport function addAssignees(\n _prNr: number,\n _assignees: string[],\n): Promise<void> {\n // Bitbucket supports \"participants\" and \"reviewers\" so does not seem to have the concept of \"assignee\"\n logger.warn('Cannot add assignees');\n return Promise.resolve();\n}\n\nexport async function addReviewers(\n prId: number,\n reviewers: string[],\n): Promise<void> {\n logger.debug(`Adding reviewers '${reviewers.join(', ')}' to #${prId}`);\n\n // TODO #22198\n const { title } = (await getPr(prId))!;\n\n const body = {\n title,\n reviewers: reviewers.map((username: string) => {\n const isUUID =\n username.startsWith('{') &&\n username.endsWith('}') &&\n UUIDRegex.test(username.slice(1, -1));\n const key = isUUID ? 'uuid' : 'username';\n return {\n [key]: username,\n };\n }),\n };\n\n await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prId}`,\n {\n body,\n },\n );\n}\n\n/* v8 ignore next */\nexport function deleteLabel(): never {\n throw new Error('deleteLabel not implemented');\n}\n\nexport function ensureComment({\n number,\n topic,\n content,\n}: EnsureCommentConfig): Promise<boolean> {\n // https://developer.atlassian.com/bitbucket/api/2/reference/search?q=pullrequest+comment\n return comments.ensureComment({\n config,\n number,\n topic,\n content: sanitize(content),\n });\n}\n\nexport function ensureCommentRemoval(\n deleteConfig: EnsureCommentRemovalConfig,\n): Promise<void> {\n return comments.ensureCommentRemoval(config, deleteConfig);\n}\n\nasync function sanitizeReviewers(\n reviewers: Account[],\n err: any,\n): Promise<Account[] | undefined> {\n if (err.statusCode === 400 && err.body?.error?.fields?.reviewers) {\n const sanitizedReviewers: Account[] = [];\n\n const MSG_AUTHOR_AND_REVIEWER =\n 'is the author and cannot be included as a reviewer.';\n const MSG_MALFORMED_REVIEWERS_LIST = 'Malformed reviewers list';\n const MSG_NOT_WORKSPACE_MEMBER =\n 'is not a member of this workspace and cannot be added to this pull request';\n\n for (const msg of err.body.error.fields.reviewers) {\n // Bitbucket returns a 400 if any of the PR reviewer accounts are now inactive (ie: disabled/suspended)\n if (msg === MSG_MALFORMED_REVIEWERS_LIST) {\n logger.debug(\n { err },\n 'PR contains reviewers that may be either inactive or no longer a member of this workspace. Will try setting only active reviewers',\n );\n\n // Validate that each previous PR reviewer account is still active\n for (const reviewer of reviewers) {\n const reviewerUser = (\n await bitbucketHttp.getJsonUnchecked<Account>(\n `/2.0/users/${reviewer.uuid}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n )\n ).body;\n\n if (reviewerUser.account_status === 'active') {\n // There are cases where an active user may still not be a member of a workspace\n if (await isAccountMemberOfWorkspace(reviewer, config.repository)) {\n sanitizedReviewers.push(reviewer);\n }\n }\n }\n // Bitbucket returns a 400 if any of the PR reviewer accounts are no longer members of this workspace\n } else if (msg.endsWith(MSG_NOT_WORKSPACE_MEMBER)) {\n logger.debug(\n { err },\n 'PR contains reviewer accounts which are no longer member of this workspace. Will try setting only member reviewers',\n );\n\n // Validate that each previous PR reviewer account is still a member of this workspace\n for (const reviewer of reviewers) {\n if (await isAccountMemberOfWorkspace(reviewer, config.repository)) {\n sanitizedReviewers.push(reviewer);\n }\n }\n } else if (msg.endsWith(MSG_AUTHOR_AND_REVIEWER)) {\n logger.debug(\n { err },\n 'PR contains reviewer accounts which are also the author. Will try setting only non-author reviewers',\n );\n const author = msg.replace(MSG_AUTHOR_AND_REVIEWER, '').trim();\n for (const reviewer of reviewers) {\n if (reviewer.display_name !== author) {\n sanitizedReviewers.push(reviewer);\n }\n }\n } else {\n return undefined;\n }\n }\n\n return sanitizedReviewers;\n }\n\n return undefined;\n}\n\nasync function isAccountMemberOfWorkspace(\n reviewer: Account,\n repository: string,\n): Promise<boolean> {\n const workspace = repository.split('/')[0];\n\n try {\n await bitbucketHttp.get(\n `/2.0/workspaces/${workspace}/members/${reviewer.uuid}`,\n { cacheProvider: aggressiveRepoCacheProvider },\n );\n\n return true;\n } catch (err) {\n // HTTP 404: User cannot be found, or the user is not a member of this workspace.\n if (err.statusCode === 404) {\n logger.debug(\n { err },\n `User ${reviewer.display_name} is not a member of the workspace ${workspace}. Will be removed from the PR`,\n );\n\n return false;\n }\n throw err;\n }\n}\n\n// Creates PR and returns PR number\nexport async function createPr({\n sourceBranch,\n targetBranch,\n prTitle: title,\n prBody: description,\n platformPrOptions,\n}: CreatePRConfig): Promise<Pr> {\n // labels is not supported in Bitbucket: https://bitbucket.org/site/master/issues/11976/ability-to-add-labels-to-pull-requests-bb\n\n const base = targetBranch;\n\n logger.debug({ repository: config.repository, title, base }, 'Creating PR');\n\n let reviewers: Account[] = [];\n\n if (platformPrOptions?.bbUseDefaultReviewers) {\n const reviewersResponse = (\n await bitbucketHttp.getJsonUnchecked<PagedResult<EffectiveReviewer>>(\n `/2.0/repositories/${config.repository}/effective-default-reviewers`,\n {\n paginate: true,\n cacheProvider: aggressiveRepoCacheProvider,\n },\n )\n ).body;\n reviewers = reviewersResponse.values.map((reviewer: EffectiveReviewer) => ({\n uuid: reviewer.user.uuid,\n display_name: reviewer.user.display_name,\n }));\n }\n\n const body = {\n title,\n description: sanitize(description),\n source: {\n branch: {\n name: sourceBranch,\n },\n },\n destination: {\n branch: {\n name: base,\n },\n },\n close_source_branch: true,\n reviewers,\n };\n\n try {\n const prRes = (\n await bitbucketHttp.postJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests`,\n {\n body,\n },\n )\n ).body;\n const pr = utils.prInfo(prRes);\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n pr,\n );\n if (platformPrOptions?.bbAutoResolvePrTasks) {\n await autoResolvePrTasks(pr);\n }\n return pr;\n } catch (err) /* v8 ignore next */ {\n // Try sanitizing reviewers\n const sanitizedReviewers = await sanitizeReviewers(reviewers, err);\n\n if (sanitizedReviewers === undefined) {\n logger.warn({ err }, 'Error creating pull request');\n throw err;\n } else {\n const prRes = (\n await bitbucketHttp.postJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests`,\n {\n body: {\n ...body,\n reviewers: sanitizedReviewers,\n },\n },\n )\n ).body;\n const pr = utils.prInfo(prRes);\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n pr,\n );\n if (platformPrOptions?.bbAutoResolvePrTasks) {\n await autoResolvePrTasks(pr);\n }\n return pr;\n }\n }\n}\n\nasync function autoResolvePrTasks(pr: Pr): Promise<void> {\n logger.debug(`Auto resolve PR tasks in #${pr.number}`);\n try {\n const unResolvedTasks = (\n await bitbucketHttp.getJson(\n `/2.0/repositories/${config.repository}/pullrequests/${pr.number}/tasks`,\n { paginate: true, pagelen: 100 },\n UnresolvedPrTasks,\n )\n ).body;\n\n logger.trace(\n {\n prId: pr.number,\n listTaskRes: unResolvedTasks,\n },\n 'List PR tasks',\n );\n\n for (const task of unResolvedTasks) {\n const res = await bitbucketHttp.putJson(\n `/2.0/repositories/${config.repository}/pullrequests/${pr.number}/tasks/${task.id}`,\n {\n body: {\n state: 'RESOLVED',\n content: {\n raw: task.content.raw,\n },\n },\n },\n );\n logger.trace(\n {\n prId: pr.number,\n updateTaskResponse: res,\n },\n 'Put PR tasks - mark resolved',\n );\n }\n } catch (err) {\n logger.warn({ prId: pr.number, err }, 'Error resolving PR tasks');\n }\n}\n\nexport async function updatePr({\n number: prNo,\n prTitle: title,\n prBody: description,\n state,\n targetBranch,\n}: UpdatePrConfig): Promise<void> {\n logger.debug(`updatePr(${prNo}, ${title}, body)`);\n // Updating a PR in Bitbucket will clear the reviewers if reviewers is not present\n const pr = (\n await bitbucketHttp.getJsonUnchecked<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n )\n ).body;\n\n let updatedPrRes: PrResponse;\n try {\n const body: any = {\n title,\n description: sanitize(description),\n reviewers: pr.reviewers,\n };\n if (targetBranch) {\n body.destination = {\n branch: {\n name: targetBranch,\n },\n };\n }\n\n updatedPrRes = (\n await bitbucketHttp.putJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n { body },\n )\n ).body;\n } catch (err) {\n // Try sanitizing reviewers\n const sanitizedReviewers = await sanitizeReviewers(pr.reviewers, err);\n\n if (sanitizedReviewers === undefined) {\n throw err;\n } else {\n updatedPrRes = (\n await bitbucketHttp.putJson<PrResponse>(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}`,\n {\n body: {\n title,\n description: sanitize(description),\n reviewers: sanitizedReviewers,\n },\n },\n )\n ).body;\n }\n }\n\n if (state === 'closed' && pr) {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/decline`,\n );\n }\n\n // update pr cache\n await BitbucketPrCache.setPr(\n bitbucketHttp,\n config.repository,\n renovateUserUuid,\n utils.prInfo({ ...updatedPrRes, ...(state && { state }) }),\n );\n}\n\nexport async function mergePr({\n branchName,\n id: prNo,\n strategy: mergeStrategy,\n}: MergePRConfig): Promise<boolean> {\n logger.debug(`mergePr(${prNo}, ${branchName}, ${mergeStrategy})`);\n\n // Bitbucket Cloud does not support a rebase-alike; https://jira.atlassian.com/browse/BCLOUD-16610\n if (mergeStrategy === 'rebase') {\n logger.warn('Bitbucket Cloud does not support a \"rebase\" strategy.');\n return false;\n }\n\n try {\n await bitbucketHttp.postJson(\n `/2.0/repositories/${config.repository}/pullrequests/${prNo}/merge`,\n {\n body: mergeBodyTransformer(mergeStrategy),\n },\n );\n logger.debug('Automerging succeeded');\n } catch (err) /* v8 ignore next */ {\n logger.debug({ err }, `PR merge error`);\n logger.info({ pr: prNo }, 'PR automerge failed');\n return false;\n }\n return true;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "renovate",
|
|
3
3
|
"description": "Automated dependency updates. Flexible so you don't need to be.",
|
|
4
|
-
"version": "42.81.
|
|
4
|
+
"version": "42.81.11",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
|
7
7
|
"renovate": "dist/renovate.js",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"@opentelemetry/semantic-conventions": "1.38.0",
|
|
119
119
|
"@pnpm/parse-overrides": "1001.0.3",
|
|
120
120
|
"@qnighy/marshal": "0.1.3",
|
|
121
|
-
"@renovatebot/detect-tools": "1.2.
|
|
121
|
+
"@renovatebot/detect-tools": "1.2.7",
|
|
122
122
|
"@renovatebot/osv-offline": "2.0.1",
|
|
123
123
|
"@renovatebot/pep440": "4.2.1",
|
|
124
124
|
"@renovatebot/pgp": "1.2.3",
|
package/renovate-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "JSON schema for Renovate 42.81.
|
|
2
|
+
"title": "JSON schema for Renovate 42.81.11 config files (https://renovatebot.com/)",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"x-renovate-version": "42.81.
|
|
4
|
+
"x-renovate-version": "42.81.11",
|
|
5
5
|
"allowComments": true,
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|