Conversation
--list-packages prints the set a run selects, after --epel-gap and --packages, and exits before the root and mock checks. The riscv64 manifest cell has no other repository behind it, so a test can now hold the cell to this list without a build host.
perl-xCAT hard-requires perl(HTML::Form). EPEL supplies it on x86_64 and ppc64le, so the EL9 and EL10 cells omit it, and the riscv64 cell copied that omission. There is no EPEL for riscv64 and Rocky 10 riscv64 carries no perl-HTML-Form in BaseOS, AppStream, CRB or extras, so dnf install xCAT could not resolve on a riscv64 management node.
The assertion fails against the previous manifest, naming perl-HTML-Form as the package the cell lacked. It reads the set from the builder, so a package added to the builder later fails here until the cell names it.
The runner already installs Parallel::ForkManager, which the builder loads, so the test runs there rather than skipping.
The riscv64 sections of debs-manifest.conf listed grub2-xcat only. A riscv64 management node serves the x86 nodes of a mixed cluster, so its repository must carry syslinux-xcat, elilo-xcat and xnba-undi, as the ppc64el sections already require. List the three in every riscv64 section. They are Architecture: all, built once on amd64 and assembled into every index, so the build phase is unchanged and the publish gate now verifies the riscv64 index carries them.
The manifest consistency check covered the amd64 and ppc64el sections. It now covers the riscv64 sections too, so the 4 boot components must be listed there. 12 assertions fail against the previous manifest.
The forcearch riscv64 profile built grub2-xcat but not elilo-xcat, syslinux-xcat or xnba-undi, and the rocky-10-riscv64-xcat cell did not list them, so a riscv64 management node could not serve the x86 nodes of a mixed cluster, unlike a ppc64le one. Add the three to the profile and the cell, at the pins the EL10 ppc64le cell uses. They are noarch and are built in the native x86_64 chroot, like grub2-xcat. syslinux-xcat is marked noarch in the builder table, as its spec declares, so the forcearch target does not try it in the emulated chroot, where its ExclusiveArch excludes it. The target is now cross-built on x86_64 only, which the mock config states: a native riscv64 host could not build syslinux-xcat either.
The riscv64 cell must carry elilo-xcat, grub2-xcat, syslinux-xcat and xnba-undi at the pins of the EL10 ppc64le cell. 3 assertions fail against the previous manifest.
…'s cell collect_rpms copied every binary rpm a builder produced. The syslinux builder also produces syslinux, syslinux-extlinux and their debug rpms for the chroot it runs in, so a forcearch target that builds the noarch boot loaders in the native x86_64 chroot would have published x86_64 rpms in the riscv64 cell. The completeness gate checks names and pins only, so it would have passed. Keep an rpm only when it is noarch or carries the cell's architecture, read from the rpm header. The rule lives in MockBuildUtils as rpm_in_cell.
A noarch builder of a forcearch target runs in the native chroot of the release, but its cleanup step was registered against the target configuration. The step scrubbed a chroot that did not exist and left the native bootstrap behind on every run, one per noarch step. Compute the configuration once per step and scrub the same one it built in.
…-rpm check verify_rpms_checksig built the isolated keyring and ran rpmkeys on every rpm in one body. The keyring setup and the per-rpm verdict are now their own helpers, so another caller can verify a single rpm against the signing key. The gate behaves as before. Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
Each run collects the rpms it built into its run repository, and deploy stages the cell from that repository and gates it on the whole manifest, which a skip run cannot satisfy: with --skip-perl there are no perl packages, the gate reports them missing, and the deploy fails after the build succeeded. The gate is right to check the whole manifest, since the flags describe what this invocation built and not what the cell may lack. After collection, the run repository now takes the binary rpms a skipped builder published in the cell: whole builds, so subpackages the manifest does not name stay too; only builds whose source package the target manifest still names, so a dropped package is not republished; and only builds of which the run carries no member yet, so generations of one build never mix. The bump check, createrepo, the tarball and the deploy gate then see the same complete set. The carry-over stops the run rather than publish a partial or doubtful set: an rpm in the cell whose header cannot be read, apart from the OpenEmbedded Genesis family that is pruned by name, a member of a selected build the signing key did not sign, by signer id and by rpmkeys --checksig, or whose digests do not verify when no key is configured, a member of another architecture than the cell or noarch, or a package published at more than one version. A package that was never published is still reported missing, and a full run is unchanged. The zero-artifact check applies only when a builder ran, so a run that skips both package builders reaches the deploy. Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
skipped_builder must place a source package with the builder required_pkgs would skip and never claim the OpenEmbedded Genesis. carry_over_rpms must keep every binary rpm of a skipped build whose source package the target manifest still names, leave out whole any build the run already carries a member of, and die on an unreadable header, an unsigned or foreign-architecture member of a selected build, or a package published at two versions. Paths with spaces are covered. Both fail to import against the previous module. Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
t/mockbuild-all.t covers the manifest gate and the skip-run carry-over and was not in the package test job. Its rpm fixtures skip where rpmbuild is absent. Signed-off-by: Vinícius Ferrão <2031761+viniciusferrao@users.noreply.github.com>
feat(genesis): package s390x images
fix(xcat-dep): carry the x86 boot loaders in the riscv64 repositories
…gate master added the per-cell architecture rule (rpm_arch, rpm_in_cell) after this branch started, so the two sides collide in three places. The MockBuildUtils and t/mockbuild-all.t import lists take both sets of names. Neither side removes a name the other needs. MockBuildUtils.pm now held two definitions of rpm_arch, one from each side, and Perl kept the later one. master's definition stands: it reads the header of a file and falls back to the name suffix otherwise, which is what its own tests and rpm_in_cell need. The branch definition is removed. carry_over_rpms takes rpm_arch as an argument, so it keeps its own architecture gate and its own message. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
master added the common repository gate to the workflow and rewrote the riscv64 comment of packages-manifest.conf after this branch started. The workflow keeps both new prove lines. The two tests are unrelated. The riscv64 comment takes master's text. This branch said the x86 boot components are not built for riscv64; master then listed elilo-xcat, syslinux-xcat and xnba-undi in the cell, because a riscv64 management node serves the x86 nodes of a mixed cluster, so the branch sentence is no longer true. The last line keeps this branch's statement: the perl set is the EL10 one plus perl-HTML-Form. The pin itself merged without a conflict, and t/riscv64_perl_cell.t passes on the merged cell. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
Pin perl-HTML-Form in the riscv64 dependency cell
…gate fix(mockbuild-all): keep the published rpms of a skipped builder
…build mockbuild-all.pl installs each shipped mock configuration into /etc/mock, then refuses to run when the host copy differs from the tree copy. Nothing refreshes the host copy, so the first commit that changes a shipped configuration stops every builder that already has the old one until an operator copies it by hand. xcat-dep-el-cd build 132 died in 40 seconds this way: target rocky-10-riscv64-xcat, cell el10-riscv64, with /etc/mock/rocky-10-riscv64-xcat.cfg on xcat-master holding the exact revision that 002df3c installed on 2026-09-02. The file is owned by no rpm. The test drives install_mock_config against temporary directories and asserts the three cases: an absent host copy is installed, an identical one is left alone, and a stale one is refreshed with the replaced file kept. Signed-off-by: Daniel Hilst <392820+dhilst@users.noreply.github.com>
… build install_mock_cfg installed a shipped mock configuration into /etc/mock once and then refused to run whenever the host copy differed, telling the operator to update it by hand. Nothing in the tree or in the pipeline ever did, so the first commit that changed a shipped configuration stopped every builder that already held the old one. That is how xcat-dep-el-cd build 132 died in 40 seconds on target rocky-10-riscv64-xcat, cell el10-riscv64: fc5c6d0 narrowed legal_host_arches in mock-configs/rocky-10-riscv64-xcat.cfg, and xcat-master still carried the revision 002df3c installed on 2026-09-02. The file is owned by no rpm, so no package upgrade would ever have replaced it. The logic moves to MockBuildUtils::install_mock_config, which takes the destination directory, so a test can drive it outside /etc. A host copy that differs is now replaced from the tree and kept as <name>.bak.<timestamp>. t/mockbuild-all.t covers the three cases. With the refresh replaced by the old die the file fails at test 175. 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.
EL dependency lane of campaign #112. Test commit first, fix second.
install_mock_cfginstalled a shipped mock configuration into/etc/mockonce and then refused to run whenever the host copy differed, telling the operator to update it by hand. Nothing in the tree or the pipeline ever did, so the first commit that changed a shipped configuration stopped every builder that already held the old one.xcat-dep-el-cdbuild 132 died in 40 seconds this way on targetrocky-10-riscv64-xcat, cell el10-riscv64:fc5c6d0narrowedlegal_host_archesinmock-configs/rocky-10-riscv64-xcat.cfgandxcat-masterstill carried the revision002df3cinstalled on 2026-09-02. The file is owned by no rpm.The logic moves to
MockBuildUtils::install_mock_config, which takes the destination directory so a test can drive it outside/etc. A differing host copy is replaced from the tree and kept as<name>.bak.<timestamp>.t/mockbuild-all.tcovers absent, identical and stale. The red run of the test alone is #4; with the refresh replaced by the olddiethe file fails at test 175.