Skip to content

Commit

Permalink
Close issues when inactive for long period of time
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronang committed Mar 18, 2017
1 parent 635399d commit afda1cf
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/github.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ type CloseIssueParams = {
};
exports.closeIssue = ({ id, owner, repo }: CloseIssueParams) => {
return got.patch(`${BASE_URI}/repos/${owner}/${repo}/issues/${id}`, {
headers,
body: JSON.stringify({ state: 'closed' })
});
};
Expand Down Expand Up @@ -91,3 +92,15 @@ exports.createIssueReaction = ({ content, number, owner, repo }: IssueParams) =>
body: JSON.stringify({ content })
}).then(({ body }) => body);
}

type LabeledIssuesParams = {
labels: string;
owner: string;
repo: string;
}

exports.getLabeledIssues = ({ labels, owner, repo }: LabeledIssuesParams) => {
console.log(`${BASE_URI}/repos/${owner}/${repo}/issues?labels=${labels}`);
return get(`${BASE_URI}/repos/${owner}/${repo}/issues?labels=${labels}`, { json: true })
.then(({ body }) => body);
}
53 changes: 53 additions & 0 deletions src/handlers/issues/closing.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// @flow

import github from '../../github';
import Logger from '../../logger';

const { log } = new Logger('issues/closing.js');

type ClosingIssuesPayload = {
repository: {
owner: { login: string; };
name: string;
}
}

const closingIssueMessage = "Closing this issue because it has been inactive for a long period of time.";

const isInactive = updatedAt => {
const idleTime = 30 * 24 * 60 * 60 * 1000;
const currentDate = new Date();
const updateDate = new Date(updatedAt);
return currentDate - updateDate > idleTime;
}

export default function({ repository }: ClosingIssuesPayload) {
const { owner: { login: owner }, name: repo } = repository;

github.getLabeledIssues({
labels: encodeURIComponent("Needs Info"),
owner: owner,
repo: repo
}).then(issues => {
issues.forEach(({ pull_request, number, updated_at }) => {
if (!pull_request && isInactive(updated_at)) {
log(`Adding comment to issue #${number}`, 'verbose');
github.addIssueComment(
number,
owner,
repo,
closingIssueMessage
).then(res => {
log(`Closing issue #${number}`, 'verbose')
return github.closeIssue({
id: number,
owner: owner,
repo: repo
});
}).catch(err => {
log(`Failed closing issue ${number}. Details: ${err.message}`);
});
}
})
});
}

0 comments on commit afda1cf

Please sign in to comment.