src/events/ module provides a lightweight, in-process event bus.
Architecture
Key Files
| File | Purpose |
|---|---|
events/index.ts | Module exports |
events/bus.ts | Event bus implementation |
events/types.ts | Event type definitions (24+ types) |
events/handlers/notifications.ts | Notification handler |
events/handlers/ci.ts | CI/CD handler |
events/handlers/triage.ts | Issue triage handler |
events/handlers/merge-queue.ts | Merge queue handler |
events/handlers/pr-review.ts | PR review handler |
events/handlers/marketing.ts | Marketing content handler |
Overview
The events system provides:- Real-time event emission for repository activities
- Handler registration for processing events
- Integration with notifications, CI, and webhooks
- Extensibility for custom event handling
- Event logging for debugging
Event Types
Repository Events
| Event | Description |
|---|---|
repo.created | New repository created |
repo.deleted | Repository deleted |
repo.visibility_changed | Public/private changed |
Push Events
| Event | Description |
|---|---|
push | Commits pushed to repository |
branch.created | New branch created |
branch.deleted | Branch deleted |
tag.created | New tag created |
tag.deleted | Tag deleted |
Pull Request Events
| Event | Description |
|---|---|
pr.opened | PR opened |
pr.closed | PR closed |
pr.merged | PR merged |
pr.reopened | PR reopened |
pr.review_requested | Review requested |
pr.review_submitted | Review submitted |
pr.comment | Comment added |
Issue Events
| Event | Description |
|---|---|
issue.opened | Issue opened |
issue.closed | Issue closed |
issue.reopened | Issue reopened |
issue.comment | Comment added |
issue.assigned | Assignee added |
issue.labeled | Label added |
CI Events
| Event | Description |
|---|---|
ci.workflow_started | Workflow started |
ci.workflow_completed | Workflow finished |
ci.job_started | Job started |
ci.job_completed | Job finished |
ci.job_failed | Job failed |
Mention Events
| Event | Description |
|---|---|
mention.user | User mentioned in text |
mention.team | Team mentioned in text |
Merge Queue Events
| Event | Description |
|---|---|
merge_queue.added | PR added to queue |
merge_queue.removed | PR removed from queue |
merge_queue.testing | Testing started |
merge_queue.merged | PR merged via queue |
merge_queue.failed | Queue merge failed |
Event Bus
The central event bus manages event emission and handler registration.Emitting Events
Subscribing to Events
Built-in Handlers
Notification Handler
Automatically creates notifications for relevant events:- PR comments and reviews
- Mentions in comments
- Review requests
- Issue assignments
- Access grants
CI Handler
Triggers CI workflows based on events:- Push events
- PR opened/synchronized
- Manual workflow dispatch
Merge Queue Handler
Processes merge queue state changes:Event Structure
All events follow a common structure:Example Events
Push Event:Custom Event Handlers
Creating a Handler
Handler with Filtering
Error Handling
Helper Functions
Extracting Mentions
Creating Events
Integration Points
Webhooks
Events are automatically sent to configured webhooks:Activity Feed
Events populate the activity feed:Real-time Updates
Events can be sent to connected clients:Testing Event Handlers
Best Practices
- Keep handlers fast - Long-running operations should be queued
- Handle errors gracefully - Don’t let one handler break others
- Use specific events - Subscribe to specific types when possible
- Idempotency - Design handlers to be safely re-run
- Logging - Log event processing for debugging
Related
- Webhooks API - Configure webhooks
- Notifications API - Notification system
- CI/CD - CI/CD integration