For a long time, we had a recurring TODO in our calendar: once a month, check whether any Linux distro we test against got a new stable version—or dropped support for an old one.
Sounds simple. In reality, it was annoying, error-prone, and we were always late. Someone had to remember, look up release notes, update our CI matrix, and push a commit. Sometimes we missed a release for weeks, even months. Sometimes we forgot to remove an EOL version. It was busywork, not engineering.
So we automated it.
Step 1: Get the source of truth
We found endoflife.date has a neat API with lifecycle information for tons of projects, including Linux distros.
It gives you a structured JSON about supported and upcoming releases. Exactly what we needed: a single place to know what’s alive and what’s dead.
Step 2: Update CI automatically
We wrote a GitHub Action that queries this API, parses the versions, and updates our CI matrix. The action runs every week, so our testing matrix is always fresh.
You can see the code on GitHub.
Instead of telling people “remember to bump Ubuntu when a new LTS comes out,” the pipeline does it for us.
Step 3: Open a PR, not a mystery commit
Nobody likes automation silently pushing to main
. We used peter-evans/create-pull-request to have the action open a PR with the changes.
That way:
- We can see exactly which versions got added/removed.
- Tests run as usual.
- If something breaks,
main
stays intact. A human is kept in the loop, in charge of merging the PR.
Step 4: Watchdog for the watchdog
One last problem: what if the action itself fails?
A broken script could silently stop updating distros, and we wouldn’t notice until we’re back to being weeks out of date. To prevent that, we hooked the action up to Dead Man’s Snitch.
If the action stops reporting, we get pinged in Slack. So even the automation is monitored.
Done!
No more monthly TODOs. No more late updates. No more “oops, we’re still testing against an unsupported Debian.”
Our CI matrix now always tracks the current stable versions, with almost zero manual work. And we get to spend our time on actual engineering instead of distro babysitting.
Automation FTW!