@process-engine/ci_tools
Version:
CI tools for process-engine.io
57 lines • 2.32 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getMergedPullRequests = void 0;
const moment = require("moment");
const cross_fetch_1 = require("cross-fetch");
const git_1 = require("../git/git");
const PULL_REQUEST_INDEX_API_URI = (0, git_1.getCurrentApiBaseUrlWithAuth)('/pulls?state=closed');
async function getMergedPullRequests(since) {
const list = await fetchPullRequests(since);
const listMergedBefore = list.filter((pr) => !!pr.mergedAt);
return listMergedBefore;
}
exports.getMergedPullRequests = getMergedPullRequests;
async function fetchPullRequests(since) {
const pullRequestsSince = await fetchPullRequestsFromApi(since);
return pullRequestsSince.map((pr) => {
const isBreakingChange = pr.labels.find((label) => label.name.toLowerCase().includes('breaking'));
return {
number: pr.number,
title: pr.title,
closedIssueNumbers: findIssueNumbers(pr.body),
mergeCommitSha: pr.merge_commit_sha,
headSha: pr.head.sha,
mergedAt: pr.merged_at,
isBreakingChange: isBreakingChange,
};
});
}
async function fetchPullRequestsFromApi(since, page = 1) {
const response = await (0, cross_fetch_1.default)(`${PULL_REQUEST_INDEX_API_URI}&page=${page}`);
const results = (await response.json());
const pullRequestsSince = results.filter((pr) => moment(pr.merged_at).isAfter(since));
if (pullRequestsSince.length > 0) {
const nextPagePullRequests = await fetchPullRequestsFromApi(since, page + 1);
return [...pullRequestsSince].concat(nextPagePullRequests);
}
return pullRequestsSince;
}
function findIssueNumbers(body) {
if (!body || body.trim().length === 0) {
return [];
}
const lines = body.split('\n').filter((line) => line.match(/^(closes|fixes)/i) != null);
const matchedNumbers = [];
lines.forEach((line) => {
const matched = line.match(/(#(\d+))/gi);
if (matched == null) {
return;
}
for (const matchedString of matched) {
const numberAsString = matchedString.replace('#', '');
matchedNumbers.push(parseInt(numberAsString));
}
});
return matchedNumbers;
}
//# sourceMappingURL=pull_requests.js.map
;