mirror of
https://github.com/nickrunning/wechat-selkies.git
synced 2026-05-09 00:24:09 +00:00
98 lines
4.3 KiB
YAML
98 lines
4.3 KiB
YAML
name: Close Invalid Issues
|
||
|
||
on:
|
||
schedule:
|
||
# 每天运行一次,清理无效issues
|
||
- cron: '0 2 * * *'
|
||
workflow_dispatch: # 允许手动触发
|
||
|
||
jobs:
|
||
close-invalid-issues:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: Close stale issues with needs-more-info label
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const { data: issues } = await github.rest.issues.listForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open',
|
||
labels: 'needs-more-info',
|
||
sort: 'updated',
|
||
direction: 'asc'
|
||
});
|
||
|
||
const now = new Date();
|
||
const staleThreshold = 7 * 24 * 60 * 60 * 1000; // 7天
|
||
|
||
for (const issue of issues) {
|
||
const updatedAt = new Date(issue.updated_at);
|
||
const daysSinceUpdate = Math.floor((now - updatedAt) / (24 * 60 * 60 * 1000));
|
||
|
||
if (now - updatedAt > staleThreshold) {
|
||
console.log(`Closing stale issue #${issue.number} (${daysSinceUpdate} days old)`);
|
||
|
||
await github.rest.issues.createComment({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
body: `🤖 **自动关闭通知**\n\n这个issue已经标记为需要更多信息超过7天,且没有收到回复。为了保持issue列表的整洁,现在自动关闭此issue。\n\n如果您仍然遇到问题,请:\n1. 提供我们之前请求的信息\n2. 重新开启此issue或创建新的issue\n\n我们随时欢迎您提供更多详细信息!`
|
||
});
|
||
|
||
await github.rest.issues.update({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
state: 'closed',
|
||
state_reason: 'not_planned'
|
||
});
|
||
|
||
await github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
labels: ['auto-closed']
|
||
});
|
||
}
|
||
}
|
||
|
||
- name: Add warning to old issues without labels
|
||
uses: actions/github-script@v6
|
||
with:
|
||
script: |
|
||
const { data: issues } = await github.rest.issues.listForRepo({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
state: 'open',
|
||
sort: 'created',
|
||
direction: 'asc'
|
||
});
|
||
|
||
const now = new Date();
|
||
const oldThreshold = 3 * 24 * 60 * 60 * 1000; // 3天
|
||
|
||
for (const issue of issues) {
|
||
const createdAt = new Date(issue.created_at);
|
||
const isOld = now - createdAt > oldThreshold;
|
||
const hasTriageLabel = issue.labels.some(label => label.name === 'triage');
|
||
const hasNeedsInfoLabel = issue.labels.some(label => label.name === 'needs-more-info');
|
||
|
||
if (isOld && hasTriageLabel && !hasNeedsInfoLabel) {
|
||
console.log(`Adding reminder to issue #${issue.number}`);
|
||
|
||
await github.rest.issues.createComment({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
body: `⏰ **提醒**\n\n这个issue已经开放3天了,但还没有被标记或分类。\n\n**维护者请注意:**\n- 请审查此issue并添加适当的标签\n- 如果需要更多信息,请添加 \`needs-more-info\` 标签\n- 如果是有效的bug或功能请求,请移除 \`triage\` 标签并添加适当的优先级标签\n\n**提交者请注意:**\n- 如果您有更多信息可以补充,请随时添加\n- 确保您已经提供了足够的详细信息来重现问题或理解功能需求`
|
||
});
|
||
|
||
await github.rest.issues.addLabels({
|
||
owner: context.repo.owner,
|
||
repo: context.repo.repo,
|
||
issue_number: issue.number,
|
||
labels: ['stale']
|
||
});
|
||
}
|
||
} |