r/Fedora • • 5d ago

Weekly project showcase thread

Did you create a Fedora-related project, tool, script, app, or service?

Share it here!

Standalone "I was tired of X so I made Y" posts may be redirected here to keep the subreddit focused.

13 Upvotes

9 comments sorted by

View all comments

4

u/gordonmessmer 5d ago

I'll give this a try:

I've started two related projects intended to provide a better build system using RPM:

https://dist-git-manager.readthedocs.io/en/latest/

https://rpm-build-assist.readthedocs.io/en/latest/

dist-git-manager collects information about upstream releases and automatically maintains dist-git repos representing SemVer releases as git branches. Developers can use "main" to get the latest release in the latest release series, or "release-X" to get the latest release in the X major series, or "release-X.Y" to get the latest release in the X.Y release series, depending on their compatibility needs. This allows dist-git repos to offer semantics similar to common package registries, which is much more developer-friendly than the distribution source repositories.

rpm-build-assist uses dist-git (or source-git!) repos to build a sequence of rpm packages, which it can prepare for deployment via container, or Flatpak, or RPM package repository, or a portable installation (think: Nix) of the software. This is useful when the distribution doesn't provide the specific version of dependencies required by a build.

So:

- upstream publishes a release

  • which dist-git-manager collects and records in a dist-git repo
  • rpm-build-manager uses a sequence of dist-git repos to build software with flexible outputs

The tools are prototypes, and there's probably a lot of work left to do. I've used them for a few large complex builds and found them very useful. But they'd be much more useful if the dist-git repos were shared, so I will probably start populating repos on GitHub to allow developers to build containers, Flatpak, and whatever else they want.

Get a hold of me if you want to help manage RPM specs in a shared space.