chore: Add workflow webhook-handler.yml

This commit is contained in:
Shunsuke Hayashi 2025-11-22 17:07:19 +09:00
parent 0e3a7a2760
commit 4d3c1c4a9d

197
.github/workflows/webhook-handler.yml vendored Normal file
View file

@ -0,0 +1,197 @@
name: 🔔 Webhook Event Handler
# Central event router for GitHub OS Event Bus
# Addresses Issue #5 - Phase B: Event Bus Implementation
on:
issues:
types: [opened, labeled, closed, assigned, milestoned]
pull_request:
types: [opened, synchronize, closed, review_requested]
issue_comment:
types: [created]
pull_request_review:
types: [submitted]
push:
branches: [main]
workflow_run:
workflows: ["*"]
types: [completed]
permissions:
issues: write
pull-requests: write
actions: write
contents: read
jobs:
route-event:
runs-on: ubuntu-latest
name: Route Event to Appropriate Handler
steps:
- uses: actions/checkout@v4
- name: Log Event
run: |
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔔 WEBHOOK EVENT RECEIVED"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Event: ${{ github.event_name }}"
echo "Action: ${{ github.event.action }}"
echo "Actor: ${{ github.actor }}"
echo "Timestamp: $(date -u +%Y-%m-%dT%H:%M:%SZ)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
- name: Route to Agent - Issue Opened
if: github.event_name == 'issues' && github.event.action == 'opened'
run: |
echo "🤖 Routing to: IssueAgent"
echo "Task: Analyze new Issue #${{ github.event.issue.number }}"
# Check if Issue has agent-related labels
LABELS="${{ toJson(github.event.issue.labels.*.name) }}"
if echo "$LABELS" | grep -q "🤖agent"; then
echo "✅ Agent label detected, will auto-process"
# TODO: Trigger IssueAgent workflow when implemented
else
echo " Regular issue, manual triage required"
fi
- name: Route to Agent - Issue Labeled with Execute
if: |
github.event_name == 'issues' &&
github.event.action == 'labeled' &&
github.event.label.name == '🤖agent-execute'
run: |
echo "🚀 AGENT EXECUTION TRIGGERED"
echo "Issue: #${{ github.event.issue.number }}"
echo "Title: ${{ github.event.issue.title }}"
# Trigger CoordinatorAgent workflow
gh workflow run agent-runner.yml \
-f issue_number=${{ github.event.issue.number }} \
-f mode=autonomous \
|| echo "⚠️ agent-runner.yml not found yet (will be created in Issue #4)"
- name: Route to Agent - PR Opened
if: github.event_name == 'pull_request' && github.event.action == 'opened'
run: |
echo "📝 Routing to: ReviewAgent"
echo "PR: #${{ github.event.pull_request.number }}"
echo "Draft: ${{ github.event.pull_request.draft }}"
if [ "${{ github.event.pull_request.draft }}" == "false" ]; then
echo "✅ Ready for review, triggering ReviewAgent"
# TODO: Trigger ReviewAgent workflow
else
echo " Draft PR, skipping auto-review"
fi
- name: Route to Agent - Comment Command
if: github.event_name == 'issue_comment' && github.event.action == 'created'
run: |
COMMENT_BODY="${{ github.event.comment.body }}"
if echo "$COMMENT_BODY" | grep -q "^/agent"; then
echo "💬 Agent command detected in comment"
echo "Command: $COMMENT_BODY"
# Parse command
COMMAND=$(echo "$COMMENT_BODY" | sed 's/^\/agent //')
case "$COMMAND" in
"analyze")
echo "🔍 Triggering IssueAgent for analysis"
;;
"execute")
echo "🚀 Triggering CoordinatorAgent for execution"
;;
"review")
echo "📝 Triggering ReviewAgent for code review"
;;
"status")
echo "📊 Fetching current status"
;;
*)
echo "❌ Unknown command: $COMMAND"
gh api \
--method POST \
-H "Accept: application/vnd.github+json" \
/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/comments \
-f body="❌ Unknown command: \`$COMMAND\`
Available commands:
- \`/agent analyze\` - Analyze Issue
- \`/agent execute\` - Start autonomous execution
- \`/agent review\` - Request code review
- \`/agent status\` - Check current status"
;;
esac
fi
- name: Route to Agent - PR Merged
if: |
github.event_name == 'pull_request' &&
github.event.action == 'closed' &&
github.event.pull_request.merged == true
run: |
echo "🎉 PR #${{ github.event.pull_request.number }} merged!"
echo "Branch: ${{ github.event.pull_request.head.ref }} → ${{ github.event.pull_request.base.ref }}"
# If merged to main, may trigger deployment
if [ "${{ github.event.pull_request.base.ref }}" == "main" ]; then
echo "🚀 Merged to main, considering deployment..."
# TODO: Trigger DeploymentAgent if applicable
fi
- name: Route to Agent - Workflow Failed
if: |
github.event_name == 'workflow_run' &&
github.event.workflow_run.conclusion == 'failure'
run: |
echo "🚨 WORKFLOW FAILURE DETECTED"
echo "Workflow: ${{ github.event.workflow_run.name }}"
echo "Conclusion: ${{ github.event.workflow_run.conclusion }}"
echo "Run ID: ${{ github.event.workflow_run.id }}"
# Escalate to Guardian for critical failures
if echo "${{ github.event.workflow_run.name }}" | grep -qE "(agent-runner|economic-circuit-breaker)"; then
echo "🚨 Critical workflow failed, escalating to Guardian"
gh issue create \
--title "🚨 Critical Workflow Failure: ${{ github.event.workflow_run.name }}" \
--label "🔥Sev.1-Critical,🤖AI-システム" \
--assignee "${{ github.repository_owner }}" \
--body "## 🚨 Critical Workflow Failure
**Workflow**: ${{ github.event.workflow_run.name }}
**Conclusion**: ${{ github.event.workflow_run.conclusion }}
**Run ID**: ${{ github.event.workflow_run.id }}
**Run URL**: ${{ github.event.workflow_run.html_url }}
This workflow is critical to Agentic OS operations. Immediate Guardian attention required.
### Next Steps
1. Review workflow logs
2. Identify root cause
3. Fix or rollback changes
4. Re-run workflow
---
**Escalated by**: Webhook Handler
**Timestamp**: $(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|| echo "⚠️ Failed to create escalation Issue"
fi
- name: Event Summary
if: always()
run: |
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📊 EVENT ROUTING SUMMARY"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ Event processed: ${{ github.event_name }}.${{ github.event.action }}"
echo "🎯 Routing completed at: $(date -u +%H:%M:%S)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"