UNPKG

backport

Version:

A CLI tool that automates the process of backporting commits

84 lines 3.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fetchPullRequestsBySearchQuery = void 0; const lodash_1 = require("lodash"); const generated_1 = require("../../../../graphql/generated"); const filterEmpty_1 = require("../../../../utils/filterEmpty"); const filterUnmergedCommits_1 = require("../../../../utils/filterUnmergedCommits"); const BackportError_1 = require("../../../BackportError"); const remoteConfig_1 = require("../../../remoteConfig"); const parseSourceCommit_1 = require("../../../sourceCommit/parseSourceCommit"); const graphqlClient_1 = require("../client/graphqlClient"); async function fetchPullRequestsBySearchQuery(options) { const { accessToken, author, dateSince, dateUntil, githubApiBaseUrlV4 = 'https://api.github.com/graphql', maxNumber = 10, prFilter, repoName, repoOwner, sourceBranch, } = options; const query = (0, generated_1.graphql)(` query PullRequestBySearchQuery($query: String!, $maxNumber: Int!) { search(query: $query, type: ISSUE, first: $maxNumber) { nodes { ... on PullRequest { __typename mergeCommit { __typename ...SourceCommitWithTargetPullRequestFragment } } } } } `); function dateFilter() { if (dateUntil && dateSince) { return [`merged:${dateSince}..${dateUntil}`]; } if (dateUntil) { return [`merged:<${dateUntil}`]; } if (dateSince) { return [`merged:>${dateSince}`]; } return []; } const searchQuery = [ 'type:pr', 'is:merged', 'sort:created-desc', `repo:${repoOwner}/${repoName}`, ...(options.author ? [`author:${options.author}`] : []), ...(prFilter.includes('base:') ? [] : [`base:${sourceBranch}`]), ...dateFilter(), prFilter, ].join(' '); const variables = { query: searchQuery, maxNumber, }; const client = (0, graphqlClient_1.getGraphQLClient)({ accessToken, githubApiBaseUrlV4 }); const result = await client.query(query, variables); if (result.error && !(0, remoteConfig_1.isMissingConfigFileException)(result)) { throw new graphqlClient_1.GithubV4Exception(result); } const { data } = result; const commits = data?.search.nodes ?.map((pullRequestNode) => { if (pullRequestNode?.__typename === 'PullRequest') { const sourceCommit = pullRequestNode.mergeCommit; if (sourceCommit) { return (0, parseSourceCommit_1.parseSourceCommit)({ options, sourceCommit }); } } }) .filter(filterEmpty_1.filterNil); // terminate if not commits were found if (!commits || (0, lodash_1.isEmpty)(commits)) { const errorText = author ? `No commits found for query:\n ${searchQuery}\n\nUse \`--all\` to see commits by all users or \`--author=<username>\` for commits from a specific user` : `No commits found for query:\n ${searchQuery}`; throw new BackportError_1.BackportError(errorText); } if (options.onlyMissing) { return commits.filter(filterUnmergedCommits_1.filterUnmergedCommits); } return commits; } exports.fetchPullRequestsBySearchQuery = fetchPullRequestsBySearchQuery; //# sourceMappingURL=fetchPullRequestsBySearchQuery.js.map