diff options
author | dundargoc <33953936+dundargoc@users.noreply.github.com> | 2023-04-27 22:07:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-27 22:07:44 +0200 |
commit | c50cdd62706ed00a2bb9e1201ac8aac1b71e9a16 (patch) | |
tree | 4eaab8798a81c02f500ea8531136adb789d8ea75 | |
parent | 1cb60405548e79f1ec63921540e1c3ebb3ddcc01 (diff) | |
download | rneovim-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.js | 50 | ||||
-rw-r--r-- | .github/scripts/remove_response_label.js (renamed from .github/scripts/unstale.js) | 0 | ||||
-rw-r--r-- | .github/workflows/response.yml | 35 | ||||
-rw-r--r-- | .github/workflows/stale.yml | 42 |
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}) |