Repository navigation
fix(xcat-dep): no openSUSE dep target can be built - #95
Merged
Merged
Conversation
The pipeline runs mockbuild-all.pl --target opensuse-leap-15.6-x86_64, and target_profile falls through to /epel-(\d+)-/ and dies with "Could not parse EL release". No openSUSE dep cell on this lineage has ever completed a real build. The test asks MockBuildUtils for the build plan of each openSUSE target, for the channel a cell advertises, and for the manifest section the completeness gate reads. It fails 4 of 8 on this commit: MockBuildUtils has no target_profile, no dep_repo_baseurl and no dep_repo_label, and packages-manifest.conf has no openSUSE section. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
target_profile resolved a target through openEuler, the forcearch table, then /epel-(\d+)-/, and died on anything else. The pipeline has run mockbuild-all.pl --target opensuse-leap-15.6-x86_64 since the SUSE cells were added, so both openSUSE dep cells stop before the first build step. The capability is not new. It was written on feature/uftp-suse, where xcat-dep-build-opensuse15-x86_64 build 42 ran it and built seven packages, and it was never proposed upstream. This carries over only the part that drives a target: target_profile and the forcearch table move into MockBuildUtils and gain a cell key, an openSUSE arm maps opensuse-leap-<major>.<minor> to sles<major>/<arch>, and dep_repo_baseurl and dep_repo_label pick the channel a cell advertises, because xcat.org serves Leap from sles and everything else from yum. target_cell and write_dep_repo_metadata read the cell instead of composing rh<rel> themselves. derive_target_from_repo_path maps a sles<N> directory back to its chroot through %SUSE_BUILD_TARGET, and the cross-arch finalize globs sles* beside rh*. Without both, the completeness and signature gates are handed a SUSE cell, derive nothing, and the cell publishes a missing or unsigned package in silence. packages-manifest.conf gains the two Leap 15.6 sections. Neither pins xCAT-genesis-base: openSUSE ships no legacy Genesis, so no openSUSE target builds the payload, and the gate is zero tolerance. Neither pins uftp either, because UFTP 5 for Leap needs its own spec change that this branch does not carry; t/mockbuild-all.t excludes the Leap sections from that assertion and says why. t/opensuse_dep_target.t fails 4 of 8 on the parent commit. prove -j4 t/ passes: 28 files, 1299 tests. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
cells.tsv gives the opensuse12 cell the subpath sles12/x86_64, and nothing builds it. The openSUSE arm derives the cell from the Leap major, which is right for 15.x by coincidence, so Leap 42.3 resolves to sles42. The test names the Leap 42.3 target, the sles12 directory the gates must map back to it, the manifest section the completeness gate reads, and the mock configuration install_mock_cfg copies. It also asserts that no openSUSE section pins xCAT-genesis-base, with an EL section as the control. It fails on this commit: 42.3 yields sles42, /repo/sles12/x86_64 derives nothing, and neither the manifest section nor the chroot exists. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
cells.tsv gives the opensuse12 cell the subpath sles12/x86_64 and nothing builds it, so xcat-dep-build-opensuse12-x86_64 has never produced a package. The openSUSE arm derived the cell from the Leap major, which is correct for 15.x by coincidence, so Leap 42.3 resolved to sles42 and the completeness gate then stopped on a missing manifest section. %LEAP_SLE_MAJOR maps a Leap release to the SLE family its packages serve: 42.3 to 12, 15.6 to 15, 16.0 to 16. Leap 42.3 carries SLE 12 SP3's base -- rpm 4.11.2, perl 5.18.2, glibc 2.22. %SUSE_BUILD_TARGET is derived from that one table, so the forward and reverse answers cannot disagree. A Leap release the table does not name now dies instead of publishing into sles<leap major>. mock-configs/opensuse-leap-42.3-x86_64.cfg is the chroot. Leap 42.3 is end of life, so mock ships no configuration for it and the openSUSE discontinued archive serves the tree, with the rpm-md metadata under repo/oss/suse/ rather than repo/oss/ -- the live mirror answers 404 for 42.3. 42.3 packages no python3-dnf, so mock cannot build a bootstrap chroot and the config installs straight into the chroot. install_mock_cfg needs no change: it already copies mock-configs/<target>.cfg and refuses a host copy that differs. The manifest section omits xCAT-genesis-base, because openSUSE ships no legacy Genesis, and omits uftp, because UFTP 5 for Leap needs its own spec change. t/opensuse_dep_target.t and t/mockbuild-all.t fail on the parent commit. prove -j4 t/ passes: 28 files, 1301 tests. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
Moving target_profile into MockBuildUtils carried the dep_builders lists with it, and openEuler came away without uftp while every openEuler manifest section still pins uftp=5.0.4. A build then skips the package and the completeness gate fails afterwards, naming the manifest rather than the plan. The test holds every target's dep_builders and required sets down package by package, at the values mockbuild-all.pl carried before the move, and asserts that a target pins uftp exactly when it builds it. It covers EL native and cross-built, openEuler x86_64 and ppc64le, and both openSUSE releases, because one list moved and any entry could have been lost. It fails on this commit for the two openEuler targets. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
Moving target_profile into MockBuildUtils took the lists from a branch that predates the openEuler UFTP work, so the openEuler build plan lost uftp while every openEuler manifest section still pins uftp=5.0.4. A clean openEuler build skips the package, and the completeness gate then stops the deploy naming the manifest. native/uftp-openeuler.t fails 2 of 15 on the parent commit. uftp is restored to the openEuler dep_builders. The exclusion stays where it was meant to be: openSUSE, whose uftp.spec change is not in this tree. t/target_build_plan.t fails on the parent commit for both openEuler targets and passes for EL, the forcearch target and both openSUSE releases, so uftp was the only entry the move lost. prove -j4 t/ and prove -j4 native/ both pass: 29 and 9 files, 1304 and 873 tests. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
The cross-arch Genesis finalize requires every OS directory to carry both architectures and each one to hold its own xCAT-genesis-base rpm, before it reaches the SUSE verification loop. Both demands are wrong for a SUSE cell: cells.tsv gives the sles12 cell x86_64 alone, so its ppc64le peer will never exist, and openSUSE ships no legacy Genesis, so no openSUSE target builds a payload. The test adds a one-arch SUSE cell with no peer and a two-arch SUSE cell with no Genesis, beside the EL cases that must keep dying for both reasons, and puts a SUSE cell into the mixed-roots tree so a valid EL finalize is not stopped by one. It fails 3 of 235 on this commit: the two new cases die on the peer and the Genesis requirement, and the mixed-roots finalize dies on the SUSE cell. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
The cross-arch Genesis finalize collected every OS directory except openEuler, then demanded that each one carry both architectures and that each architecture hold its own xCAT-genesis-base rpm. A SUSE cell satisfies neither: cells.tsv gives the sles12 cell x86_64 alone, so its ppc64le peer will never exist, and openSUSE ships no legacy Genesis, so no openSUSE target builds a payload. So sles12/x86_64 failed for a missing peer and a two-arch sles15 failed for an absent payload, and a SUSE cell beside a valid EL pair stopped the whole finalize. A sles* directory is now collected like an openeuler* one: outside the cross-arch copy and outside the peer and payload requirements. The skip line names the directories it passed over, so a cell left out is visible rather than implied. What still runs for a SUSE cell: the repository cell lock, and the manifest completeness and repomd signature gate, which mockbuild-all.pl applies to every finalized cell and already globs sles* beside rh*. What no longer runs: the foreign-architecture Genesis copy, the peer requirement and the payload requirement, none of which a family without a legacy payload can satisfy. The EL cases keep dying for both reasons, which the cases beside the new ones assert. native/openeuler-srpm.t asserted the old skip message; it now asserts that the message names the skipped directory and the skip, which is the stronger claim. t/mockbuild-all.t fails 3 of 235 on the parent commit. prove -j4 t/ and prove -j4 native/ pass: 29 and 9 files, 1308 and 874 tests. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
dhilst
added a commit
that referenced
this pull request
Oct 26, 2026
One conflict in MockBuildUtils.pm, and both sides end INSIDE a sub and share the single closing brace that follows: this branch adds the perl BuildRequires compat helpers, ending in perl_mock_cfg_text, and master added the forcearch target table, target_profile and dep_repo_label from xcat-dep/#95. Resolved as the union with master's block first and its own closing brace, so the shared brace closes perl_mock_cfg_text. Every sub is defined exactly once. prove -j4 t/ passes 33 files and 1341 tests. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
mockbuild-all.pl --target opensuse-leap-15.6-x86_64dies withCould not parse EL release from target 'opensuse-leap-15.6-x86_64'.target_profileresolves a target through openEuler, then the forcearch table, then/epel-(\d+)-/, and dies on anything else. The CI has run that command since the SUSE cells were added, so neither openSUSE dep cell reaches its first build step and neither has published a package.The capability is not new. It was written on the
feature/uftp-susebranch of the VersatusHPC fork, where a real run built seven packages for Leap 15.6, and it was never proposed here. This carries over only the part that drives a target and leaves UFTP alone.target_profileand the forcearch table move intoMockBuildUtilsand gain acellkey, an openSUSE arm maps a Leap release to the SLE family it serves, anddep_repo_baseurlanddep_repo_labelpick the channel a cell advertises, because xcat.org serves Leap fromslesand everything else fromyum.derive_target_from_repo_pathmaps asles<N>directory back to its chroot and the cross-arch finalize globssles*besiderh*, so the completeness and signature gates no longer skip a SUSE cell in silence.It also builds the sles12 cell, which nothing built before:
%LEAP_SLE_MAJORmaps Leap 42.3 to SLE 12, 15.6 to 15 and 16.0 to 16. The SLE major is not the Leap major, so a cell derived from the Leap major published 42.3 assles42. A Leap release the table does not name now fails instead of guessing.mock-configs/opensuse-leap-42.3-x86_64.cfgis the chroot. Leap 42.3 is end of life, so the openSUSE discontinued archive serves it, with the rpm-md metadata underrepo/oss/suse/rather thanrepo/oss/.xCAT-genesis-base, because openSUSE ships no legacy Genesis, oruftp, because UFTP 5 for Leap needs its own spec change.t/opensuse_dep_target.tis new and fails before each of the two fixes