-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilter.js
49 lines (40 loc) · 1.67 KB
/
filter.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
'use strict';
const parseLinks = require('parse-link-header');
const parseUrl = require('url-parse');
const Promise = require('bluebird');
const request = require('./request.js');
function filterIssues(issues, excludeLabels, oauth, logger) {
return Promise.map(issues, issue => {
if (issue.labels.some(label => excludeLabels.some(exclude => exclude === label.name))) {
// ignore issues with labels found in config.excludeLabels
return null;
}
if (!issue.comments) {
// keep issues no one has commented on yet
return { issue: issue, comment: null };
}
// keep issues no one has commented on in 10+ days
return staleComment(issue.comments_url, 10, oauth, logger)
.then(comment => comment ? { issue: issue, comment: comment } : null);
}).then(issues => issues.filter(issue => issue));
}
function staleComment(issueCommentsUrl, olderThanDays, oauth, logger) {
let url = parseUrl(issueCommentsUrl, true);
url.set('query', Object.assign({ per_page: 100 }, url.query));
logger.debug(`Requesting comments '${url.href}'`);
return request(url.href, oauth)
.then(res => {
if (!res.body.length) return null;
// if this isn't the last page of links then request it
let links = parseLinks(res.headers.link);
if (links && links.last && links.last.url) {
return staleComment(links.last.url, 10, oauth, logger);
}
let comment = res.body[res.body.length - 1];
let staleDate = new Date();
staleDate.setDate(staleDate.getDate() - olderThanDays);
let commentDate = new Date(comment.created_at);
return commentDate < staleDate ? comment : null;
});
}
module.exports = filterIssues;