4 minutes
Sandogasa, now for EPEL and CentOS SIG workflows too!
Caveat lector
This post discusses tools reluctantly written with AI assistance. If you don’t entertain using them under any circumstance, and think even reading about them legally compromise your ability to reimplement them yourselves, stop reading now
This is a follow-up to the original Sandogasa announcement. Before I ended up fedora-cve-triage to extract library crates and reuse them in the other Sandogasa tools, I already created two tools for managing CentOS Hyperscale SIG workflows, hs-intake and hs-relmon. It simply makes sense to also merge them back in and deduplicate functionalities.
And yes, I meant to post it yesterday then was afraid it might have gotten mistaken for an April’s Fools prank… rewriting artisanal Python with vibe-coded Rust, after all! (see below).
hs-intake
Packages in Hyperscale are often backports, but they can be based on either Fedora or CentOS Stream packages - when doing larger backports (e.g. from Fedora Rawhide to CentOS Stream 9) it’s important to check beforehand to see if the backporting is feasible, and if it might break anything depending on the older version.
# Check if it is safe to backport libbpf from f44 to c9s
hs-intake safe-to-backport libbpf c9s f44
# Also check reverse dependencies on other branches
hs-intake safe-to-backport libbpf c9s f44 --also-check epel9,epel9-next
# JSON output
hs-intake safe-to-backport libbpf c9s f44 --json
hs-relmon
Related to that - we want to know if the packages we carry are out of date. This is not really supported by release-monitoring.org normally use by Fedora (though it supports other distributions too) because we don’t always track the real upstream but our upstream is another distribution release (Fedora rawhide, Fedora stable, a newer CentOS Stream release).
This tool does that, uses Repology as the source of truth, and handles filing issues and updating them just like Fedora’s release monitoring integration in Bugzilla.
It still needs to be hooked up to run on schedule, but it’s working well so far. See e.g. the update available issue for dracut.
Or see the tool in action (more examples on crates.io)
$ hs-relmon check-latest ethtool
ethtool
Distribution Version Detail Status
────────────── ─────── ────────────────────── ──────
Upstream 6.19
Fedora Rawhide 6.19
Fedora Stable 6.19 fedora_43
CentOS Stream 6.15 centos_stream_10
Hyperscale 9 6.15 ethtool-6.15-3.hs.el9 outdated
Hyperscale 10 6.15 ethtool-6.15-3.hs.el10 outdated
ebranch
One other existing tool is ebranch, first presented in 2022. Sadly work and personal obligations got in the way, so I did not quite have the time to finish the ongoing refactor to use fedrq - it works but there are issues I never quite had the time to debug, so it’s really only usable as a set of Python library functions right now, not through the CLI directly.
It’s been rewritten in Rust as part of the Sandogasa family, and is already proving very useful in wrapping up the rebase of uutils-coreutils in EPEL 9 and bringing it up in EPEL 10 - 166 source packages, including previously unbranched-and-built dependencies!
It’s still missing Bugzilla and release engineering integration, though that was experimental in the Python codebase anyway, so I’ll implement that after the long Easter weekend, and then sunset the original Python source code - and move it out of Pagure, which is being decommissioned - probably to either sourcehut or codeberg, so that the code lives on somewhere beyond PyPI tarballs.
$ ebranch build-order --koji rust-base64-simd \
--source rawhide \
--target-repo '@koji:epel10.3-build-side-133542'
rust-const-str rust-outref : rust-vsimd : rust-base64-simd
The COPR batch building ‘hack’ is my favourite highlight
ebranch build-order --copr rust-base64-simd \
--source rawhide \
--target-repo '@koji:epel10.3-build-side-133542' > build.sh
chmod +x build.sh
./build.sh @myuser/myproject --chroot epel-10-x86_64
As well as finally supporting installabiilty checks!
$ ebranch build-order rust-uucore \
--source rawhide \
--target-repo '@koji:epel10.3-build-side-133542' \
--check-install --verbose --koji
[installability] resolving with 1 package(s)
[depth 1] resolving rust-uucore (0 queued, 0 resolved)
[installability] checking subpackages of rust-uucore
[installability] adding 7 package(s): rust-base64-simd, ...
[installability] resolving with 8 package(s)
...
[installability] adding 1 package(s): rust-const-str-proc-macro
[installability] resolving with 9 package(s)
...
rust-const-str rust-const-str-proc-macro rust-core_maths ...
Feedback time
Let me know if this is useful to you or if you have requests for improvement or bugfixes! The issue tracker is up and there are tags for specific tools, though not for the shared library crates just yet.
Hopefully this scratches some other people’s itches and not just mine.
What are you doing outside of this tool?
Still planning to write artisanal Python code - myrepos-utils is not going anywhere! - but I’ll probably spend most of my paid time doing LLM-assisted Rust code, and free up enough spare time to finally write Fennel code again and sort out the Lua and Guile Scheme guidelines in Fedora … and get back sorting out my pathway to becoming a Debian Developer.
This post is day 35 of my #100DaysToOffload challenge. Visit https://100daystooffload.com to get more info, or to get involved.
Have a comment on one of my posts? Start a discussion in my public inbox by sending an email to ~michel-slm/public-inbox@lists.sr.ht [mailing list etiquette]
Posts are also tooted to @michelin@hachyderm.io or @michel_slm@social.coop
Comments
You can use your Mastodon account to reply to this post.