aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordundargoc <33953936+dundargoc@users.noreply.github.com>2023-04-27 22:07:44 +0200
committerGitHub <noreply@github.com>2023-04-27 22:07:44 +0200
commitc50cdd62706ed00a2bb9e1201ac8aac1b71e9a16 (patch)
tree4eaab8798a81c02f500ea8531136adb789d8ea75
parent1cb60405548e79f1ec63921540e1c3ebb3ddcc01 (diff)
downloadrneovim-c50cdd62706ed00a2bb9e1201ac8aac1b71e9a16.tar.gz
rneovim-c50cdd62706ed00a2bb9e1201ac8aac1b71e9a16.tar.bz2
rneovim-c50cdd62706ed00a2bb9e1201ac8aac1b71e9a16.zip
ci: replace stale bot with custom implementation
The stale action has a bug where it won't close an issue/PR if it has comments after the stale label.
-rw-r--r--.github/scripts/close_unresponsive.js50
-rw-r--r--.github/scripts/remove_response_label.js (renamed from .github/scripts/unstale.js)0
-rw-r--r--.github/workflows/response.yml35
-rw-r--r--.github/workflows/stale.yml42
4 files changed, 85 insertions, 42 deletions
diff --git a/.github/scripts/close_unresponsive.js b/.github/scripts/close_unresponsive.js
new file mode 100644
index 0000000000..b7a92207ba
--- /dev/null
+++ b/.github/scripts/close_unresponsive.js
@@ -0,0 +1,50 @@
+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) {
+ const timeline = await github.rest.issues.listEventsForTimeline({
+ owner: owner,
+ repo: repo,
+ issue_number: number,
+ });
+ const data = timeline.data.filter(labeledEvent);
+ const latest_response_label = data[data.length - 1];
+ 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,
+ state: "closed",
+ });
+
+ github.rest.issues.createComment({
+ owner: owner,
+ repo: repo,
+ issue_number: number,
+ body: close_message,
+ });
+ }
+ }
+};
diff --git a/.github/scripts/unstale.js b/.github/scripts/remove_response_label.js
index f645fca5cb..f645fca5cb 100644
--- a/.github/scripts/unstale.js
+++ b/.github/scripts/remove_response_label.js
diff --git a/.github/workflows/response.yml b/.github/workflows/response.yml
new file mode 100644
index 0000000000..c0db77645f
--- /dev/null
+++ b/.github/workflows/response.yml
@@ -0,0 +1,35 @@
+name: no_response
+on:
+ schedule:
+ - cron: '30 1 * * *' # Run every day at 01:30
+ workflow_dispatch:
+ issue_comment:
+
+jobs:
+ close:
+ if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/github-script@v6
+ with:
+ script: |
+ const script = require('./.github/scripts/close_unresponsive.js')
+ await script({github, context})
+
+ remove_label:
+ if: github.event_name == 'issue_comment'
+ runs-on: ubuntu-latest
+ permissions:
+ issues: write
+ pull-requests: write
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/github-script@v6
+ with:
+ script: |
+ const script = require('./.github/scripts/remove_response_label.js')
+ await script({github, context})
diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml
deleted file mode 100644
index 74661e686e..0000000000
--- a/.github/workflows/stale.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: 'Close stale issues and PRs'
-on:
- schedule:
- - cron: '30 1 * * *' # Run every day at 01:30
- workflow_dispatch:
- issue_comment:
-
-jobs:
- close:
- if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
- runs-on: ubuntu-latest
- permissions:
- issues: write
- pull-requests: write
- steps:
- - uses: actions/stale@v8
- with:
- days-before-close: 30
- days-before-stale: -1
- stale-issue-label: needs:response
- stale-pr-label: needs:response
- remove-stale-when-updated: false
- close-issue-message: "This issue has been closed since a request for
- information has not been answered for 30 days. It can be reopened
- when the requested information is provided."
- close-pr-message: "This PR has been closed since a request for
- changes has not been answered for 30 days. It can be reopened when
- the requested changes are provided."
-
- remove-label:
- if: github.event_name == 'issue_comment'
- runs-on: ubuntu-latest
- permissions:
- issues: write
- pull-requests: write
- steps:
- - uses: actions/checkout@v3
- - uses: actions/github-script@v6
- with:
- script: |
- const script = require('./.github/scripts/unstale.js')
- await script({github, context})