mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
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.
This commit is contained in:
parent
1cb6040554
commit
c50cdd6270
50
.github/scripts/close_unresponsive.js
vendored
Normal file
50
.github/scripts/close_unresponsive.js
vendored
Normal file
@ -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,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
35
.github/workflows/response.yml
vendored
Normal file
35
.github/workflows/response.yml
vendored
Normal file
@ -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})
|
42
.github/workflows/stale.yml
vendored
42
.github/workflows/stale.yml
vendored
@ -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})
|
|
Loading…
Reference in New Issue
Block a user