aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.github/workflows/issue-checkbox-checker.yml
blob: ce7e011d0b3d1b9f992ca4d9a29ba3c07bad6835 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
name: Issue Checkbox Checker

on:
  issues:
    types: [opened, edited]

permissions:
  issues: write

jobs:
  check-checkboxes:
    runs-on: ubuntu-latest
    steps:
      - name: Check for unchecked prerequisites
        uses: actions/github-script@v7
        with:
          script: |
            const issue = context.payload.issue;
            if (!issue) return;
            
            const body = issue.body || '';
            
            // Check if "I have not read carefully" checkbox is checked
            const notReadPatterns = [
              /- \[[xX]\] I have not read carefully/,
              /- \[[xX]\] 我未仔细阅读/
            ];
            
            const hasNotReadChecked = notReadPatterns.some(pattern => pattern.test(body));
            
            if (hasNotReadChecked) {
              const closeMessage = [
                '## Issue Automatically Closed / Issue 已自动关闭',
                '',
                '**English:**',
                'This issue has been automatically closed because you checked "I have not read carefully."',
                '',
                'Please:',
                '1. Read the [README](https://github.com/' + context.repo.owner + '/' + context.repo.repo + '/blob/main/README.md) and documentation carefully',
                '2. Search for existing issues',
                '3. Fill out the issue template completely',
                '4. Submit a new issue when ready',
                '',
                '**中文:**',
                '此 Issue 已被自动关闭,因为您勾选了"我未仔细阅读"。',
                '',
                '请:',
                '1. 仔细阅读 [README](https://github.com/' + context.repo.owner + '/' + context.repo.repo + '/blob/main/README.md) 和文档',
                '2. 搜索现有 Issue',
                '3. 完整填写 Issue 模板',
                '4. 准备好后提交新的 Issue',
                '',
                '---',
                '*This is an automated action. If you believe this was done in error, please contact the maintainers.*'
              ].join('\n');
              
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                body: closeMessage
              });
              
              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: ['invalid', 'auto-closed']
              });
              
              return;
            }
            
            // Count total checkboxes and checked boxes
            const totalBoxes = (body.match(/- \[[ xX]\]/g) || []).length;
            const checkedBoxes = (body.match(/- \[[xX]\]/g) || []).length;
            
            // If no boxes are checked in prerequisites, add a reminder
            if (totalBoxes > 0 && checkedBoxes === 0) {
              const reminderMessage = [
                '## Reminder / 提醒',
                '',
                '**English:**',
                'Please check the prerequisite boxes in the issue template to confirm you have completed the required steps.',
                '',
                '**中文:**',
                '请勾选 Issue 模板中的前置条件复选框,以确认您已完成必要步骤。'
              ].join('\n');
              
              await github.rest.issues.createComment({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                body: reminderMessage
              });
            }