This is a submission for the Pulumi Deploy and Document Challenge: Get Creative with Pulumi and GitHub
What I Built
Managing GitHub milestones can be a tedious task, especially when it comes to tracking progress and keeping teams motivated. The "GitHub Milestone Motivator" is a creative solution built with Pulumi and the GitHub API to automate this process. It tracks milestone progress across repositories, posts encouraging comments on open issues (e.g., "Halfway there at 50%!") when progress hits key thresholds (25%, 50%, 75%, 100%), and assigns a "Milestone Star" label when a milestone is fully completed. Using Pulumi’s Automation API, this tool simplifies repository management and boosts team morale with minimal effort.
Live Demo Link
Demo link:
- https://github.com/demo-longphan/frontend (my tested repo before publishing this submission)
- https://github.com/demo-longphan/smart-contract
Project Repo
Github repository: https://github.com/longphanquangminh/creative-pulumi-github-contest (Including complete README documentation)
My Journey
Before proceeding with the implementation, I drafted a business logic diagram as follows:
Explaination: When the program is executed, it will scan all the repositories defined by the user. For each repository, it will check its milestones, and within each milestone, it will examine the related issues. There are two possible scenarios:
- If the milestone is not completed yet, the program will check the progress percentage. Based on the percentage (25%, 50%, 75%, or 100%), it will display an encouraging message accordingly.
- If the milestone is 100% complete, a congratulatory comment will be added by the manager to the representative issue (the last issue) to celebrate the team’s success.
This isn’t just my story — it’s an instruction manual for anyone on a similar journey. To apply these lessons effectively in a management context, follow the steps below:
👣 Step 1: Create a milestone in the repository (Go to Repo -> click Issues -> click Milestone tag to create.
👣 Step 2: Once the milestone is created, start working on the project. There will be tasks/issues — when creating them, make sure to tag them with the corresponding milestone.
👣 Step 3: After creating an issue/task, typically following the SDLC (Software Development Life Cycle), we will start coding or fixing bugs for those features. Once completed, we simply close the issue and move on to the next one.
In this demo, I will only create one issue.
👣 Step 4: Run "npm run dev" and wait for the result.
As you can see in the image, the comment has been created and a label has been assigned to highlight the issue and boost the morale of software engineers.
With this setup, managers no longer need to manually go through each step via the UI — the tool already contains the necessary logic. Just by running a single command, it will execute everything automatically.
While building the "GitHub Milestone Motivator" with Pulumi, I hit a roadblock: the GitHub Provider doesn’t support IssueComment. I wanted to post motivational messages on issues to track milestone progress, so I turned to Octokit to fill the gap. Integrating Octokit let me add comments like "Halfway there at 50%!" directly to issues, bypassing Pulumi’s limitation. The challenge was finding a clean way to weave this into my workflow, but once I got it working, I learned how powerful it is to combine Pulumi’s infrastructure management with Octokit’s flexibility for dynamic GitHub interactions.
Using Pulumi with GitHub
In the "GitHub Milestone Motivator," I used Pulumi to declaratively manage GitHub repositories and create the "Milestone Star" label when a milestone hits 100%. By leveraging Pulumi’s Automation API, I automated resource provisioning in a repeatable, code-driven way. This was beneficial because it ensured consistent setup across runs, simplified tracking of infrastructure state, and let me focus on the logic rather than manual API calls. While Pulumi couldn’t handle issue comments due to the missing IssueComment resource, its strength in managing static resources paired perfectly with Octokit for dynamic actions.
📣 Dev Community shared this on X – 3,770+ views as of April 2025: https://x.com/ThePracticalDev/status/1911621746974679521
[deleted]