properly handle github webhooks

This commit is contained in:
bumi 2018-04-19 00:13:42 +02:00
parent 9dc1ece94f
commit 3fe6dfb2ce

110
index.js
View File

@ -152,73 +152,77 @@ module.exports = async function(robot) {
} }
function handleGitHubIssueClosed(data) { function handleGitHubIssueClosed(data) {
return new Promise((resolve/*, reject*/) => { let recipients;
// fs.writeFileSync('tmp/github-issue.json', JSON.stringify(data, null, 4)); let issue = data.issue;
let recipients; let assignees = issue.assignees.map(a => a.login);
let issue = data.issue; let web_url = issue.html_url;
let assignees = issue.assignees.map(a => a.login);
let web_url = issue.html_url;
let amount = amountFromIssueLabels(issue); let amount = amountFromIssueLabels(issue);
if (amount === 0) { resolve(); return; } if (amount === 0) {
console.log('Proposal amount from issue label is zero; ignoring');
return Promise.resolve();
}
if (assignees.length > 0) { if (assignees.length > 0) {
recipients = assignees; recipients = assignees;
} else { } else {
recipients = [issue.user.login]; recipients = [issue.user.login];
} }
let repoName = issue.repository_url.match(/.*\/(.+\/.+)$/)[1]; let repoName = issue.repository_url.match(/.*\/(.+\/.+)$/)[1];
let description = `${repoName}: ${issue.title}`; let description = `${repoName}: ${issue.title}`;
recipients.forEach(recipient => { let proposalPromisses = [];
recipients.forEach(recipient => {
proposalPromisses.push(
createProposal(recipient, amount, description, web_url, issue) createProposal(recipient, amount, description, web_url, issue)
.catch(err => robot.logger.error(err)); .catch(err => robot.logger.error(err))
}); );
resolve();
}); });
return Promise.all(proposalPromisses);
} }
function handleGitHubPullRequestClosed(data) { function handleGitHubPullRequestClosed(data) {
return new Promise((resolve, reject) => { let recipients;
let recipients; let pull_request = data.pull_request;
let pull_request = data.pull_request; let assignees = pull_request.assignees.map(a => a.login);
let assignees = pull_request.assignees.map(a => a.login); let web_url = pull_request._links.html.href;
let web_url = pull_request._links.html.href; let pr_issue_url = pull_request.issue_url;
let pr_issue_url = pull_request.issue_url;
if (assignees.length > 0) { if (assignees.length > 0) {
recipients = assignees; recipients = assignees;
} else { } else {
recipients = [pull_request.user.login]; recipients = [pull_request.user.login];
} }
fetch(pr_issue_url) return fetch(pr_issue_url)
.then(response => { .then(response => {
if (response.status >= 400) { if (response.status >= 400) {
reject('Bad response from fetching PR issue'); throw new Error('Bad response from fetching PR issue');
} }
return response.json(); return response.json();
}) })
.then(issue => { .then(issue => {
// fs.writeFileSync('tmp/github-pr-issue.json', JSON.stringify(data, null, 4)); let amount = amountFromIssueLabels(issue);
let amount = amountFromIssueLabels(issue); if (amount === 0) {
if (amount === 0) { resolve(); return; } console.log('Proposal amount from issue label is zero; ignoring');
return;
}
let repoName = pull_request.base.repo.full_name; let repoName = pull_request.base.repo.full_name;
let description = `${repoName}: ${pull_request.title}`; let description = `${repoName}: ${pull_request.title}`;
let proposalPromisses = []; let proposalPromisses = [];
recipients.forEach(recipient => { recipients.forEach(recipient => {
proposalPromisses.push( console.log(`Creating proposal for ${recipient}`);
createProposal(recipient, amount, description, web_url, pull_request) proposalPromisses.push(
.catch(err => robot.logger.error(err)) createProposal(recipient, amount, description, web_url, pull_request)
); .catch(err => robot.logger.error(err))
}); );
return Promise.all(proposalPromisses);
}); });
}); return Promise.all(proposalPromisses);
});
} }