pages/api/gh-milestone-issues.js (95 lines of code) (raw):
import gql from 'graphql-tag';
import createClient from 'lib/ghapi';
import { validMilestoneRX } from 'lib/const';
import { oneLine } from 'common-tags';
const query = gql`
query getMilestoneIssue($query: String!) {
milestone_issues: search(type: ISSUE, query: $query, first: 100) {
issueCount
results: edges {
issue: node {
... on Issue {
state
number
updatedAt
title
url
repository {
name
}
assignees(first: 10) {
nodes {
id
name
login
avatarUrl
}
}
labels(first: 100) {
nodes {
name
}
}
projectCards(first: 100) {
nodes {
project {
name
url
}
}
}
timelineItems(last: 20, itemTypes: CROSS_REFERENCED_EVENT) {
edges {
event: node {
... on CrossReferencedEvent {
source {
... on PullRequest {
bodyText
permalink
reviews(last: 10, states: APPROVED) {
totalCount
edges {
review: node {
author {
login
avatarUrl
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
`;
export default async (req, res) => {
const client = createClient();
let { milestone } = req.query;
// Next.js requires us to use `-` in urls instead of `.` due to
// https://github.com/vercel/next.js/issues/16617
if (!validMilestoneRX.test(milestone)) {
res.status(400).json({ error: 'Incorrect milestone format' });
} else {
milestone = milestone.replace(/-/g, '.');
const variables = {
query: oneLine`repo:mozilla/addons
repo:mozilla/addons-server
repo:mozilla/addons-frontend
repo:mozilla/addons-blog
repo:mozilla/addons-linter
repo:mozilla/addons-code-manager
milestone:${milestone}
type:issues`,
};
const data = await client.query({
query,
variables,
});
res.json(data);
}
};