This repository contains shared GitHub Actions workflows and scripts used across the Nuxt organization.
AI-powered issue triage using GitHub Models. These workflows automatically:
- Categorize issues (bug, enhancement, documentation, spam)
- Add appropriate labels
- Translate non-English issues
- Check for reproduction information
- Reopen issues when new evidence is provided
| Workflow | Trigger | Description |
|---|---|---|
triage-opened.yml | issues: [opened] | Triage newly opened issues |
triage-comment.yml | issue_comment: [created] | Analyze comments for reproductions |
triage-edited.yml | issues: [edited] | Check edited issues for reproductions |
triage-spam-transfer.yml | issues: [labeled] | Transfer spam-labeled issues |
Create workflow files in your repository's .github/workflows/ directory:
name: triageon:
issues:
types: [opened]concurrency:
group: issue-triage-${{ github.event.issue.number }}cancel-in-progress: truejobs:
triage:
uses: nuxt/.github/.github/workflows/triage-opened.yml@mainwith:
enable-translation: trueenable-body-translation: truespam-repo-id: ${{ vars.TRIAGE_SPAM_REPO_ID }}project-name: 'Your Project Name'permissions:
contents: readissues: writemodels: readname: triageon:
issue_comment:
types: [created]concurrency:
group: llm-triage-comment-${{ github.event.issue.number }}cancel-in-progress: falsejobs:
triage:
uses: nuxt/.github/.github/workflows/triage-comment.yml@mainpermissions:
contents: readissues: writemodels: readname: triageon:
issues:
types: [edited]concurrency:
group: llm-triage-edit-${{ github.event.issue.number }}cancel-in-progress: falsejobs:
triage:
uses: nuxt/.github/.github/workflows/triage-edited.yml@mainpermissions:
contents: readissues: writemodels: readname: triageon:
issues:
types: [labeled]jobs:
transfer-spam:
if: | github.event.label.name == 'spam' && vars.TRIAGE_SPAM_REPO_ID != ''uses: nuxt/.github/.github/workflows/triage-spam-transfer.yml@mainwith:
spam-repo-id: ${{ vars.TRIAGE_SPAM_REPO_ID }}permissions:
contents: readissues: writeSet these in your repository's Settings > Secrets and variables > Actions > Variables:
| Variable | Required | Default | Description |
|---|---|---|---|
TRIAGE_SPAM_REPO_ID | No | - | Node ID of spam repository for issue transfers |
| Input | Type | Default | Description |
|---|---|---|---|
enable-translation | boolean | true | Translate non-English issue titles |
enable-body-translation | boolean | true | Also translate issue body |
spam-repo-id | string | '' | Node ID for spam transfer target |
scripts-ref | string | 'main' | Git ref for scripts |
add-pending-label | boolean | true | Add 'pending triage' to new issues |
project-name | string | 'Nuxt.js framework' | Project name for AI context |
| Input | Type | Default | Description |
|---|---|---|---|
scripts-ref | string | 'main' | Git ref for scripts |
| Input | Type | Required | Description |
|---|---|---|---|
spam-repo-id | string | Yes | Node ID of spam repository |
All triage workflows require:
permissions:
contents: read # To checkout shared scriptsissues: write # To add labels, update issuesmodels: read # To use GitHub Models AIThe workflows use these labels (create them in your repository):
| Label | Description |
|---|---|
pending triage | Issue awaiting review |
needs reproduction | Bug report missing reproduction |
possible regression | May be a regression from upgrade |
nitro | Related to deployment/Nitro |
spam | Spam content |
duplicate | Duplicate issue |
- Adds
pending triagelabel to new issues without labels - Uses AI to categorize the issue
- For bugs without reproduction, adds
needs reproductionlabel - For possible regressions, adds
possible regressionlabel - Translates non-English issues (optional)
- Transfers spam to dedicated repository (optional)
- Checks if comment provides reproduction for
needs reproductionissues - For closed issues, analyzes if new evidence warrants reopening
- Removes
needs reproductionwhen valid reproduction is provided - Reopens issues when regression or new evidence is found
- Only runs on issues with
needs reproductionlabel - Checks if edited content now includes reproduction
- Removes label and reopens issue if applicable
- Triggers when
spamlabel is added - Transfers issue to dedicated spam repository
- Keeps main repository clean
To find a repository's Node ID for spam transfers:
gh api graphql -f query=' query { repository(owner: "nuxt", name: "spam") { id } }'For production use, pin to a specific commit or tag:
uses: nuxt/.github/.github/workflows/triage-opened.yml@v1.0.0# oruses: nuxt/.github/.github/workflows/triage-opened.yml@abc1234