tl;dr: https://osbpo.debian.net/deb-status is now real-time updated and much better than it used to, helping the OpenStack packaging team be a way more efficient.
How it used to be
For years, the Debian OpenStack team has relied on automated tools to track the status of OpenStack packages across Debian releases. Our goal has always been simple: transparency, efficiency, accuracy.
We used to use a tool called os-version-checker
, written by Michal Arbet, which generated a static status page at https://osbpo.debian.net/deb-status. It was functional and served us well — but it had limitations:
- It ran on a cron job, not on demand
- It processed all OpenStack releases at once, making it slow
- The rsync from Jenkins hosts to osbpo.debian.net was also cron-driven
- No immediate feedback after a package build
This meant that when a developer pushed a new package to salsa
(the Debian GitLab instance) in the team’s repository, the following would happen:
- Jenkins would build the backport
- Store it in a local repository
- Wait up to 30 minutes (or more) for the cron job to run rsync + status update
- Only then would the status page reflect the new version
For maintainers actively working on a new release, this delay was frustrating. You’d fix a bug, push, build — and still see your package marked as “missing” or “out of date” for minutes. You had no real-time feedback. This was also an annoyance for testing, because when fixing a bug, I often had to trigger the rsync manually in order to not wait for it, so I could do my tests. Now, osbpo is always up-to-date a few seconds after the build of the package.
The New Way: Event-Driven, Real-Time Updates
We’ve rebuilt the system from the ground up to be fast, responsive, and event-driven. Now, the workflow is:
- Developer git push → triggers Jenkins
- Jenkins builds the package → publishes to local repo
- Jenkins immediately triggers a webhook on osbpo.debian.net
The webhook on osbpo does:
- rsyncs the new package to the central Debian repo
- Pulls the latest OpenStack releases from git and use its YAML data (instead of parsing the release HTML pages)
- Regenerates the status page, comparing what upstream released and what’s in Debian
No more cron. No more waiting…
How it works
The central osbpo.debian.net
server runs:
webhook
— to receive secure, HMAC-verified triggers that it processes in an async wayApache
— to serve the status pages and the Debian OpenStack repositories- Custom scripts — to
rsync
packages, validate, and generate reports
Jenkins instances are configured to curl
the webhook on successful build. The status page is generated by openstack-debian-release-manager
, a new tool I’ve packaged and deployed. The dashboard uses AJAX to load content dynamically (like when browsing from one release to another), with sorting, metadata, and real-time auto-refresh every 10 seconds.
openstack-debian-release-manager is easy to deploy and configure, and will do most (if not all) of the needed configuration. Uploading it to Debian is probably not needed, and a bit over-kill, so I believe I’ll just keep it in Salsa for the moment, unless there’s a way to make it more generic so it can help someone else (another team?) in Debian.
Room for improvement
There’s still things I want to add. Namely:
- Add status for Debian stable (ie: without the osbpo.debian.net add-on repository), which we used to have with os-version-checker.
- Add a per-release config file option to be able to mask not packaged project on a per OpenStack release granularity
Special thanks to Michal Arbet for the original os-version-checker that served me for years, helping me to never forget a missing OpenStack package release.