RFC: Packit-based nightlies for everyone
Decision Due Date: 2025-09-16
Context and Problem Statement
Today most Foreman plugins and many other repositories in the Foreman project implement Packit-based builds for PRs, resulting in a very convinient way to test out a single PR in an RPM-based (production-like) deployment.
However, once a PR is merged, the changes become uninstallable[1] until a release happens.
For a couple of selected packages, we have implemented a “nightly” workflow, where pseudo-releases are created on Jenkins and packaged into the “nightly” repository together with the normal releases of all the other projects.
As the “nightly” process requires quite some management overhead for setup (Jenkins jobs, triggers, adjustment to packaging specs, to name a few) and then later for doing stable releases correctly (ensuring all nightly packages get a “real” release), we have not added any new packages to the list of nightly built packages and asked the maintainers to “release often” instead.
Nightly packages are also incompatible with our “package bumping” workflow, as it requires the packages to be present on rubygems.org.
Proposal
Build commits to main branch into a central repository
Packit supports triggering builds on commit and building them into a user-defined repository.
We have implemented this for foreman_rh_cloud
:
The build result can be seen in the @theforeman/develop COPR.
We propose to implement this for all repositories that utilize Packit today.
The implementation requires two changes:
- a
trigger: commit
block in.packit.yaml
- the GitHub repository being added to the allowlist of sources for
@theforeman/develop
COPR
Packages from this COPR can then be used on-demand by everyone who wants to “grab the latest develoment snapshot”, by enabling the copr using dnf copr enable @theforeman/develop rhel-9-x86_64
and installing/upgrading packages using dnf install <pkg>
and dnf upgrade <pkg>
.
This requires no further changes to the packaging specs and does not affect the “released” package set.
Automated testing of development snapshots
To automatically test those development snapshots we can add a dedicated pipeline that runs in parallel to our normal nightly pipelines and that performs the whole “luna” set of tests, but utilizing the development builds instead of the ones from the normal packaging repository.
Keeping the development snapshots in a separate repository ensures they do not accidentally leak into a stable release because there was no bump to a proper plugin release.
Alternative Designs
Instead of consuming the packages from a dedicated copr repository and test them in a dedicated pipeline, we could have a process that injects the packages into the “regular” staging repository for nightly. This way they get tested in our regular testing pipelines and are automatically exposed to all users when the tests pass and the staging repository gets published as “nightly” for our users.
The downside is that this would require more work during branching, as those development snapshots should not leak into stable releases we publish.
Decision Outcome
TBD. What was the decision that was ultimately made and relevant outcomes with links.
Impacts
For “building” this will require changes to all repositories that have Packit enabled.
A GitHub project will be created for tracking the effort.
Given the rather small change to the Packit configuration, and the requirement to adjust COPR configuration, the work will be performed by the authors of the proposal.
For “testing”: Depends on the implementation/design picked above. When dedicated pipeline, that needs to be implemented and will not impact any existing workflows.
Unless you open a new PR to create a new build, or take the Packit result of an unrelated PR. ↩︎