|
|
@@ -2,10 +2,11 @@ name: duplicate-issues
|
|
|
|
|
|
on:
|
|
|
issues:
|
|
|
- types: [opened]
|
|
|
+ types: [opened, edited]
|
|
|
|
|
|
jobs:
|
|
|
check-duplicates:
|
|
|
+ if: github.event.action == 'opened'
|
|
|
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
|
permissions:
|
|
|
contents: read
|
|
|
@@ -80,3 +81,124 @@ jobs:
|
|
|
issue_number: context.payload.issue.number,
|
|
|
labels: ["needs:compliance"],
|
|
|
})
|
|
|
+
|
|
|
+ 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 dependencies
|
|
|
+ run: bun install
|
|
|
+
|
|
|
+ - name: Install opencode
|
|
|
+ run: curl -fsSL https://opencode.ai/install | bash
|
|
|
+
|
|
|
+ - name: Build recheck prompt
|
|
|
+ uses: actions/github-script@v8
|
|
|
+ with:
|
|
|
+ script: |
|
|
|
+ const fs = require("fs")
|
|
|
+ const issue = context.payload.issue
|
|
|
+ const body = issue.body ?? ""
|
|
|
+ const text = [
|
|
|
+ "Recheck this edited issue for compliance:",
|
|
|
+ "",
|
|
|
+ "MODE: recheck-compliance",
|
|
|
+ `CURRENT_ISSUE_NUMBER: ${issue.number}`,
|
|
|
+ "",
|
|
|
+ `Title: ${issue.title}`,
|
|
|
+ "",
|
|
|
+ "Description:",
|
|
|
+ body,
|
|
|
+ ].join("\n")
|
|
|
+
|
|
|
+ fs.writeFileSync("issue_info.txt", text)
|
|
|
+
|
|
|
+ - name: Recheck compliance
|
|
|
+ env:
|
|
|
+ OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
|
|
|
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
|
+ run: |
|
|
|
+ bun script/duplicate-issue.ts -f issue_info.txt "Recheck compliance for this edited issue and return either No action required or a compliance comment body" > issue_comment.txt
|
|
|
+
|
|
|
+ - name: Update compliance state
|
|
|
+ env:
|
|
|
+ COMMENT: ${{ github.workspace }}/issue_comment.txt
|
|
|
+ uses: actions/github-script@v8
|
|
|
+ with:
|
|
|
+ script: |
|
|
|
+ const fs = require("fs")
|
|
|
+ const marker = "<!-- issue-compliance -->"
|
|
|
+ const comment = fs.readFileSync(process.env.COMMENT, "utf8").trim()
|
|
|
+ const issue_number = context.payload.issue.number
|
|
|
+
|
|
|
+ const { data: comments } = await github.rest.issues.listComments({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number,
|
|
|
+ per_page: 100,
|
|
|
+ })
|
|
|
+
|
|
|
+ const compliance = comments.filter((x) => (x.body ?? "").includes(marker))
|
|
|
+
|
|
|
+ if (comment === "No action required") {
|
|
|
+ try {
|
|
|
+ await github.rest.issues.removeLabel({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number,
|
|
|
+ name: "needs:compliance",
|
|
|
+ })
|
|
|
+ } catch {}
|
|
|
+
|
|
|
+ for (const entry of compliance) {
|
|
|
+ await github.rest.issues.deleteComment({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ comment_id: entry.id,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ await github.rest.issues.createComment({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number,
|
|
|
+ body: "Thanks for updating your issue. It now meets our contributing guidelines. :+1:",
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ await github.rest.issues.addLabels({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number,
|
|
|
+ labels: ["needs:compliance"],
|
|
|
+ })
|
|
|
+
|
|
|
+ const body = `_The following comment was made by an LLM, it may be inaccurate:_\n\n${comment}`
|
|
|
+ const existing = compliance.at(-1)
|
|
|
+ if (!existing) {
|
|
|
+ await github.rest.issues.createComment({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ issue_number,
|
|
|
+ body,
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ await github.rest.issues.updateComment({
|
|
|
+ owner: context.repo.owner,
|
|
|
+ repo: context.repo.repo,
|
|
|
+ comment_id: existing.id,
|
|
|
+ body,
|
|
|
+ })
|