feat: create issue-management.yml (#4822)

This commit is contained in:
自由的世界人 2025-04-15 04:03:01 +08:00 committed by GitHub
parent 5fbff8c1fe
commit 8ac4d07d6b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

76
.github/workflows/issue-management.yml vendored Normal file
View File

@ -0,0 +1,76 @@
name: Stale Issue Management
on:
schedule:
- cron: '0 0 */3 * *'
workflow_dispatch:
jobs:
process-stale-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- name: Process stale issues
uses: actions/github-script@v6
with:
script: |
const { Octokit } = require('@octokit/rest')
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN })
const EXEMPTION_LABEL = 'pending'
const STALE_LABEL = 'inactive'
const DAYS_TO_STALE = 30
const DAYS_TO_CLOSE = 60
const issues = await octokit.paginate(octokit.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
})
const now = new Date()
for (const issue of issues) {
if (issue.pull_request || issue.labels.some(l => l.name === EXEMPTION_LABEL)) {
continue
}
const lastUpdated = new Date(issue.updated_at)
const daysInactive = Math.floor((now - lastUpdated) / (1000 * 3600 * 24))
if (daysInactive > DAYS_TO_CLOSE) {
await octokit.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⏰ 该 issue 因 ${DAYS_TO_CLOSE} 天无更新已自动关闭,如需跟进可重新打开`
})
await octokit.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
state: 'closed'
})
continue
}
if (daysInactive > DAYS_TO_STALE) {
if (!issue.labels.some(l => l.name === STALE_LABEL)) {
await octokit.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
labels: [STALE_LABEL]
})
await octokit.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: `⚠️ 该 issue 已 ${DAYS_TO_STALE} 天无更新,将保持跟踪。如果 ${DAYS_TO_CLOSE - DAYS_TO_STALE} 天内无更新会被自动关闭`
})
}
}
}