Issue Inactivity Reminder #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Issue Inactivity Reminder | |
on: | |
schedule: | |
- cron: "0 0 * * *" # Run at 00:00 every day | |
permissions: | |
issues: write # Need write permission to modify issue assignees | |
jobs: | |
reminder_job: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Send reminders for inactive issues | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const daysBeforeReminder = 14; | |
let page = 1; | |
const perPage = 100; | |
while (true) { | |
const { data: issues } = await github.rest.issues.listForRepo({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
state: 'open', | |
assignee: '*', // Filter assigned issues | |
per_page: perPage, | |
page: page, | |
}); | |
if (issues.length === 0) { | |
break; | |
} | |
const now = new Date(); | |
for (const issue of issues) { | |
if (issue.pull_request) continue; | |
const updatedAt = new Date(issue.updated_at); | |
const daysInactive = (now - updatedAt) / (1000 * 60 * 60 * 24); | |
const { data: timeline } = await github.rest.issues.listEventsForTimeline({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue.number, | |
}); | |
const hasLinkedPR = timeline.some(event => | |
event.event === 'connected' || // PR connected via keywords | |
event.event === 'referenced' && event.commit_id // Connected via commit | |
); | |
if (daysInactive >= daysBeforeReminder && !hasLinkedPR) { | |
const assigneesMentions = issue.assignees | |
.map(user => `@${user.login}`) | |
.join(' '); | |
await github.rest.issues.createComment({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
issue_number: issue.number, | |
body: `${assigneesMentions} 这个 issue 已经超过 14 天没有更新或关联 PR。如果您仍在处理这个 issue,请更新进度;如果您无法继续处理,请联系维护者重新分配。\n\nThis issue has been inactive for more than 14 days without any updates or linked PR. If you are still working on this issue, please provide a progress update. If you are unable to continue, please contact the maintainers for reassignment.`, | |
}); | |
} | |
} | |
page += 1; | |
} |