94 lines
2.0 KiB
JavaScript
94 lines
2.0 KiB
JavaScript
'use strict';
|
|
|
|
const { REPO } = require( '../config' );
|
|
const { authedGraphql } = require( '../common' );
|
|
|
|
/* eslint no-console: 0 */
|
|
|
|
const getMilestoneNumber = async ( version ) => {
|
|
const [ owner, repo ] = REPO.split( '/' );
|
|
const query = `
|
|
{
|
|
repository(owner: "${ owner }", name: "${ repo }") {
|
|
milestones(last: 50) {
|
|
nodes {
|
|
title
|
|
number
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
const data = await authedGraphql( query );
|
|
const matchingNode = data.repository.milestones.nodes.find(
|
|
( node ) => node.title === version
|
|
);
|
|
if ( ! matchingNode ) {
|
|
throw new Error(
|
|
`Unable to find a milestone matching the given version ${ version }`
|
|
);
|
|
}
|
|
return matchingNode.number;
|
|
};
|
|
|
|
const getQuery = ( milestoneNumber, before ) => {
|
|
const [ owner, repo ] = REPO.split( '/' );
|
|
const paging = before ? `, before: "${ before }"` : '';
|
|
return `
|
|
{
|
|
repository(owner: "${ owner }", name: "${ repo }") {
|
|
milestone(number: ${ milestoneNumber }) {
|
|
pullRequests(last: 100, states: [MERGED]${ paging }) {
|
|
totalCount
|
|
pageInfo {
|
|
hasPreviousPage
|
|
startCursor
|
|
}
|
|
nodes {
|
|
number
|
|
title
|
|
url
|
|
author {
|
|
login
|
|
}
|
|
body
|
|
labels(last: 10) {
|
|
nodes {
|
|
name
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;
|
|
};
|
|
|
|
const fetchAllPullRequests = async ( version ) =>
|
|
await ( async () => {
|
|
const milestoneNumber = await getMilestoneNumber( version );
|
|
const fetchResults = async ( before ) => {
|
|
const query = getQuery( milestoneNumber, before );
|
|
const results = await authedGraphql( query );
|
|
if (
|
|
results.repository.milestone.pullRequests.pageInfo
|
|
.hasPreviousPage === false
|
|
) {
|
|
return results.repository.milestone.pullRequests.nodes;
|
|
}
|
|
|
|
const nextResults = await fetchResults(
|
|
results.repository.milestone.pullRequests.pageInfo.startCursor
|
|
);
|
|
return results.repository.milestone.pullRequests.nodes.concat(
|
|
nextResults
|
|
);
|
|
};
|
|
return await fetchResults();
|
|
} )();
|
|
|
|
module.exports = {
|
|
fetchAllPullRequests,
|
|
};
|