This is a submission for the Pulumi Deploy and Document Challenge: Get Creative with Pulumi and GitHub
What I Built
Auto-Labeler Bot: A GitHub automation tool that uses Pulumi to deploy a CI/CD pipeline with:
- AI-powered issue labeling (via AWS Comprehend)
- Auto-generated PR templates based on issue content
- Dynamic milestone assignment based on labels
- Security checks for sensitive keywords
Key Files:
-
main.py
: Core Pulumi program -
labeler_bot.py
: GitHub App logic using Automation API -
ci-cd-pipeline.yaml
: GitHub Actions workflow - README.md: Setup guide & threat model
My Journey
First Hurdle: Authentication Circus
Tried 3 different token approaches before realizing Pulumi's aws.iam.Role
could simplify permissions.
Key Prompt:
"Show me how to create a GitHub repository with a CODEOWNERS file and deployment protection rules using Pulumi"
Breakthrough:
Used Pulumi's GitHubRepositoryWebhook
resource to connect the bot to GitHub's Events API without exposing secrets in code!
Using Pulumi with GitHub
Why Pulumi?
- Version-controlled infrastructure for GitHub workflows
- Multi-repository management across teams
- Secret encryption using Pulumi's Secrets Manager
SDK Gems:
import pulumi_github as github # Create repository with security policies repo = github.Repository("secure-app", visibility="private", allow_merge_commit=False, allow_rebase_merge=True) # Auto-labeler webhook setup webhook = github.RepositoryWebhook("issue-labeler", repository=repo.full_name, events=["issues"], active=True, configuration={ "url": "https://labeler-bot.example.com/webhook", "content_type": "json" })
Security Wins:
- GitHub App credentials stored in Pulumi Secrets Manager
- Deployment protection rules blocking force-pushes
- Automated dependabot alerts
Documentation Highlights (From README)
Step 1: Deploy with Pulumi
pulumi up --config github:token=your_personal_access_token
Step 2: Configure Webhook
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \ -H "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/yourusername/auto-labeler-bot/hooks
Step 3: Customize Rules (YAML snippet)
label_rules: - keywords: ["urgent", "security"] priority: P0 assignees: ["security-team"] - keywords: ["bug"] add_labels: ["bug", "needs-triage"]
Troubleshooting Tips:
⚠️ Ensure GitHub App has contents:read
scope
⚠️ Validate webhook URLs with ngrok during testing
⚠️ Monitor AWS Comprehend API costs
Why This Matters
Traditional approaches to GitHub automation:
🚫 Require manual YAML configuration
🚫 Hardcode security policies
🚫 Can’t adapt to new patterns
Our solution:
🤖 Self-healing workflows that evolve with your codebase
🔒 Secrets managed through Pulumi’s secret system
🌐 Easily extendable with custom NLP models
Special Thanks
Big shoutout to the Pulumi Community Slack for helping debug event payload parsing – special thanks to @github_guru for the GitHubEventFilter
tip!
Turning boring workflows into smart automation since 2023 🤖
Top comments (0)