neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

close_unresponsive.js (1542B)


      1 function labeledEvent(data) {
      2  return data.event === "labeled" && data.label.name === "needs:response";
      3 }
      4 
      5 const numberOfDaysLimit = 30;
      6 const close_message = `This has been closed since a request for information has \
      7 not been answered for ${numberOfDaysLimit} days. It can be reopened when the \
      8 requested information is provided.`;
      9 
     10 module.exports = async ({ github, context }) => {
     11  const owner = context.repo.owner;
     12  const repo = context.repo.repo;
     13 
     14  const issues = await github.rest.issues.listForRepo({
     15    owner: owner,
     16    repo: repo,
     17    labels: "needs:response",
     18  });
     19  const numbers = issues.data.map((e) => e.number);
     20 
     21  for (const number of numbers) {
     22    const events = await github.paginate(
     23      github.rest.issues.listEventsForTimeline,
     24      {
     25        owner: owner,
     26        repo: repo,
     27        issue_number: number,
     28      },
     29      (response) => response.data.filter(labeledEvent),
     30    );
     31 
     32    const latest_response_label = events[events.length - 1];
     33 
     34    const created_at = new Date(latest_response_label.created_at);
     35    const now = new Date();
     36    const diff = now - created_at;
     37    const diffDays = diff / (1000 * 60 * 60 * 24);
     38 
     39    if (diffDays > numberOfDaysLimit) {
     40      github.rest.issues.update({
     41        owner: owner,
     42        repo: repo,
     43        issue_number: number,
     44        state_reason: "not_planned",
     45        state: "closed",
     46      });
     47 
     48      github.rest.issues.createComment({
     49        owner: owner,
     50        repo: repo,
     51        issue_number: number,
     52        body: close_message,
     53      });
     54    }
     55  }
     56 };