ci: add issue / pr labeler

Andrey Nering created

Change summary

.github/labeler.yml           | 47 +++++++++++++++++++++++++++++++++++++
.github/workflows/labeler.yml | 30 +++++++++++++++++++++++
2 files changed, 77 insertions(+)

Detailed changes

.github/labeler.yml 🔗

@@ -0,0 +1,47 @@
+# NOTE(@andreynering): We should have a single entry per label, because if we
+# have multiple the action would only apply the label if ALL of them match.
+
+"area: ci":
+  - "/^ci: /i"
+"area: docs":
+  - "/(docs|documentation|readme)/i"
+"area: lsp":
+  - "/lsp/i"
+"area: mcp":
+  - "/mcp/i"
+"area: permissions":
+  - "/permission/i"
+"area: tools":
+  - "/tool/i"
+"os: android":
+  - "/(android|termux)/i"
+"os: linux":
+  - "/(linux|fedora|debian|ubuntu)/i"
+"os: macos":
+  - "/(macos|osx|darwin)/i"
+"os: windows":
+  - "/(windows|win10|win11|win32|wsl|scoop|winget)/i"
+"panic / crash":
+  - "/(panic|crash|segfault)/i"
+"provider: anthropic claude":
+  - "/(anthropic|claude)/i"
+"provider: aws bedrock":
+  - "/(aws|bedrock)/i"
+"provider: google gemini":
+  - "/gemini/i"
+"provider: google vertex":
+  - "/vertex/i"
+"provider: kimi":
+  - "/kimi/i"
+"provider: ollama":
+  - "/llama/i"
+"provider: openai chatgpt":
+  - "/(openai|gpt)/i"
+"provider: openrouter":
+  - "/openrouter/i"
+"provider: qwen":
+  - "/qwen/i"
+"provider: xai grok":
+  - "/(xai|x\\.ai|grok)/i"
+"security":
+  - "/(security|vulnerability|exploit)/i"

.github/workflows/labeler.yml 🔗

@@ -0,0 +1,30 @@
+name: labeler
+
+on:
+  issues:
+    types: [opened]
+  pull_request_target:
+    types: [opened]
+  workflow_dispatch:
+    inputs:
+      issue-number:
+        description: "Issue/PR #"
+        required: true
+        type: string
+
+permissions:
+  issues: write
+  contents: read
+
+jobs:
+  triage:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: github/issue-labeler@v3.4
+        with:
+          configuration-path: .github/labeler.yml
+          enable-versioned-regex: 0
+          include-title: 1
+          include-body: 0
+          repo-token: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
+          issue-number: ${{ github.event.inputs.issue-number || github.event.issue.number || github.event.pull_request.number }}