mirror of
https://github.com/PrefectHQ/fastmcp.git
synced 2026-08-22 13:34:17 +02:00
143 lines
6.7 KiB
YAML
143 lines
6.7 KiB
YAML
name: Marvin Label Triage
|
|
# Automatically triage GitHub issues and PRs using Marvin
|
|
|
|
on:
|
|
issues:
|
|
types: [opened]
|
|
pull_request_target:
|
|
types: [opened]
|
|
workflow_dispatch:
|
|
inputs:
|
|
issue_number:
|
|
description: "Issue or PR number to triage"
|
|
required: true
|
|
type: string
|
|
|
|
concurrency:
|
|
group: triage-${{ github.event.issue.number || github.event.pull_request.number || inputs.issue_number }}
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
label-issue-or-pr:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
permissions:
|
|
contents: read
|
|
issues: write
|
|
pull-requests: write
|
|
|
|
steps:
|
|
- name: Checkout base repository
|
|
uses: actions/checkout@v5
|
|
with:
|
|
repository: ${{ github.repository }}
|
|
ref: ${{ github.event.repository.default_branch }}
|
|
|
|
- name: Generate Marvin App token
|
|
id: marvin-token
|
|
uses: actions/create-github-app-token@v2
|
|
with:
|
|
app-id: ${{ secrets.MARVIN_APP_ID }}
|
|
private-key: ${{ secrets.MARVIN_APP_PRIVATE_KEY }}
|
|
|
|
- name: Set triage prompt
|
|
id: triage-prompt
|
|
run: |
|
|
cat >> $GITHUB_OUTPUT << 'EOF'
|
|
PROMPT<<PROMPT_END
|
|
You're an issue triage assistant for FastMCP, a Python framework for building Model Context Protocol servers and clients. Your task is to analyze issues/PRs and apply appropriate labels.
|
|
|
|
IMPORTANT: Your ONLY action should be to apply labels using mcp__github__update_issue. DO NOT post any comments.
|
|
|
|
Issue/PR Information:
|
|
- REPO: ${{ github.repository }}
|
|
- NUMBER: ${{ github.event.issue.number || github.event.pull_request.number || inputs.issue_number }}
|
|
- TYPE: ${{ github.event.issue && 'issue' || (github.event.pull_request && 'pull_request') || 'unknown' }}
|
|
|
|
TRIAGE PROCESS:
|
|
|
|
1. Get available labels:
|
|
Run: `gh label list`
|
|
|
|
2. Retrieve issue/PR details using GitHub tools:
|
|
- mcp__github__get_issue: Get the issue/PR details
|
|
- mcp__github__get_issue_comments: Read any discussion
|
|
- If the issue/PR mentions other issues (e.g., "fixes #123", "related to #456"), use mcp__github__get_issue to read those linked issues for additional context
|
|
|
|
3. Analyze and apply labels based on these guidelines:
|
|
|
|
CORE CATEGORIES (apply EXACTLY ONE - these are mutually exclusive):
|
|
- bug: Reports of broken functionality OR PRs that fix bugs
|
|
- enhancement: New functions/endpoints, improvements to existing features, internal tooling, workflow improvements, minor new capabilities
|
|
- feature: ONLY for major headline functionality worthy of a blog post announcement (2-4 per release, never for issues)
|
|
- documentation: Primary change is to user-facing docs, examples, or guides
|
|
|
|
SPECIAL DOCUMENTATION RULES:
|
|
- DO NOT apply "documentation" label if PR only updates auto-generated SDK docs (docs/python-sdk/**)
|
|
- DO apply "documentation" label for significant user-facing documentation changes (guides, examples, API docs)
|
|
- Auto-generated docs updates should get appropriate category label (enhancement, bug, etc.) based on the underlying code changes
|
|
|
|
FEATURE vs ENHANCEMENT guidance:
|
|
- feature: Major systems like new auth systems, MCP composition, proxying MCP servers, major CLI commands that transform workflows
|
|
- enhancement: New functions/endpoints, internal workflows, CI improvements, developer tooling, refactoring, utilities, typical new CLI commands
|
|
- If unsure between feature/enhancement, choose enhancement
|
|
|
|
Note: If a PR fixes a bug, label it "bug" not "enhancement"
|
|
|
|
SPECIAL CATEGORY (can be combined with above):
|
|
- breaking change: Changes that break backward compatibility (in addition to core category)
|
|
|
|
PRIORITY (apply if clearly evident):
|
|
- high-priority: Critical bugs affecting many users, security issues, or blocking core functionality
|
|
- low-priority: Edge cases, nice-to-have improvements, or cosmetic issues
|
|
- Default to no priority label if unclear
|
|
|
|
STATUS (apply if applicable):
|
|
- needs more info: Issue lacks reproduction steps, error messages, or clear description
|
|
- good first issue: ONLY if it's clearly scoped, has obvious solution, and touches limited files
|
|
- invalid: Spam, completely off-topic, or nonsensical (often LLM-generated)
|
|
|
|
AREA LABELS (apply ONLY when thematically central to the issue):
|
|
- cli: Issues primarily about FastMCP CLI commands (run, dev, install)
|
|
- client: Issues primarily about the Client SDK or client-side functionality
|
|
- server: Issues primarily about FastMCP server implementation
|
|
- auth: Authentication is the main concern (Bearer, JWT, OAuth, WorkOS)
|
|
- openapi: OpenAPI integration/parsing is the primary topic
|
|
- http: HTTP transport or networking is the main issue
|
|
- contrib: Specifically about community contributions in src/contrib/
|
|
- tests: Issues primarily about testing infrastructure, CI/CD workflows, or test coverage
|
|
|
|
IMPORTANT LABELING RULES:
|
|
- Be selective - only apply labels that are clearly relevant
|
|
- Don't apply area labels just because a file in that area is mentioned
|
|
- The issue must be PRIMARILY about that area to get the label
|
|
- When in doubt, don't apply the label
|
|
- Apply 2-5 labels total typically (category + maybe priority + maybe 1-2 areas)
|
|
|
|
META LABELS (rarely needed for issues):
|
|
- dependencies: Only for dependabot PRs or issues specifically about package updates
|
|
- DON'T MERGE: Only if PR author explicitly states it's not ready
|
|
|
|
4. Apply selected labels:
|
|
Use mcp__github__update_issue to apply your selected labels
|
|
DO NOT post any comments
|
|
PROMPT_END
|
|
EOF
|
|
|
|
- name: Run Marvin for Issue Triage
|
|
uses: anthropics/claude-code-action@v1
|
|
with:
|
|
github_token: ${{ steps.marvin-token.outputs.token }}
|
|
bot_name: "Marvin Context Protocol"
|
|
prompt: ${{ steps.triage-prompt.outputs.PROMPT }}
|
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_FOR_CI }}
|
|
allowed_non_write_users: "*"
|
|
claude_args: |
|
|
--allowedTools Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__get_pull_request_files
|
|
settings: |
|
|
{
|
|
"model": "claude-sonnet-4-5-20250929",
|
|
"env": {
|
|
"GH_TOKEN": "${{ steps.marvin-token.outputs.token }}"
|
|
}
|
|
}
|