perf: optimize TreeSitterWalker cursor usage #127
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Issue Management | |
| permissions: | |
| issues: write | |
| pull-requests: write | |
| on: | |
| issues: | |
| types: [opened, closed, reopened] | |
| pull_request: | |
| types: [closed] | |
| jobs: | |
| manage-issue-status: | |
| runs-on: ubuntu-latest | |
| if: github.event.action == 'opened' && github.event_name == 'issues' | |
| steps: | |
| - name: Add triage status to new issues | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const issue = context.payload.issue; | |
| const labels = issue.labels.map(label => label.name); | |
| // Only add triage label if it doesn't already exist | |
| if (!labels.includes('status: triage')) { | |
| github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issue.number, | |
| labels: ['status: triage'] | |
| }); | |
| } | |
| manage-linked-issues: | |
| runs-on: ubuntu-latest | |
| if: github.event.action == 'closed' && github.event.pull_request.merged == true | |
| steps: | |
| - name: Close linked issues | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const pr = context.payload.pull_request; | |
| const body = pr.body || ''; | |
| // Look for "closes #123", "fixes #123", "resolves #123" patterns | |
| const issueRegex = /(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s+#(\d+)/gi; | |
| let match; | |
| while ((match = issueRegex.exec(body)) !== null) { | |
| const issueNumber = parseInt(match[1]); | |
| try { | |
| // Update issue status to done | |
| await github.rest.issues.addLabels({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issueNumber, | |
| labels: ['status: done'] | |
| }); | |
| // Remove other status labels | |
| const issue = await github.rest.issues.get({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issueNumber | |
| }); | |
| const statusLabelsToRemove = issue.data.labels | |
| .filter(label => label.name.startsWith('status:') && label.name !== 'status: done') | |
| .map(label => label.name); | |
| for (const labelName of statusLabelsToRemove) { | |
| await github.rest.issues.removeLabel({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| issue_number: issueNumber, | |
| name: labelName | |
| }); | |
| } | |
| } catch (error) { | |
| console.log(`Could not update issue #${issueNumber}: ${error.message}`); | |
| } | |
| } |