name: GitHub - Autoclose Invalid PRs on: pull_request_target: branches: - 'main' paths: - '.gitignore' jobs: autoclose: runs-on: ubuntu-22.04 steps: - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | const files = await github.rest.pulls.listFiles({ owner: context.payload.repository.owner.login, repo: context.payload.repository.name, pull_number: context.payload.pull_request.number, }); if ( files.data.length !== 1 || files.data[0].filename !== ".gitignore" ) { return; } const creator = context.payload.sender.login; const opts = github.rest.issues.listForRepo.endpoint.merge({ ...context.issue, creator, state: 'all' }); const issues = await github.paginate(opts); // iterate through issues for (const issue of issues) { // if the issue is this one, keep looking if (issue.number === context.issue.number) { continue; } // if the issue is actually a PR, they're not a first timer if (issue.pull_request) { return // Creator is already a contributor. } } core.setFailed("Invalid PR detected."); github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: "Thank you for opening this pull request.\n\nThis is a standard message notifying you that we've reviewed your pull request and have decided not to merge it. We would welcome future pull requests from you.\n\nThank you and happy coding.", }); await github.rest.pulls.update({ owner: context.payload.repository.owner.login, repo: context.payload.repository.name, pull_number: context.payload.pull_request.number, state: "closed" }); await github.rest.issues.addLabels({ owner: context.payload.repository.owner.login, repo: context.payload.repository.name, issue_number: context.issue.number, labels: ["spam"] });