diff --git a/.github/workflows/close-stale-issues.yml b/.github/workflows/close-stale-issues.yml new file mode 100644 index 00000000..a1d4aef2 --- /dev/null +++ b/.github/workflows/close-stale-issues.yml @@ -0,0 +1,26 @@ +name: Close Stale Issues + +on: + schedule: + - cron: "0 */6 * * *" + +permissions: + issues: write + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - uses: aws-actions/stale-issue-cleanup@v6 + with: + response-requested-label: response-requested + days-before-stale: 7 + days-before-close: 5 + stale-issue-label: closing-soon + stale-issue-message: | + This issue has not received a response in 7 days. If no further activity occurs within the next 5 days, it will be automatically closed. + close-issue-message: | + Closing this issue due to inactivity. If you believe this is still relevant, please open a new issue with updated information. + minimum-upvotes-to-exempt: 5 + exempt-issue-labels: "bug,feature-request,p1" + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/closed-issue-message.yml b/.github/workflows/closed-issue-message.yml new file mode 100644 index 00000000..690db9c8 --- /dev/null +++ b/.github/workflows/closed-issue-message.yml @@ -0,0 +1,32 @@ +name: Closed Issue Message + +on: + issues: + types: [closed] + +permissions: + issues: write + +jobs: + post-message-and-lock: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const { owner, repo } = context.repo; + const number = context.issue.number; + + await github.rest.issues.createComment({ + owner, + repo, + issue_number: number, + body: '⚠️ This issue has been closed. If you have a similar problem, please [open a new issue](../../issues/new/choose) and include relevant details so we can investigate properly.\n\nComments on closed issues are hard for our team to track. A new issue ensures you get the attention you need.' + }); + + await github.rest.issues.lock({ + owner, + repo, + issue_number: number, + lock_reason: 'resolved' + }); diff --git a/.github/workflows/issue-labeler.yml b/.github/workflows/issue-labeler.yml new file mode 100644 index 00000000..9e5e9435 --- /dev/null +++ b/.github/workflows/issue-labeler.yml @@ -0,0 +1,41 @@ +name: Issue Labeler + +on: + issues: + types: [opened, edited] + +permissions: + issues: write + +jobs: + label-issue: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + const body = context.payload.issue.body || ''; + const action = context.payload.action; + const issueNumber = context.issue.number; + const { owner, repo } = context.repo; + + const labelsToAdd = []; + + if (action === 'opened') { + labelsToAdd.push('needs-triage'); + } + + const dropdownYes = /### Is this a regression\?\s*\n\s*Yes/i.test(body); + if (dropdownYes) { + labelsToAdd.push('regression', 'p1'); + } + + if (labelsToAdd.length > 0) { + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: labelsToAdd + }); + core.info(`Added labels to issue #${issueNumber}: ${labelsToAdd.join(', ')}`); + } diff --git a/.github/workflows/unlock-reopened-issue.yml b/.github/workflows/unlock-reopened-issue.yml new file mode 100644 index 00000000..619cf60c --- /dev/null +++ b/.github/workflows/unlock-reopened-issue.yml @@ -0,0 +1,21 @@ +name: Unlock Reopened Issues + +on: + issues: + types: [reopened] + +permissions: + issues: write + +jobs: + unlock: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@v7 + with: + script: | + await github.rest.issues.unlock({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number + });