--- name: AI Policy # yamllint disable-line rule:truthy on: issues: types: [opened] pull_request_target: types: [opened] concurrency: group: ${{ github.workflow }}-${{ github.event.issue.number || github.event.pull_request.number }} cancel-in-progress: true permissions: contents: read jobs: issue: name: Check issue if: >- github.event_name == 'issues' && github.event.sender.type != 'Bot' && contains(fromJSON('["NONE","FIRST_TIMER","FIRST_TIME_CONTRIBUTOR"]'), github.event.issue.author_association) runs-on: ubuntu-26.04 permissions: issues: write steps: - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: script: | const body = context.payload.issue.body || ''; const lines = body.split(/\r?\n/).map((l) => l.trim().replace('[X]', '[x]')); const ref = '[AI Policy]: https://github.com/searxng/searxng/blob/master/AI_POLICY.rst'; const box = '- [x] I read the [AI Policy] and hereby confirm that this issue' + ' conforms with the policy.'; if (lines.includes(ref) && lines.includes(box)) return; const n = context.payload.issue.number; const msg = 'This issue was closed because the AI Policy box has not been ticked.\n\n' + 'Please open a new issue with the checkbox ticked.'; await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, body: msg, }); await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, labels: ['invalid:slop'], }); await github.rest.issues.update({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, state: 'closed', state_reason: 'not_planned', }); pull_request: name: Check pull request if: >- github.event_name == 'pull_request_target' && github.event.sender.type != 'Bot' && contains(fromJSON('["NONE","FIRST_TIMER","FIRST_TIME_CONTRIBUTOR"]'), github.event.pull_request.author_association) runs-on: ubuntu-26.04 permissions: pull-requests: write steps: - uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 with: script: | const body = context.payload.pull_request.body || ''; const lines = body.split(/\r?\n/).map((l) => l.trim().replace('[X]', '[x]')); const ref = '[AI Policy]: https://github.com/searxng/searxng/blob/master/AI_POLICY.rst'; const box = '- [x] **I hereby confirm that this PR conforms with the [AI Policy].**'; if (lines.includes(ref) && lines.includes(box)) return; const n = context.payload.pull_request.number; const msg = 'This pull request was closed because the AI Policy box has not been' + ' ticked.\n\nPlease open a new pull request with the checkbox ticked.'; await github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, body: msg, }); await github.rest.issues.addLabels({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, labels: ['invalid:slop'], }); await github.rest.issues.update({ owner: context.repo.owner, repo: context.repo.repo, issue_number: n, state: 'closed', state_reason: 'not_planned', });