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') && !contains(fromJSON('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.issue.author_association || github.event.discussion.author_association) }}" >> "$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:d603f5618c1fc9f2b4d506ffed54ba6bcfec83d56b893b5fa8b3f899a402fa0a 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 } }'