| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- name: duplicate-issues
- on:
- issues:
- types: [opened, edited]
- jobs:
- check-duplicates:
- if: github.event.action == 'opened'
- runs-on: blacksmith-4vcpu-ubuntu-2404
- permissions:
- contents: read
- issues: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 1
- - uses: ./.github/actions/setup-bun
- - name: Install opencode
- run: curl -fsSL https://opencode.ai/install | bash
- - name: Check duplicates and compliance
- env:
- OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- OPENCODE_PERMISSION: |
- {
- "bash": {
- "*": "deny",
- "gh issue*": "allow"
- },
- "webfetch": "deny"
- }
- run: |
- opencode run -m opencode/claude-sonnet-4-6 "A new issue has been created:
- Issue number: ${{ github.event.issue.number }}
- Lookup this issue with gh issue view ${{ github.event.issue.number }}.
- You have TWO tasks. Perform both, then post a SINGLE comment (if needed).
- ---
- TASK 1: CONTRIBUTING GUIDELINES COMPLIANCE CHECK
- Check whether the issue follows our contributing guidelines and issue templates.
- This project has three issue templates that every issue MUST use one of:
- 1. Bug Report - requires a Description field with real content
- 2. Feature Request - requires a verification checkbox and description, title should start with [FEATURE]:
- 3. Question - requires the Question field with real content
- Additionally check:
- - No AI-generated walls of text (long, AI-generated descriptions are not acceptable)
- - The issue has real content, not just template placeholder text left unchanged
- - Bug reports should include some context about how to reproduce
- - Feature requests should explain the problem or need
- - We want to push for having the user provide system description & information
- Do NOT be nitpicky about optional fields. Only flag real problems like: no template used, required fields empty or placeholder text only, obviously AI-generated walls of text, or completely empty/nonsensical content.
- ---
- TASK 2: DUPLICATE CHECK
- Search through existing issues (excluding #${{ github.event.issue.number }}) to find potential duplicates.
- Consider:
- 1. Similar titles or descriptions
- 2. Same error messages or symptoms
- 3. Related functionality or components
- 4. Similar feature requests
- Additionally, if the issue mentions keybinds, keyboard shortcuts, or key bindings, note the pinned keybinds issue #4997.
- ---
- POSTING YOUR COMMENT:
- Based on your findings, post a SINGLE comment on issue #${{ github.event.issue.number }}. Build the comment as follows:
- If the issue is NOT compliant, start the comment with:
- <!-- issue-compliance -->
- Then explain what needs to be fixed and that they have 2 hours to edit the issue before it is automatically closed. Also add the label needs:compliance to the issue using: gh issue edit ${{ github.event.issue.number }} --add-label needs:compliance
- If duplicates were found, include a section about potential duplicates with links.
- If the issue mentions keybinds/keyboard shortcuts, include a note about #4997.
- If the issue IS compliant AND no duplicates were found AND no keybind reference, do NOT comment at all.
- Use this format for the comment:
- [If not compliant:]
- <!-- issue-compliance -->
- This issue doesn't fully meet our [contributing guidelines](../blob/dev/CONTRIBUTING.md).
- **What needs to be fixed:**
- - [specific reasons]
- Please edit this issue to address the above within **2 hours**, or it will be automatically closed.
- [If duplicates found, add:]
- ---
- This issue might be a duplicate of existing issues. Please check:
- - #[issue_number]: [brief description of similarity]
- [If keybind-related, add:]
- For keybind-related issues, please also check our pinned keybinds documentation: #4997
- [End with if not compliant:]
- If you believe this was flagged incorrectly, please let a maintainer know.
- Remember: post at most ONE comment combining all findings. If everything is fine, post nothing."
- recheck-compliance:
- if: github.event.action == 'edited' && contains(github.event.issue.labels.*.name, 'needs:compliance')
- runs-on: blacksmith-4vcpu-ubuntu-2404
- permissions:
- contents: read
- issues: write
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- with:
- fetch-depth: 1
- - uses: ./.github/actions/setup-bun
- - name: Install opencode
- run: curl -fsSL https://opencode.ai/install | bash
- - name: Recheck compliance
- env:
- OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- OPENCODE_PERMISSION: |
- {
- "bash": {
- "*": "deny",
- "gh issue*": "allow"
- },
- "webfetch": "deny"
- }
- run: |
- opencode run -m opencode/claude-sonnet-4-6 "Issue #${{ github.event.issue.number }} was previously flagged as non-compliant and has been edited.
- Lookup this issue with gh issue view ${{ github.event.issue.number }}.
- Re-check whether the issue now follows our contributing guidelines and issue templates.
- This project has three issue templates that every issue MUST use one of:
- 1. Bug Report - requires a Description field with real content
- 2. Feature Request - requires a verification checkbox and description, title should start with [FEATURE]:
- 3. Question - requires the Question field with real content
- Additionally check:
- - No AI-generated walls of text (long, AI-generated descriptions are not acceptable)
- - The issue has real content, not just template placeholder text left unchanged
- - Bug reports should include some context about how to reproduce
- - Feature requests should explain the problem or need
- - We want to push for having the user provide system description & information
- Do NOT be nitpicky about optional fields. Only flag real problems like: no template used, required fields empty or placeholder text only, obviously AI-generated walls of text, or completely empty/nonsensical content.
- If the issue is NOW compliant:
- 1. Remove the needs:compliance label: gh issue edit ${{ github.event.issue.number }} --remove-label needs:compliance
- 2. Find and delete the previous compliance comment (the one containing <!-- issue-compliance -->) using: gh api repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments --jq '.[] | select(.body | contains(\"<!-- issue-compliance -->\")) | .id' then delete it with: gh api -X DELETE repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments/{id}
- 3. Post a short comment thanking them for updating the issue.
- If the issue is STILL not compliant:
- Post a comment explaining what still needs to be fixed. Keep the needs:compliance label."
|