2023-04-27 13:07:44 -07:00
|
|
|
function labeledEvent(data) {
|
|
|
|
return data.event === "labeled" && data.label.name === "needs:response";
|
|
|
|
}
|
|
|
|
|
|
|
|
const numberOfDaysLimit = 30;
|
|
|
|
const close_message = `This has been closed since a request for information has \
|
|
|
|
not been answered for ${numberOfDaysLimit} days. It can be reopened when the \
|
|
|
|
requested information is provided.`;
|
|
|
|
|
|
|
|
module.exports = async ({ github, context }) => {
|
|
|
|
const owner = context.repo.owner;
|
|
|
|
const repo = context.repo.repo;
|
|
|
|
|
|
|
|
const issues = await github.rest.issues.listForRepo({
|
|
|
|
owner: owner,
|
|
|
|
repo: repo,
|
|
|
|
labels: "needs:response",
|
|
|
|
});
|
|
|
|
const numbers = issues.data.map((e) => e.number);
|
|
|
|
|
|
|
|
for (const number of numbers) {
|
2023-05-07 07:46:24 -07:00
|
|
|
const events = await github.paginate(
|
|
|
|
github.rest.issues.listEventsForTimeline,
|
|
|
|
{
|
|
|
|
owner: owner,
|
|
|
|
repo: repo,
|
|
|
|
issue_number: number,
|
|
|
|
},
|
|
|
|
(response) => response.data.filter(labeledEvent)
|
|
|
|
);
|
|
|
|
|
|
|
|
const latest_response_label = events[events.length - 1];
|
|
|
|
|
2023-04-27 13:07:44 -07:00
|
|
|
const created_at = new Date(latest_response_label.created_at);
|
|
|
|
const now = new Date();
|
|
|
|
const diff = now - created_at;
|
|
|
|
const diffDays = diff / (1000 * 60 * 60 * 24);
|
|
|
|
|
|
|
|
if (diffDays > numberOfDaysLimit) {
|
|
|
|
github.rest.issues.update({
|
|
|
|
owner: owner,
|
|
|
|
repo: repo,
|
|
|
|
issue_number: number,
|
2024-01-15 19:45:41 -07:00
|
|
|
state_reason: "not_planned",
|
2023-04-27 13:07:44 -07:00
|
|
|
state: "closed",
|
|
|
|
});
|
|
|
|
|
|
|
|
github.rest.issues.createComment({
|
|
|
|
owner: owner,
|
|
|
|
repo: repo,
|
|
|
|
issue_number: number,
|
|
|
|
body: close_message,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|