Building a GitHub Issue Auto-Labeler with Pulumi and Node.js: A Challenge Journey
This is a submission for the Pulumi Deploy and Document Challenge: Get Creative with Pulumi and GitHub What I Built I created the GitHub Issue Auto-Labeler, a powerful tool that automates GitHub issue management using Pulumi and Node.js. This project labels issues in real-time based on keywords in their titles or descriptions, customizable via a config.json file. It also posts friendly comments to remind contributors of guidelines and auto-closes stale issues after 30 days of inactivity. Built for the Pulumi Deploy and Document Challenge, it streamlines repository workflows, making it easier for maintainers and contributors alike to stay organized. Live Demo Link [Not applicable—local setup required] Note: This is a server-side tool requiring local deployment with ngrok. Follow the README to set up and test locally. A hosted version is planned for the future. Project Repo Check out the project on GitHub: The repository includes a detailed README.md with installation steps, usage instructions, troubleshooting tips, and screenshots. The docs/ folder contains architecture notes, and the code is open for contributions—see CONTRIBUTING.md. My Journey Process My 10-day journey began with setting up Node.js, Pulumi, and a GitHub repo. I used Express to create a webhook server and Octokit to interact with the GitHub API. The first challenge was getting the webhook to work—initial 404 errors with ngrok were frustrating, but adding detailed logging (console.log for requests) helped me pinpoint the issue (wrong URL path). Overcoming this, I implemented real-time labeling based on keywords, extending it to body content after testing with issue #10 ("Test bug issue"). Adding configurable rules via config.json was smooth, but integrating comments and stale issue closing added complexity. The comment feature required client.issues.createComment, tested successfully on issue #13 ("Test enhancement #13"). For stale issues, I leveraged GitHub Actions with actions/stale, configuring a 30-day inactivity threshold—tricky to test instantly, but the workflow is set. Challenges Webhook Setup: Misconfigured ngrok URLs caused delays; I learned to double-check paths. Pulumi Labels: Initial label creation failed due to missing tokens—fixed with proper environment setup. Time Management: Balancing features across 10 days taught me to prioritize (labeling first, then enhancements). What I Learned Debugging with logs is a lifesaver. Pulumi’s infrastructure-as-code approach simplifies label management. GitHub Actions complement server-side automation seamlessly. Using Pulumi with GitHub Pulumi was the backbone of this project, enabling me to define and deploy GitHub labels as code. I used the @pulumi/github package to create labels (bug, enhancement, question) in my repo, ensuring consistency across environments. The pulumi up command set up the infrastructure, which the Node.js server then leveraged via Octokit for dynamic labeling. Why Pulumi Was Beneficial Automation: Eliminated manual label creation, saving time. Version Control: Label definitions are tracked in Git, making changes reproducible. Scalability: Easy to extend to multiple repos with Pulumi stacks. I didn’t use Pulumi Copilot, but if I had, a key prompt might have been: “Generate a Pulumi program to create GitHub labels ‘bug’, ‘enhancement’, and ‘question’ in my repo skarthikeyan96/issue-labeler.” This would have accelerated the initial setup. Cover Image A huge thanks to the Pulumi and Dev.to communities for this challenge! I’m excited to see where this project goes next! Star the repo at https://github.com/skarthikeyan96/issue-labeler.

This is a submission for the Pulumi Deploy and Document Challenge: Get Creative with Pulumi and GitHub
What I Built
I created the GitHub Issue Auto-Labeler, a powerful tool that automates GitHub issue management using Pulumi and Node.js. This project labels issues in real-time based on keywords in their titles or descriptions, customizable via a config.json
file. It also posts friendly comments to remind contributors of guidelines and auto-closes stale issues after 30 days of inactivity. Built for the Pulumi Deploy and Document Challenge, it streamlines repository workflows, making it easier for maintainers and contributors alike to stay organized.
Live Demo Link
[Not applicable—local setup required]
Note: This is a server-side tool requiring local deployment with ngrok
. Follow the README to set up and test locally. A hosted version is planned for the future.
Project Repo
Check out the project on GitHub:
The repository includes a detailed README.md
with installation steps, usage instructions, troubleshooting tips, and screenshots. The docs/
folder contains architecture notes, and the code is open for contributions—see CONTRIBUTING.md.
My Journey
Process
My 10-day journey began with setting up Node.js, Pulumi, and a GitHub repo. I used Express to create a webhook server and Octokit to interact with the GitHub API. The first challenge was getting the webhook to work—initial 404 errors with ngrok
were frustrating, but adding detailed logging (console.log
for requests) helped me pinpoint the issue (wrong URL path). Overcoming this, I implemented real-time labeling based on keywords, extending it to body content after testing with issue #10 ("Test bug issue").
Adding configurable rules via config.json
was smooth, but integrating comments and stale issue closing added complexity. The comment feature required client.issues.createComment
, tested successfully on issue #13 ("Test enhancement #13"). For stale issues, I leveraged GitHub Actions with actions/stale
, configuring a 30-day inactivity threshold—tricky to test instantly, but the workflow is set.
Challenges
-
Webhook Setup: Misconfigured
ngrok
URLs caused delays; I learned to double-check paths. - Pulumi Labels: Initial label creation failed due to missing tokens—fixed with proper environment setup.
- Time Management: Balancing features across 10 days taught me to prioritize (labeling first, then enhancements).
What I Learned
- Debugging with logs is a lifesaver.
- Pulumi’s infrastructure-as-code approach simplifies label management.
- GitHub Actions complement server-side automation seamlessly.
Using Pulumi with GitHub
Pulumi was the backbone of this project, enabling me to define and deploy GitHub labels as code. I used the @pulumi/github
package to create labels (bug
, enhancement
, question
) in my repo, ensuring consistency across environments. The pulumi up
command set up the infrastructure, which the Node.js server then leveraged via Octokit for dynamic labeling.
Why Pulumi Was Beneficial
- Automation: Eliminated manual label creation, saving time.
- Version Control: Label definitions are tracked in Git, making changes reproducible.
- Scalability: Easy to extend to multiple repos with Pulumi stacks.
I didn’t use Pulumi Copilot, but if I had, a key prompt might have been:
“Generate a Pulumi program to create GitHub labels ‘bug’, ‘enhancement’, and ‘question’ in my repo skarthikeyan96/issue-labeler.”
This would have accelerated the initial setup.
Cover Image
A huge thanks to the Pulumi and Dev.to communities for this challenge! I’m excited to see where this project goes next! Star the repo at https://github.com/skarthikeyan96/issue-labeler.