in preview/clean.js [98:173]
const is_pr_closed = function (pr) {
console.info(`Checking status of https://github.com/elastic/${pr.repo}/pull/${pr.number}`);
return new Promise((resolve, reject) => {
const body = {
query: `
query PRClosed($repo: String!, $number: Int!) {
repository(owner:\"elastic\", name:$repo) {
pullRequest(number:$number) {
closed
}
}
}
`,
variables: {
repo: pr.repo,
number: pr.number,
},
};
const postData = JSON.stringify(body);
const req = https.request({
method: 'POST',
host: 'api.github.com',
path: '/graphql',
headers: {
'Authorization': `bearer ${token}`,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(postData),
'User-Agent': 'Elastic Docs Preview Cleaner Upper',
}
}, res => {
let data = '';
res.on('data', chunk => {
data += chunk;
});
res.on('end', () => {
if (res.statusCode !== 200) {
reject(`Error getting ${JSON.stringify(pr)} [${res.statusCode}]:\n${data}`);
} else {
let closed;
try {
const parsed = JSON.parse(data);
const repo = parsed.data.repository;
if (repo) {
closed = repo.pullRequest.closed;
} else {
console.warn(pr.branch,
"looks like a PR but isn't for a repo we manage so we assume",
'it is open');
closed = false;
}
} catch (e) {
reject(e);
return;
}
if (closed === undefined) {
reject(`unexpected reply from github:${data}`);
return;
}
if (res.headers['x-ratelimit-remaining'] < 100) {
const until = res.headers['x-ratelimit-reset'];
const millis = until * 1000 - Date.now().getTime();
console.info('Rate limited for', millis, 'milliseconds');
setTimeout(() => resolve(closed), millis);
} else {
resolve(closed);
}
}
});
});
req.on('error', err => {
reject(`Error getting ${JSON.stringify(pr)}:\n${err}`);
});
req.write(postData);
req.end();
});
}