mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-06-30 02:52:05 +08:00
[fix] fix close-issue workflow env indentation, pagination, and activity time base
This commit is contained in:
@@ -4,6 +4,7 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
# run every day at midnight
|
# run every day at midnight
|
||||||
- cron: "0 0 * * *"
|
- cron: "0 0 * * *"
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
@@ -15,19 +16,21 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check inactive issues and close them
|
- name: Check inactive issues and close them
|
||||||
uses: actions/github-script@v6
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const { data: issues } = await github.rest.issues.listForRepo({
|
const inactivePeriod = 7 * 24 * 60 * 60 * 1000; // 7 days
|
||||||
|
const now = Date.now();
|
||||||
|
|
||||||
|
// paginate through all open issues (listForRepo also returns PRs)
|
||||||
|
const issues = await github.paginate(github.rest.issues.listForRepo, {
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
state: 'open',
|
state: 'open',
|
||||||
per_page: 100,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const now = new Date().getTime();
|
|
||||||
const inactivePeriod = 7 * 24 * 60 * 60 * 1000; // 7 days
|
|
||||||
|
|
||||||
for (const issue of issues) {
|
for (const issue of issues) {
|
||||||
// skip pull requests (they are also returned by listForRepo)
|
// skip pull requests (they are also returned by listForRepo)
|
||||||
if (issue.pull_request) continue;
|
if (issue.pull_request) continue;
|
||||||
@@ -38,26 +41,14 @@ jobs:
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch comments for this issue
|
// last activity time = the issue's own updated_at, which is
|
||||||
const { data: comments } = await github.rest.issues.listComments({
|
// refreshed on comments, labels, etc. This avoids relying on
|
||||||
owner: context.repo.owner,
|
// fetching comments and is accurate even when comments are edited.
|
||||||
repo: context.repo.repo,
|
const lastActivityTime = new Date(issue.updated_at).getTime();
|
||||||
issue_number: issue.number,
|
|
||||||
per_page: 100,
|
|
||||||
});
|
|
||||||
|
|
||||||
// determine the "last activity" time
|
|
||||||
let lastActivityTime;
|
|
||||||
if (comments.length > 0) {
|
|
||||||
const lastComment = comments[comments.length - 1];
|
|
||||||
lastActivityTime = new Date(lastComment.updated_at).getTime();
|
|
||||||
} else {
|
|
||||||
lastActivityTime = new Date(issue.created_at).getTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
// check inactivity
|
// check inactivity
|
||||||
if (now - lastActivityTime > inactivePeriod) {
|
if (now - lastActivityTime > inactivePeriod) {
|
||||||
console.log(`Closing inactive issue: #${issue.number} (No recent replies for 7 days)`);
|
console.log(`Closing inactive issue: #${issue.number} (No activity for 7 days)`);
|
||||||
|
|
||||||
await github.rest.issues.createComment({
|
await github.rest.issues.createComment({
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
@@ -76,5 +67,3 @@ jobs:
|
|||||||
console.log(`Skipping issue #${issue.number} (Active within 7 days).`);
|
console.log(`Skipping issue #${issue.number} (Active within 7 days).`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user