Summary
Execute the full EL10 build in dependency order using a deliberate, PR-based approach. Instead of bulk build triggers, create PRs to foreman-packaging for each batch of packages, keeping ~10 PRs open at a time.
Use scripts/el10_rebuild_tracker.py to manage the pipeline.
Prerequisites
Approach
For each phase in the build order, attempt scratch builds for batches of ~10 packages. Fix any failures, then create PRs to theforeman/foreman-packaging (branch: rpm/develop) with the spec fixes. Keep ~10 PRs in flight to balance CI load.
Workflow per batch:
./scripts/el10_rebuild_tracker.py next — see next packages to attempt
cd workspace/foreman-packaging && obal scratch <packages> --scm none — attempt builds
- Fix any spec failures (library paths, Ruby 3.3 compat, macro changes, etc.)
- Create a PR to
theforeman/foreman-packaging with the fixes
./scripts/el10_rebuild_tracker.py pr foreman-packaging#NNNN <packages> — record the PR
- After merge:
./scripts/el10_rebuild_tracker.py merged foreman-packaging#NNNN
Build Phases (in dependency order)
Phase 0: Bootstrap
foreman-build subpackage (one-time, manual bootstrap)
Phase 1: ruby-tier1 (176 packages)
Phase 2: ruby-tier2 (4 packages)
Phase 3: frameworks — rails + hammer + other (19 packages, parallel)
Phase 4: nodejs (118 packages)
Phase 5: core-apps — foreman + installer + proxy (26 packages)
Phase 6: plugins-tier1 (93 packages)
Phase 7: plugins-tier2 (110 packages)
Phase 8: katello (32 packages)
Notes
- Installer ordering:
foreman-installer is in the same manifest group as its build deps (rubygem-kafo, etc.). Build the deps first, then foreman-installer. Two prior PRs to fix this at the manifest level were closed without merging (#8814, #9564).
- rubygem-grpc: Fails on both EL9 and EL10. Used by
foreman_google plugin, not on the critical path.
- Many packages will build fine without changes — mark them as ok in the tracker and only create PRs for packages that need spec fixes.
- ekohl's Copr at https://copr.fedorainfracloud.org/coprs/ekohl/foreman-nightly-staging/ has successful EL10 builds of foreman core — confirms the path works.
Summary
Execute the full EL10 build in dependency order using a deliberate, PR-based approach. Instead of bulk build triggers, create PRs to foreman-packaging for each batch of packages, keeping ~10 PRs open at a time.
Use
scripts/el10_rebuild_tracker.pyto manage the pipeline.Prerequisites
Approach
For each phase in the build order, attempt scratch builds for batches of ~10 packages. Fix any failures, then create PRs to
theforeman/foreman-packaging(branch:rpm/develop) with the spec fixes. Keep ~10 PRs in flight to balance CI load.Workflow per batch:
./scripts/el10_rebuild_tracker.py next— see next packages to attemptcd workspace/foreman-packaging && obal scratch <packages> --scm none— attempt buildstheforeman/foreman-packagingwith the fixes./scripts/el10_rebuild_tracker.py pr foreman-packaging#NNNN <packages>— record the PR./scripts/el10_rebuild_tracker.py merged foreman-packaging#NNNNBuild Phases (in dependency order)
Notes
foreman-installeris in the same manifest group as its build deps (rubygem-kafo, etc.). Build the deps first, thenforeman-installer. Two prior PRs to fix this at the manifest level were closed without merging (#8814, #9564).foreman_googleplugin, not on the critical path.