backport
Version:
A CLI tool that automates the process of backporting commits
62 lines • 1.86 kB
JavaScript
import { first } from 'lodash-es';
import { graphql } from '../../../graphql/generated/index.js';
import { BackportError } from '../../backport-error.js';
import { graphqlRequest } from './client/graphql-client.js';
export async function fetchExistingPullRequest({ options, prPayload, }) {
const { githubApiBaseUrlV4, githubToken } = options;
const query = graphql(`
query ExistingPullRequest(
$repoOwner: String!
$repoName: String!
$base: String!
$head: String!
) {
repository(owner: $repoOwner, name: $repoName) {
name
ref(qualifiedName: $head) {
name
associatedPullRequests(
first: 1
states: OPEN
baseRefName: $base
headRefName: $head
) {
edges {
node {
number
url
}
}
}
}
}
}
`);
const { repoForkOwner, head } = splitHead(prPayload);
const variables = {
repoOwner: repoForkOwner,
repoName: prPayload.repo,
base: prPayload.base,
head: head,
};
const result = await graphqlRequest({ githubToken, githubApiBaseUrlV4 }, query, variables);
if (result.error) {
throw new BackportError({
code: 'github-api-exception',
message: result.error.message,
});
}
const existingPullRequest = first(result.data?.repository?.ref?.associatedPullRequests.edges);
if (!existingPullRequest?.node) {
return;
}
return {
url: existingPullRequest.node.url,
number: existingPullRequest.node.number,
};
}
function splitHead(prPayload) {
const [repoForkOwner, head] = prPayload.head.split(':');
return { repoForkOwner, head };
}
//# sourceMappingURL=fetch-existing-pull-request.js.map