mirror of
https://github.com/neovim/neovim.git
synced 2024-09-17 20:58:20 -04: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