Every year, Digital Ocean organizes Hacktoberfest, an event meant to promote Open Source involvement. Everyone who registers and creates 4 Pull Requests in October on GitHub receives a T-Shirt. Many Open Source projects mark issues with a "Hacktoberfest" label to indicate their appreciation of new contributors.
The last few Hacktoberfest's, I have been contributing to existing projects. This year, I decided to start a small project of my own, Helm Cabin. I didn't find an application that displays the data managed by Tiller without introducing additional abstractions. I decided to scratch my own itch and implemented Helm Cabin as part of Hacktoberfest 2019.
Helm Cabin displays all releases with any status (deleted, deployed, superseded, etc.) that Tiller knows about in a web-based interface. The overview table refreshes automatically every few seconds. The idea was to create an application that can be used as a dashboard. Furthermore, additional information can be displayed for any release:
- Rendered Manifest
- Chart templates
- Chart values
- Chart files
The application is quite minimalistic because I wanted to keep my time investment small. Feature creep and premature optimization are enemies if the goal is to publish something usable quickly. For example, no CSS framework was used. A great feature that was out of scope was a way to filter the releases on the overview page. For example, the user could decide he is only interested in failed and deployed releases. Another feature I didn't implement was paging on the release overview page. All readers are invited to contribute ;)
Besides "scratching my itch", the main goal was to learn. The chosen technologies reflect this goal: the frontend is implemented with VueJS and the backend with Golang. Having used React and Angular in the past, VueJS felt familiar quickly. I have also used Golang previously, but mostly for CLI tools. Communicating with Tiller was straighforward thanks to the gRPC API that is also used by the Helm CLI.
To simplify deployment in Kubernetes, I created a Helm chart for Helm Cabin. I learned how to host a Helm repository with GitHub pages. Stay tuned for a blog post explaining how to do it and how to automate chart publishing with GitHub actions.
If I find the time, I will extend Helm Cabin with Helm 3 support. In conclusion, the outcome is nice considering the small amount of time invested. Hacktoberfest 2019 was a lot of fun and a great learning experience once again.
Edit: support for Helm 3 was added to Helm Cabin in the meantime.