name: Auto-close untriaged issues

on:
  issues:
    types: [opened, reopened]

permissions:
  issues: write

jobs:
  auto-close:
    runs-on: ubuntu-latest
    steps:
      - name: Close issues from non-allowed authors
        uses: actions/github-script@v7
        with:
          script: |
            // Users allowed to open issues directly. All other authors will have
            // their issues auto-closed. Add GitHub usernames (lowercase) here to
            // grant additional contributors permission to open issues.
            const allowedAuthors = [
              'mdecimus',
            ];

            const issue = context.payload.issue;
            const author = (issue.user && issue.user.login) || '';

            if (allowedAuthors.includes(author.toLowerCase())) {
              core.info(`Issue #${issue.number} opened by allowed author '${author}'. Skipping.`);
              return;
            }

            const comment = [
              `Hi @${author}, thanks for taking the time to file this report.`,
              ``,
              `This issue is being **automatically closed** because all bug reports must first be triaged at our support portal: **[support.stalw.art](https://support.stalw.art)**. Please re-post this report there so that a maintainer can review it; once confirmed as a bug, an Issue will be created on your behalf.`,
              ``,
              `You can sign in to support.stalw.art with your existing GitHub account, so no separate registration is required.`,
              ``,
              `Thank you for understanding.`,
            ].join('\n');

            await github.rest.issues.createComment({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: issue.number,
              body: comment,
            });

            await github.rest.issues.update({
              owner: context.repo.owner,
              repo: context.repo.repo,
              issue_number: issue.number,
              state: 'closed',
              state_reason: 'not_planned',
            });

            try {
              await github.rest.issues.lock({
                owner: context.repo.owner,
                repo: context.repo.repo,
                issue_number: issue.number,
                lock_reason: 'off-topic',
              });
            } catch (err) {
              core.warning(`Could not lock issue #${issue.number}: ${err.message}`);
            }
