UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

106 lines (105 loc) 3.97 kB
import { CONFIG_GIT_URL_UNAVAILABLE } from "../../../constants/error-messages.js"; import { regEx } from "../../../util/regex.js"; import { logger } from "../../../logger/index.js"; import { joinUrlParts, parseUrl } from "../../../util/url.js"; import { find } from "../../../util/host-rules.js"; import { hashBody } from "../pr-body.js"; //#region lib/modules/platform/gerrit/utils.ts const MIN_GERRIT_VERSION = "3.0.0"; const TAG_PULL_REQUEST_BODY = "pull-request"; const DEFAULT_SSH_PORT = `29418`; /** * Max comment size in Gerrit (16kiB by default) * https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#change:~:text=change.commentSizeLimit */ const MAX_GERRIT_COMMENT_SIZE = 16 * 1024; const REQUEST_DETAILS_FOR_PRS = [ "MESSAGES", "LABELS", "DETAILED_ACCOUNTS", "CURRENT_REVISION", "COMMIT_FOOTERS" ]; function getGerritRepoUrl(repository, endpoint, gitUrl) { const endpointUrl = parseUrl(endpoint); if (!endpointUrl) throw new Error(CONFIG_GIT_URL_UNAVAILABLE); const url = gitUrl === "ssh" ? createSshUrl(endpointUrl, repository) : createHttpUrl(endpointUrl, endpoint, repository); logger.trace({ url }, "using URL based on configured endpoint"); return url; } function createSshUrl(url, repository) { return `ssh://${url.host}:${DEFAULT_SSH_PORT}/${repository}`; } function createHttpUrl(url, endpoint, repository) { const opts = find({ hostType: "gerrit", url: endpoint }); if (!(opts.username && opts.password)) throw new Error("Init: You must configure a Gerrit Server username/password"); url.username = opts.username; url.password = opts.password; url.pathname = joinUrlParts(url.pathname, "a", encodeURIComponent(repository)); return url.toString(); } function mapPrStateToGerritFilter(state) { switch (state) { case "merged": return "status:merged"; case "open": return "status:open"; case "closed": return "status:abandoned"; case "!open": return "-status:open"; default: return null; } } function mapGerritChangeToPr(change, knownProperties) { const sourceBranch = knownProperties?.sourceBranch ?? extractSourceBranch(change); if (!sourceBranch) return null; return { number: change._number, state: mapGerritChangeStateToPrState(change.status), sourceBranch, targetBranch: change.branch, title: change.subject, createdAt: convertGerritDateToISO(change.created), labels: change.hashtags, reviewers: change.reviewers?.REVIEWER?.map((reviewer) => reviewer.username) ?? [], bodyStruct: { hash: hashBody(knownProperties?.prBody ?? findPullRequestBody(change)) }, sha: change.current_revision }; } function mapGerritChangeStateToPrState(state) { switch (state) { case "NEW": return "open"; case "MERGED": return "merged"; case "ABANDONED": return "closed"; } } function extractSourceBranch(change) { let sourceBranch = void 0; if (change.current_revision) { const re = regEx(/^Renovate-Branch: (.+)$/m); const message = change.revisions[change.current_revision].commit_with_footers; // v8 ignore else -- TODO: add test #40625 if (message) sourceBranch = re.exec(message)?.[1]; } return sourceBranch ?? void 0; } function findPullRequestBody(change) { const msg = Array.from(change.messages ?? []).reverse().find((msg) => msg.tag === TAG_PULL_REQUEST_BODY); if (msg) return msg.message.replace(/^Patch Set \d+:\n\n/, ""); } function mapBranchStatusToLabel(state, label) { const numbers = Object.keys(label.values).map((x) => parseInt(x, 10)); switch (state) { case "green": return Math.max(...numbers); case "yellow": case "red": return Math.min(...numbers); } /* v8 ignore next */ return label.default_value; } function convertGerritDateToISO(date) { return date.replace(" ", "T"); } //#endregion export { MAX_GERRIT_COMMENT_SIZE, MIN_GERRIT_VERSION, REQUEST_DETAILS_FOR_PRS, TAG_PULL_REQUEST_BODY, convertGerritDateToISO, getGerritRepoUrl, mapBranchStatusToLabel, mapGerritChangeToPr, mapPrStateToGerritFilter }; //# sourceMappingURL=utils.js.map