on: issues: types: [opened] discussion: types: [created] name: Close likely duplicates permissions: {} jobs: should_run: runs-on: ubuntu-latest outputs: should_run: ${{ steps.should_run.outputs.run }} steps: - id: should_run run: echo "run=${{ github.event_name == 'issues' || github.event.discussion.category.name == 'Feature Request' }}" >> $GITHUB_OUTPUT get_body: runs-on: ubuntu-latest needs: should_run if: ${{ needs.should_run.outputs.should_run == 'true' }} env: EVENT: ${{ toJSON(github.event) }} outputs: body: ${{ steps.get_body.outputs.body }} steps: - id: get_body run: | BODY=$(echo """$EVENT""" | jq -r '.issue // .discussion | .body' | base64 -w 0) echo "body=$BODY" >> $GITHUB_OUTPUT get_checkbox_json: runs-on: ubuntu-latest needs: [get_body, should_run] if: ${{ needs.should_run.outputs.should_run == 'true' }} container: image: yshavit/mdq:0.9.0@sha256:4399483ca857fb1a7ed28a596f754c7373e358647de31ce14b79a27c91e1e35e outputs: checked: ${{ steps.get_checkbox.outputs.checked }} steps: - id: get_checkbox env: BODY: ${{ needs.get_body.outputs.body }} run: | CHECKED=$(echo "$BODY" | base64 -d | /mdq --output json '# I have searched | - [?] Yes' | jq '.items[0].list[0].checked // false') echo "checked=$CHECKED" >> $GITHUB_OUTPUT close_and_comment: runs-on: ubuntu-latest needs: [get_checkbox_json, should_run] if: ${{ needs.should_run.outputs.should_run == 'true' && needs.get_checkbox_json.outputs.checked != 'true' }} permissions: issues: write discussions: write steps: - name: Close issue if: ${{ github.event_name == 'issues' }} env: GH_TOKEN: ${{ github.token }} NODE_ID: ${{ github.event.issue.node_id }} run: | gh api graphql \ -f issueId="$NODE_ID" \ -f body="This issue has automatically been closed as it is likely a duplicate. We get a lot of duplicate threads each day, which is why we ask you in the template to confirm that you searched for duplicates before opening one. If you're sure this is not a duplicate, please leave a comment and we will reopen the thread if necessary." \ -f query=' mutation CommentAndCloseIssue($issueId: ID!, $body: String!) { addComment(input: { subjectId: $issueId, body: $body }) { __typename } closeIssue(input: { issueId: $issueId, stateReason: DUPLICATE }) { __typename } }' - name: Close discussion if: ${{ github.event_name == 'discussion' && github.event.discussion.category.name == 'Feature Request' }} env: GH_TOKEN: ${{ github.token }} NODE_ID: ${{ github.event.discussion.node_id }} run: | gh api graphql \ -f discussionId="$NODE_ID" \ -f body="This discussion has automatically been closed as it is likely a duplicate. We get a lot of duplicate threads each day, which is why we ask you in the template to confirm that you searched for duplicates before opening one. If you're sure this is not a duplicate, please leave a comment and we will reopen the thread if necessary." \ -f query=' mutation CommentAndCloseDiscussion($discussionId: ID!, $body: String!) { addDiscussionComment(input: { discussionId: $discussionId, body: $body }) { __typename } closeDiscussion(input: { discussionId: $discussionId, reason: DUPLICATE }) { __typename } }'