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: ghcr.io/immich-app/mdq:main@sha256:1669c75a5542333ff6b03c13d5fd259ea8d798188b84d5d99093d62e4542eb05 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 } }'