name: issue_lint

on:
  issues:
    types: [opened]

jobs:
  issue_lint:
    runs-on: ubuntu-22.04

    steps:
      - uses: actions/checkout@v3

      - uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const fs = require('fs').promises;
            
            const getTitles = (str) => (
              [...str.matchAll(/^## (.*)/gm)].map((m) => m[0])
            );
            
            const titles = getTitles(context.payload.issue.body);
            
            for (let file of await fs.readdir('.github/ISSUE_TEMPLATE')) {
              if (!file.endsWith('.md')) {
                continue;
              }
            
              const template = await fs.readFile(`.github/ISSUE_TEMPLATE/${file}`, 'utf-8');
              const templateTitles = getTitles(template);
            
              if (templateTitles.every((title) => titles.includes(title))) {
                process.exit(0);
              }
            }
            
            await github.rest.issues.createComment({
              owner: context.issue.owner,
              repo: context.issue.repo,
              issue_number: context.issue.number,
              body: '此issue由于不符合模板规范已经自动关闭，请重新按照模板规范确保包含模板中所有章节标题再提交\n',
            });
  
            await github.rest.issues.addLabels({
              owner: context.issue.owner,
              repo: context.issue.repo,
              issue_number: context.issue.number,
              labels: ['自动关闭']
            });
            
            await github.rest.issues.update({
              owner: context.issue.owner,
              repo: context.issue.repo,
              issue_number: context.issue.number,
              state: 'closed',
            });