chore(ci): add label sync and PR triage workflows (#1575)

This commit is contained in:
Rin
2026-04-05 03:11:13 +08:00
committed by GitHub
parent 744503a10e
commit 2876817f6f
6 changed files with 1697 additions and 0 deletions
+178
View File
@@ -0,0 +1,178 @@
---
description: GitHub Agentic Workflows (gh-aw) - Create, debug, and upgrade AI-powered workflows with intelligent prompt routing
disable-model-invocation: true
---
# GitHub Agentic Workflows Agent
This agent helps you work with **GitHub Agentic Workflows (gh-aw)**, a CLI extension for creating AI-powered workflows in natural language using markdown files.
## What This Agent Does
This is a **dispatcher agent** that routes your request to the appropriate specialized prompt based on your task:
- **Creating new workflows**: Routes to `create` prompt
- **Updating existing workflows**: Routes to `update` prompt
- **Debugging workflows**: Routes to `debug` prompt
- **Upgrading workflows**: Routes to `upgrade-agentic-workflows` prompt
- **Creating report-generating workflows**: Routes to `report` prompt — consult this whenever the workflow posts status updates, audits, analyses, or any structured output as issues, discussions, or comments
- **Creating shared components**: Routes to `create-shared-agentic-workflow` prompt
- **Fixing Dependabot PRs**: Routes to `dependabot` prompt — use this when Dependabot opens PRs that modify generated manifest files (`.github/workflows/package.json`, `.github/workflows/requirements.txt`, `.github/workflows/go.mod`). Never merge those PRs directly; instead update the source `.md` files and rerun `gh aw compile --dependabot` to bundle all fixes
- **Analyzing test coverage**: Routes to `test-coverage` prompt — consult this whenever the workflow reads, analyzes, or reports on test coverage data from PRs or CI runs
Workflows may optionally include:
- **Project tracking / monitoring** (GitHub Projects updates, status reporting)
- **Orchestration / coordination** (one workflow assigning agents or dispatching and coordinating other workflows)
## Files This Applies To
- Workflow files: `.github/workflows/*.md` and `.github/workflows/**/*.md`
- Workflow lock files: `.github/workflows/*.lock.yml`
- Shared components: `.github/workflows/shared/*.md`
- Configuration: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/github-agentic-workflows.md
## Problems This Solves
- **Workflow Creation**: Design secure, validated agentic workflows with proper triggers, tools, and permissions
- **Workflow Debugging**: Analyze logs, identify missing tools, investigate failures, and fix configuration issues
- **Version Upgrades**: Migrate workflows to new gh-aw versions, apply codemods, fix breaking changes
- **Component Design**: Create reusable shared workflow components that wrap MCP servers
## How to Use
When you interact with this agent, it will:
1. **Understand your intent** - Determine what kind of task you're trying to accomplish
2. **Route to the right prompt** - Load the specialized prompt file for your task
3. **Execute the task** - Follow the detailed instructions in the loaded prompt
## Available Prompts
### Create New Workflow
**Load when**: User wants to create a new workflow from scratch, add automation, or design a workflow that doesn't exist yet
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/create-agentic-workflow.md
**Use cases**:
- "Create a workflow that triages issues"
- "I need a workflow to label pull requests"
- "Design a weekly research automation"
### Update Existing Workflow
**Load when**: User wants to modify, improve, or refactor an existing workflow
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/update-agentic-workflow.md
**Use cases**:
- "Add web-fetch tool to the issue-classifier workflow"
- "Update the PR reviewer to use discussions instead of issues"
- "Improve the prompt for the weekly-research workflow"
### Debug Workflow
**Load when**: User needs to investigate, audit, debug, or understand a workflow, troubleshoot issues, analyze logs, or fix errors
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/debug-agentic-workflow.md
**Use cases**:
- "Why is this workflow failing?"
- "Analyze the logs for workflow X"
- "Investigate missing tool calls in run #12345"
### Upgrade Agentic Workflows
**Load when**: User wants to upgrade workflows to a new gh-aw version or fix deprecations
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/upgrade-agentic-workflows.md
**Use cases**:
- "Upgrade all workflows to the latest version"
- "Fix deprecated fields in workflows"
- "Apply breaking changes from the new release"
### Create a Report-Generating Workflow
**Load when**: The workflow being created or updated produces reports — recurring status updates, audit summaries, analyses, or any structured output posted as a GitHub issue, discussion, or comment
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/report.md
**Use cases**:
- "Create a weekly CI health report"
- "Post a daily security audit to Discussions"
- "Add a status update comment to open PRs"
### Create Shared Agentic Workflow
**Load when**: User wants to create a reusable workflow component or wrap an MCP server
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/create-shared-agentic-workflow.md
**Use cases**:
- "Create a shared component for Notion integration"
- "Wrap the Slack MCP server as a reusable component"
- "Design a shared workflow for database queries"
### Fix Dependabot PRs
**Load when**: User needs to close or fix open Dependabot PRs that update dependencies in generated manifest files (`.github/workflows/package.json`, `.github/workflows/requirements.txt`, `.github/workflows/go.mod`)
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/dependabot.md
**Use cases**:
- "Fix the open Dependabot PRs for npm dependencies"
- "Bundle and close the Dependabot PRs for workflow dependencies"
- "Update @playwright/test to fix the Dependabot PR"
### Analyze Test Coverage
**Load when**: The workflow reads, analyzes, or reports test coverage — whether triggered by a PR, a schedule, or a slash command. Always consult this prompt before designing the coverage data strategy.
**Prompt file**: https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/test-coverage.md
**Use cases**:
- "Create a workflow that comments coverage on PRs"
- "Analyze coverage trends over time"
- "Add a coverage gate that blocks PRs below a threshold"
## Instructions
When a user interacts with you:
1. **Identify the task type** from the user's request
2. **Load the appropriate prompt** from the GitHub repository URLs listed above
3. **Follow the loaded prompt's instructions** exactly
4. **If uncertain**, ask clarifying questions to determine the right prompt
## Quick Reference
```bash
# Initialize repository for agentic workflows
gh aw init
# Generate the lock file for a workflow
gh aw compile [workflow-name]
# Debug workflow runs
gh aw logs [workflow-name]
gh aw audit <run-id>
# Upgrade workflows
gh aw fix --write
gh aw compile --validate
```
## Key Features of gh-aw
- **Natural Language Workflows**: Write workflows in markdown with YAML frontmatter
- **AI Engine Support**: Copilot, Claude, Codex, or custom engines
- **MCP Server Integration**: Connect to Model Context Protocol servers for tools
- **Safe Outputs**: Structured communication between AI and GitHub API
- **Strict Mode**: Security-first validation and sandboxing
- **Shared Components**: Reusable workflow building blocks
- **Repo Memory**: Persistent git-backed storage for agents
- **Sandboxed Execution**: All workflows run in the Agent Workflow Firewall (AWF) sandbox, enabling full `bash` and `edit` tools by default
## Important Notes
- Always reference the instructions file at https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/github-agentic-workflows.md for complete documentation
- Use the MCP tool `agentic-workflows` when running in GitHub Copilot Cloud
- Workflows must be compiled to `.lock.yml` files before running in GitHub Actions
- **Bash tools are enabled by default** - Don't restrict bash commands unnecessarily since workflows are sandboxed by the AWF
- Follow security best practices: minimal permissions, explicit network access, no template injection
- **Network configuration**: Use ecosystem identifiers (`node`, `python`, `go`, etc.) or explicit FQDNs in `network.allowed`. Bare shorthands like `npm` or `pypi` are **not** valid. See https://github.com/github/gh-aw/blob/v0.66.1/.github/aw/network.md for the full list of valid ecosystem identifiers and domain patterns.
- **Single-file output**: When creating a workflow, produce exactly **one** workflow `.md` file. Do not create separate documentation files (architecture docs, runbooks, usage guides, etc.). If documentation is needed, add a brief `## Usage` section inside the workflow file itself.
+150
View File
@@ -0,0 +1,150 @@
- name: 'apps/stage-pocket'
description: 'Mobile App: iOS / Android'
color: 'b8d5ff'
- name: 'apps/stage-tamagotchi'
description: 'Desktop App: Windows & macOS & Linux'
color: 'a1f7ef'
- name: 'apps/stage-web'
description: 'Web App: PWA & Browser'
color: 'abedff'
- name: 'bug'
description: "Something isn't working"
color: 'd73a4a'
- name: 'bug/providers'
description: "Some providers aren't working"
color: 'd73a4a'
- name: 'bug/renderer/pixi-live2d'
description: 'Bugs related to PIXI.js & Live2D renderer'
color: 'd73a4a'
- name: 'bug/renderer/three-vrm'
description: 'Bugs related to Three.js & VRM renderer'
color: 'd73a4a'
- name: 'codex'
description: ''
color: 'ededed'
- name: 'dependencies'
description: 'Pull requests that update a dependency file'
color: '0366d6'
- name: 'duplicate'
description: 'This issue or pull request already exists'
color: 'cfd3d7'
- name: 'env/os-all'
description: 'All operating systems (most of the time Windows & macOS & Linux)'
color: 'e2e1be'
- name: 'env/os-linux'
description: 'Linux (for GUI backend, this includes both X11 and Wayland)'
color: 'bee2cc'
- name: 'env/os-macos'
description: 'OSX! (Nope, macOS)'
color: 'cee2be'
- name: 'env/os-windows'
description: 'Everyone use Windows, ok Windows'
color: 'd8e2be'
- name: 'extension/channel-discord'
description: 'Official supported extensions, related to Discord channel'
color: '95ded9'
- name: 'feature'
description: 'Related to feature'
color: 'dbf2a8'
- name: 'feature-request/accepted'
description: 'Feature request that accepted'
color: 'aef2a8'
- name: 'feature-request/needs-more-info'
description: 'Feature request that needs more information, either user story, use case, or scenario description'
color: 'dbf2a8'
- name: 'feature-request/rejected'
description: 'Feature request that got rejected'
color: 'f2b3a8'
- name: 'good first issue'
description: 'Good for newcomers'
color: '7057ff'
- name: 'help wanted'
description: 'Extra attention is needed'
color: '008672'
- name: 'invalid'
description: "This doesn't seem right"
color: 'e4e669'
- name: 'pending triage'
description: 'Not yet confirmed.'
color: 'f9d0c4'
- name: 'pr-review/hold'
description: 'Pull Request that holds to prevent merging'
color: 'e0c5c2'
- name: 'pr-review/hold/needs-rebase'
description: 'Pull Request that needs rebase to either main branch or specific branch'
color: 'e0c2d9'
- name: 'pr-review/hold/unsure'
description: 'Pull Request that unsure about purpose, not sure if needed'
color: 'd4c2e0'
- name: 'pr-review/ok-to-deploy'
description: 'Pull Request that confirmed to be deploy to either Preview or Prod safe'
color: 'd8e0c2'
- name: 'pr-review/ok-to-merge'
description: 'Pull Request that looks good to maintainers, equivalent to LGTM'
color: 'c2e0c6'
- name: 'pr-review/way-too-large'
description: 'Pull Request that way too large, not easy to review, be careful when reviewing'
color: 'e0d0c2'
- name: 'pr-review/well-informed'
description: 'Pull Request that well described, with screenshots or tests, or explained well, easier to review'
color: 'c2e0e0'
- name: 'priority/general'
description: 'Issue, or Pull Request that could be included in current release'
color: 'ff75ba'
- name: 'priority/nice-to-have'
description: 'Issue, or Pull Request that nice to have but can be handled later'
color: 'ff75ba'
- name: 'priority/urgent'
description: 'Issue, or Pull Request that urgent to be fixed or processed'
color: 'ff75ba'
- name: 'question'
description: 'Further information is requested'
color: 'd876e3'
- name: 'scope/agent'
description: 'Scope related to how we harness agent, or build the agent workflow'
color: '4468eb'
- name: 'scope/audio-input'
description: 'Scope related to audio input (ASR, Whisper, STT, etc.)'
color: '4468eb'
- name: 'scope/audio-output'
description: 'Scope related to audio output (TTS, Voice cloning, etc.)'
color: '4468eb'
- name: 'scope/avatar'
description: 'Scope related how we work with the avatar to be rendered, controlled, or interacted'
color: '4468eb'
- name: 'scope/avatar/live2d'
description: 'Scope related to Live2D'
color: '4468eb'
- name: 'scope/avatar/vrm'
description: 'Scope related to VRM'
color: '4468eb'
- name: 'scope/documentation'
description: 'Improvements or additions to documentation'
color: '4468eb'
- name: 'scope/engineering'
description: 'Scope related to toolchain, workflow, workspace, and CI/CD, deploy, packaging, etc.'
color: '4468eb'
- name: 'scope/extension'
description: 'Scope related to extension api, or internally known as tentacle api, mod api, plugin api'
color: '4468eb'
- name: 'scope/game-playing-ai'
description: 'Scope related to game playing AI, or game AI, AI that interacts the game'
color: '4468eb'
- name: 'scope/i18n'
description: ''
color: '4468eb'
- name: 'scope/providers'
description: 'Scope related to providers we support'
color: '4468eb'
- name: 'scope/server-api'
description: 'Scope related to the server api we maintained, the public service of AIRI'
color: '4468eb'
- name: 'scope/ui'
description: 'Scope related to UI/UX, or interface improve, perf, and bugs'
color: '4468eb'
- name: 'security'
description: 'Security issue, Pull Request, or advisory related.'
color: 'fdf122'
- name: 'wontfix'
description: 'This will not be worked on'
color: 'ffffff'
+26
View File
@@ -0,0 +1,26 @@
name: 'Copilot Setup Steps'
# This workflow configures the environment for GitHub Copilot Agent with gh-aw MCP server
on:
workflow_dispatch:
push:
paths:
- .github/workflows/copilot-setup-steps.yml
jobs:
# The job MUST be called 'copilot-setup-steps' to be recognized by GitHub Copilot Agent
copilot-setup-steps:
runs-on: ubuntu-latest
# Set minimal permissions for setup steps
# Copilot Agent receives its own token with appropriate permissions
permissions:
contents: read
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Install gh-aw extension
uses: github/gh-aw-actions/setup-cli@73ae9ce231580f337133352d321d42b6bf54b6a9 # v0.66.1
with:
version: v0.66.1
File diff suppressed because it is too large Load Diff
+199
View File
@@ -0,0 +1,199 @@
---
on:
workflow_dispatch:
inputs:
pull_request_number:
description: "Pull request number to triage manually"
required: true
type: string
pull_request:
types: [opened, reopened, ready_for_review]
forks: ["*"]
permissions:
contents: read
issues: read
pull-requests: read
engine: copilot
tools:
github:
toolsets: [repos, issues, pull_requests, labels]
network: defaults
safe-outputs:
add-labels:
max: 12
target: ${{ github.event.pull_request.number || github.event.inputs.pull_request_number }}
allowed:
- bug
- feature
- pending triage
- apps/stage-pocket
- apps/stage-tamagotchi
- apps/stage-web
- env/os-all
- env/os-linux
- env/os-macos
- env/os-windows
- priority/general
- priority/nice-to-have
- priority/urgent
- scope/agent
- scope/audio-input
- scope/audio-output
- scope/avatar
- scope/avatar/live2d
- scope/avatar/vrm
- scope/documentation
- scope/engineering
- scope/extension
- scope/game-playing-ai
- scope/i18n
- scope/providers
- scope/server-api
- scope/ui
remove-labels:
max: 24
target: ${{ github.event.pull_request.number || github.event.inputs.pull_request_number }}
allowed:
- bug
- feature
- pending triage
- apps/stage-pocket
- apps/stage-tamagotchi
- apps/stage-web
- env/os-all
- env/os-linux
- env/os-macos
- env/os-windows
- priority/general
- priority/nice-to-have
- priority/urgent
- scope/agent
- scope/audio-input
- scope/audio-output
- scope/avatar
- scope/avatar/live2d
- scope/avatar/vrm
- scope/documentation
- scope/engineering
- scope/extension
- scope/game-playing-ai
- scope/i18n
- scope/providers
- scope/server-api
- scope/ui
---
# PR Triage
Classify the target pull request with content labels.
## Goal
Read the target pull request and keep only the relevant automatically-managed triage labels in sync.
The target pull request is:
- the triggering PR for `pull_request` events
- PR `#${{ github.event.inputs.pull_request_number }}` for `workflow_dispatch`
Managed labels:
- Type: `bug`, `feature`
- App surface: `apps/stage-pocket`, `apps/stage-tamagotchi`, `apps/stage-web`
- Environment: `env/os-all`, `env/os-linux`, `env/os-macos`, `env/os-windows`
- Scope: `scope/agent`, `scope/audio-input`, `scope/audio-output`, `scope/avatar`, `scope/avatar/live2d`, `scope/avatar/vrm`, `scope/documentation`, `scope/engineering`, `scope/extension`, `scope/game-playing-ai`, `scope/i18n`, `scope/providers`, `scope/server-api`, `scope/ui`
- Priority: `priority/general`, `priority/nice-to-have`, `priority/urgent`
- Fallback: `pending triage`
Never add or remove any label outside that managed set.
## Required inputs
Inspect, in order:
1. PR title
2. PR body
3. Linked issues explicitly referenced in the PR title or body
4. Changed files
5. Existing labels on the PR
Do not use web search. Do not use bash or edit tools. Do not post comments. Do not update the PR body or title. Do not request reviewers.
## Classification rules
### Confidence and fallback
- Only apply a managed label when the evidence is explicit from the PR text, linked issues, or changed file paths.
- If the PR is too vague, too short, intentionally a test, or the classification is meaningfully ambiguous, remove all currently-present managed labels and leave only `pending triage`.
- If you can classify it confidently, remove `pending triage`.
### Type labels
- Do not apply both `bug` and `feature`.
- For documentation-first PRs, do not apply `feature`.
### Documentation
- Apply `scope/documentation` when the PR is primarily documentation, manuals, tutorials, guides, README work, or mostly touches `docs/` and similar documentation files.
- Documentation PRs may still receive environment labels if the docs are explicitly platform-specific, but they should not receive `feature`.
### App labels
- Apply `apps/stage-web` when files under `apps/stage-web/` change, or the PR text explicitly says the change is for the web app or PWA/browser surface.
- Apply `apps/stage-tamagotchi` when files under `apps/stage-tamagotchi/` change, or the PR text explicitly says desktop/Electron/Windows/macOS/Linux app.
- Apply `apps/stage-pocket` when files under `apps/stage-pocket/` change, or the PR text explicitly says mobile/iOS/Android app.
- Multiple app labels are allowed when the evidence is explicit.
### Environment labels
- Apply `env/os-windows`, `env/os-macos`, or `env/os-linux` only when the PR text or linked issues explicitly call out that platform.
- Apply `env/os-all` only when the PR explicitly describes all major desktop platforms or a clearly cross-platform OS fix.
- Do not infer OS labels from maintainers' guesses alone.
- `env/os-all` should replace per-OS labels when the evidence is clearly all-platform.
### Scope labels
- Apply `scope/ui` for UI, UX, settings, layouts, views, components, visual behavior, or interaction flows.
- Apply `scope/providers` for provider integrations, provider configuration, model/provider selection, or supported provider behavior.
- Apply `scope/audio-input` for ASR, STT, microphone capture, VAD, hearing, transcription input pipelines.
- Apply `scope/audio-output` for TTS, voice output, speech synthesis, voice playback, or voice cloning.
- Apply `scope/avatar` for general avatar rendering/control/interaction.
- Apply `scope/avatar/live2d` when the work is specifically about Live2D.
- Apply `scope/avatar/vrm` when the work is specifically about VRM.
- Apply `scope/engineering` for CI, build, release, packaging, toolchain, workflow, infrastructure, repository automation.
- Apply `scope/extension` for extensions, plugins, mod APIs, tentacle APIs, or channel integrations.
- Apply `scope/agent` for agent workflow, orchestration, LLM runtime, prompt routing, agent behavior.
- Apply `scope/server-api` for the maintained server API or public server service behavior.
- Apply `scope/i18n` for translation keys, locale additions, localization-only or localization-heavy work.
- Apply `scope/game-playing-ai` when the change is specifically about game-playing agent behavior.
- Multiple scope labels are allowed when the evidence is explicit and non-conflicting.
- If a PR is clearly documentation-first, use `scope/documentation` instead of trying to classify it as another primary scope unless the non-documentation scope is also explicit and substantial.
### Priority labels
- Apply at most one priority label.
- Apply `priority/urgent` only when the PR or linked issue clearly says urgent, critical, blocker, severe regression, production breakage, or similarly high urgency.
- Apply `priority/general` when the PR or linked issue clearly says it should be in the current release or treated as normal release work.
- Apply `priority/nice-to-have` when the PR or linked issue clearly frames it as polish, optional, low urgency, or explicitly nice-to-have.
- If urgency is not explicit, do not apply any priority label.
## Label synchronization behavior
When you finish classification:
1. Compute the desired managed labels for this PR.
2. Compare them against the PR's existing managed labels only.
3. Remove managed labels that are no longer desired.
4. Add desired managed labels that are missing.
Important constraints:
- Never remove unmanaged labels.
- Never add more labels than the evidence supports.
- If confident classification is possible, do not leave `pending triage`.
- If confident classification is not possible, the only managed label that should remain is `pending triage`.
+26
View File
@@ -0,0 +1,26 @@
name: Sync Labels
on:
workflow_dispatch:
push:
branches: [main]
paths:
- .github/labels.yml
- .github/workflows/sync-labels.yml
permissions:
contents: read
issues: write
jobs:
sync-labels:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Sync repository labels
uses: micnncim/action-label-syncer@v1.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
manifest: .github/labels.yml