2
0
mirror of https://github.com/xcat2/xcat-dep.git synced 2026-09-12 12:36:23 +00:00
Commit Graph

832 Commits

Author SHA1 Message Date
Vinícius Ferrão 07debd3ee8 fix(mockbuild): stage each invocation into empty repository directories
The collection guard counts what this run copied, but the staging repositories
were never cleared: packages left by an earlier run with the same --run-id sat
there unseen by collection, were indexed by createrepo and published by
deploy_target, where the name-only dependency assertion accepted them. A run
whose builders all failed could therefore ship a previous run's packages.

Empty the staging repositories before collection, so everything they hold
afterwards comes from this invocation.
2026-08-24 13:57:26 -03:00
Vinícius Ferrão 896d250d62 test(genesis): cover the pre-index re-verification of pooled packages
Pin that every pooled Genesis package is checked against the release manifest
again before apt-ftparchive reads the pool, so the check cannot be dropped
without a failing test.
2026-08-24 13:57:26 -03:00
Vinícius Ferrão b0c0345b68 fix(apt-repo): re-verify the pooled Genesis packages before indexing
apt-ftparchive indexes and the signature covers whatever is in the pool at that
moment, while the packages were checked when they were copied. Verify them again
against the release manifest immediately before the indexes are generated, so a
package that changed in between cannot be published as a verified one.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 7b9dcaeff7 test(genesis): pin the pooled Genesis DEB as an independent file
The pooled package carries the release bytes, which the existing digest check
covers, but it must not be the release file itself; assert the identity is
distinct so a link cannot come back unnoticed.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 8ab9b909a1 fix(apt-repo): copy each Genesis release deb once per suite, reflinked
Every selected suite receives the whole release, so publication copied one image
per architecture per codename -- hundreds of megabytes each, several gigabytes on
the build host and again in the published tree.

Use --reflink=auto: filesystems that can share extents copy-on-write stop paying
for the duplication, and the pool entry stays a file of its own everywhere, which
a hardlink would not -- that would leave the published package and the verified
release sharing an inode, where a write through either path changes the other.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 5b226fdad4 docs(genesis): explain the release re-checksum and the verified rpm versions
The two checksum passes around the verifier read as a duplicated walk; say what
the second one is for. Record which rpm versions reproduce the package identity
verify-release requires, so a build host outside that set is a known question
rather than a guess.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 2fe5f186a1 build(genesis): drop the _buildtime define no rpm 4 honours
%_buildtime is not an rpm macro: built with it alone and no SOURCE_DATE_EPOCH,
rpm 4.14.3, 4.16.1.3 and 4.19.1.1 all stamped the current time. The build time
and build host the release verifier checks come from SOURCE_DATE_EPOCH with
use_source_date_epoch_as_buildtime, and from _buildhost -- both honoured on
every one of those versions and on rpm 6.0.2, where the package also builds
and verifies unchanged.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão 5a097c3532 build(apt-repo): require cmp only where the Genesis release needs it
cmp guards the release manifest against changing during verification, which is
a --genesis-release concern; a legacy build never reaches it. Check for it with
the other release prerequisites instead of failing a plain build over a tool it
does not use.
2026-08-24 13:57:25 -03:00
Vinícius Ferrão d7b39389b8 test(genesis): cover the dry-run Genesis package preview
Pin that a dry run with --genesis-release reports the release packages, counts
them alongside the collected dependencies, and still installs nothing.
2026-08-24 13:09:02 -03:00
Vinícius Ferrão 7ed58177a1 fix(mockbuild): preview the Genesis release packages in dry runs
Collection drops every xCAT-genesis-openembedded package once --genesis-release
is given, and the install that puts the verified ones back was skipped in dry
runs. A dry run therefore described a repository with no Genesis packages while
the real run published the whole set.

Report the release packages a real run would install and count them, so the
dry-run summary matches what the run would do.
2026-08-24 13:08:37 -03:00
Vinícius Ferrão 7e76d523a4 test(genesis): cover the empty-collection guard with a Genesis release
A run with --genesis-release whose builders produced nothing must stop at the
collection guard rather than reach the deployable repository, so pin the exit
status, the message and the untouched deployment directory.
2026-08-24 13:08:19 -03:00
Vinícius Ferrão 6ed0fa2ba0 fix(mockbuild): keep the empty-collection guards ahead of the Genesis release
The Genesis release is installed from a verified directory instead of being
built here, so counting it before the "did anything build?" checks made those
checks unreachable with --genesis-release: a run whose builders had all failed
carried seven release packages past the guard, ran createrepo, and copied them
into the deployable per-EL tree before assert_required_deps stopped it, naming
the missing dependencies rather than the failed builds.

Assert on what the run collected first, then add the release. The source-RPM
warning was masked the same way and moves with it.
2026-08-24 13:07:04 -03:00
Vinícius Ferrão 64afd0c935 test(genesis): isolate legacy workspace fixture 2026-08-23 00:10:03 -03:00
Vinícius Ferrão e13f2fc207 fix(genesis): support custom RPM build layouts 2026-08-23 00:10:03 -03:00
Vinícius Ferrão 72cba4a4a5 docs(genesis): state the release trust boundary 2026-08-22 23:45:42 -03:00
Vinícius Ferrão 4d46b8f7ca test(build): cover repository fallback safeguards 2026-08-22 23:45:22 -03:00
Vinícius Ferrão d5cf7abf2e fix(build): preserve legacy repository behavior 2026-08-22 23:44:11 -03:00
Vinícius Ferrão 690863fea9 test(genesis): cover package publication safeguards 2026-08-22 23:44:06 -03:00
Vinícius Ferrão d81a4ae248 fix(genesis): harden package publication 2026-08-22 23:44:01 -03:00
Vinícius Ferrão 994ba1f9e8 docs(genesis): list shared Perl modules 2026-08-22 19:36:35 -03:00
Vinícius Ferrão fe55231e73 test(genesis): pin the verified checksum read 2026-08-22 19:33:29 -03:00
Vinícius Ferrão 542ec87d8f fix(genesis): return the verified checksum snapshot 2026-08-22 19:33:02 -03:00
Vinícius Ferrão 4c2dfcf3e9 test(genesis): cover shared verification helpers 2026-08-22 19:29:22 -03:00
Vinícius Ferrão 9228a699ca ci(genesis): check shared Perl modules 2026-08-22 19:28:01 -03:00
Vinícius Ferrão f91f5ff929 fix(genesis): share copied package verification 2026-08-22 19:27:24 -03:00
Vinícius Ferrão ffbf576a5f test(genesis): reuse build helpers 2026-08-22 19:26:03 -03:00
Vinícius Ferrão 69a00bf43f refactor(genesis): share release build helpers 2026-08-22 19:24:45 -03:00
Vinícius Ferrão 881605847c ci(genesis): install shared Perl helpers 2026-08-22 19:22:06 -03:00
Vinícius Ferrão 2b1c7724cb test(genesis): prepare shared library path 2026-08-22 19:16:16 -03:00
Vinícius Ferrão f86ba2fb2a test(genesis): express release modes portably 2026-08-22 11:48:25 -03:00
Vinícius Ferrão a3af2b7031 fix(genesis): return release packages safely 2026-08-22 11:48:07 -03:00
Vinícius Ferrão 861cec2d8f ci(genesis): test unprivileged package builds 2026-08-22 02:43:01 -03:00
Vinícius Ferrão 4bfa7104d4 test(genesis): isolate release consumers 2026-08-22 02:39:39 -03:00
Vinícius Ferrão 17bd87c53c fix(genesis): harden staged release publication 2026-08-22 02:39:38 -03:00
Vinícius Ferrão 1b21fdb827 test(genesis): verify staged package payloads 2026-08-22 02:18:01 -03:00
Vinícius Ferrão b1eed082e6 ci(genesis): require package build tools 2026-08-22 02:15:04 -03:00
Vinícius Ferrão fd0cffadac docs(genesis): describe staged package rollout 2026-08-22 02:15:04 -03:00
Vinícius Ferrão 6e31a24c30 test(genesis): keep legacy packages available 2026-08-22 02:14:26 -03:00
Vinícius Ferrão 6516f29423 fix(genesis): stage OpenEmbedded packages separately 2026-08-22 02:14:17 -03:00
Vinícius Ferrão 4f38261407 test(genesis): protect deployed release packages 2026-08-22 01:35:48 -03:00
Vinícius Ferrão 2531e9f579 docs(genesis): clarify release publication 2026-08-22 01:34:32 -03:00
Vinícius Ferrão 853847ab39 ci(genesis): test OpenEmbedded packages 2026-08-22 01:33:30 -03:00
Vinícius Ferrão 79cf9add2a fix(build): preserve source epoch failures 2026-08-22 01:33:01 -03:00
Vinícius Ferrão a54f7bc3ea test(genesis): cover DEB package transitions 2026-08-22 01:31:36 -03:00
Vinícius Ferrão be73af9799 fix(genesis): replace legacy DEB packages 2026-08-22 01:31:36 -03:00
Vinícius Ferrão d201f5c0f5 test(genesis): inspect package install hooks 2026-08-22 01:31:36 -03:00
Vinícius Ferrão 6597def239 fix(genesis): harden package install hooks 2026-08-22 01:31:36 -03:00
Vinícius Ferrão b7197aab0f test(genesis): cover release qualifiers 2026-08-22 01:31:36 -03:00
Vinícius Ferrão 7ac007d545 fix(genesis): accept valid release filenames 2026-08-22 01:31:36 -03:00
Vinícius Ferrão c71b04344e fix(genesis): require reproducible archive tooling 2026-08-22 01:31:36 -03:00