From 27ede9164280500cdec2ff9e3b3529611b4298ed Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 23 Sep 2024 14:32:24 +0200 Subject: [PATCH] gen-manifest: include repo as pseudo package This is one possible fix for the issue raised in https://github.com/osbuild/otk/pull/209/files#r1771119550 I.e. how we can ensure that we have the same repo configuration between images and otk. It works by adding a pseudo package for each repo, the resulting diff in otk looks like this: ```yaml diff --git a/test/data/images-ref/centos/9/x86_64/qcow2/centos_9-x86_64-qcow2-empty.yaml b/test/data/images-ref/centos/9/x86_64/qcow2/centos_9-x86_64-qcow2-empty.yaml index b067dd1..7021cba 100644 --- a/test/data/images-ref/centos/9/x86_64/qcow2/centos_9-x86_64-qcow2-empty.yaml +++ b/test/data/images-ref/centos/9/x86_64/qcow2/centos_9-x86_64-qcow2-empty.yaml @@ -29,6 +29,9 @@ pipelines: - id: sha256:93cd8e20fc07f08337cb9d9fa9996274658f6395574e874379c4c4157e922700 - id: sha256:bf35d0b80342ad44ca298ed07fcc9d3f8d43a2700964586a4a5e2c0a49766528 - id: sha256:360688270679b1c512513cfab6d931c8c715318582a9974caa3c0f88a0ee053c + - id: sha256:02eee243dc7e0c9589002cab187f57a444a8bfee4c469eee412c833580ba529d + - id: sha256:3cf1c35ad9bcc0ba055e1902a393c4b51cee4294b7d5e17bb20b7a5989054c15 + - id: sha256:7bffc576857b3a9e4a5f3059efeb5b8986118301ff15b5e92f6cc30d566c50e2 options: gpgkeys: - '-----BEGIN PGP PUBLIC KEY BLOCK----- @@ -171,6 +174,9 @@ pipelines: - id: sha256:2de43b323b1e26fd256368050a89e6f1ab3ca1c7d469b67e134db4d5ffc7929d - id: sha256:ec6b0c3970b59b0ca5532cb3dc4dd7239136602223a2d39e7e20fba18298bc62 - id: sha256:241171773fc64efd040332c534e7f67f3f97e75ab0bb61b09bbe33fc81850a9b + - id: sha256:02eee243dc7e0c9589002cab187f57a444a8bfee4c469eee412c833580ba529d + - id: sha256:3cf1c35ad9bcc0ba055e1902a393c4b51cee4294b7d5e17bb20b7a5989054c15 + - id: sha256:7bffc576857b3a9e4a5f3059efeb5b8986118301ff15b5e92f6cc30d566c50e2 options: gpgkeys: - '-----BEGIN PGP PUBLIC KEY BLOCK----- @@ -429,6 +435,8 @@ sources: items: sha256:02b2f585447caaaef59cc58cda1cbf6db27530690fdb13f747f3fdeb762c4b15: url: https://example.com/repo/packages/dosfstools + sha256:02eee243dc7e0c9589002cab187f57a444a8bfee4c469eee412c833580ba529d: + url: https://example.com/pseudo-repo-pkg:/v2/mirror/public/el9/cs9-x86_64-appstream sha256:04cb12e072878beef30b2e3560c39bf1cb0e5a8896a545e7f4bfb0ec777196b3: url: https://example.com/repo/packages/exclude:iwl3160-firmware sha256:0bdf1ef00f53398361ebaf915f0325ccdc0534447134ba8506a03c71f2c5c9e2: @@ -463,6 +471,8 @@ sources: url: https://example.com/repo/packages/qemu-img sha256:3993c379c029014a9c4b2adf5d23397b3c7421467a0cb3575ff925bb6f6329b0: url: https://example.com/repo/packages/coreutils + sha256:3cf1c35ad9bcc0ba055e1902a393c4b51cee4294b7d5e17bb20b7a5989054c15: + url: https://example.com/pseudo-repo-pkg:/v2/mirror/public/el9/cs9-x86_64-baseos sha256:3fc8516922a52d754083308fc413432652da40490b0a336294a5d765757be942: url: https://example.com/repo/packages/cloud-init sha256:43436865ed2d17b812735341ae5102c5ea86ce1eb70a0a43045a552a755da79d: @@ -495,6 +505,8 @@ sources: url: https://example.com/repo/packages/redhat-release-eula sha256:7b4efa9ae15ac908a0e4f0f79b90b322a98f10ab4e0b414e15d7424a270597d5: url: https://example.com/repo/packages/qemu-guest-agent + sha256:7bffc576857b3a9e4a5f3059efeb5b8986118301ff15b5e92f6cc30d566c50e2: + url: https://example.com/pseudo-repo-pkg:/v2/mirror/public/el9/cs9-x86_64-rt sha256:874ecbebddb9872c2fc949de3be7888f72ad3ae0e7847ee5ce0503c691503ad0: url: https://example.com/repo/packages/exclude:iwl2000-firmware sha256:8836d54e733450c96ab05b71d619e5bd52693fac5466644fbf39d02b58a09747: ``` --- cmd/gen-manifests/main.go | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/cmd/gen-manifests/main.go b/cmd/gen-manifests/main.go index 1d5a51ad49..e358d916bd 100644 --- a/cmd/gen-manifests/main.go +++ b/cmd/gen-manifests/main.go @@ -11,6 +11,7 @@ import ( "flag" "fmt" "io" + "net/url" "os" "path/filepath" "strconv" @@ -363,6 +364,7 @@ func depsolve(cacheDir string, packageSets map[string][]rpmmd.PackageSet, d dist func mockDepsolve(packageSets map[string][]rpmmd.PackageSet, repos []rpmmd.RepoConfig, archName string) (map[string][]rpmmd.PackageSpec, map[string][]rpmmd.RepoConfig) { depsolvedSets := make(map[string][]rpmmd.PackageSpec) repoSets := make(map[string][]rpmmd.RepoConfig) + for name, pkgSetChain := range packageSets { specSet := make([]rpmmd.PackageSpec, 0) for _, pkgSet := range pkgSetChain { @@ -398,6 +400,30 @@ func mockDepsolve(packageSets map[string][]rpmmd.PackageSet, repos []rpmmd.RepoC specSet = append(specSet, spec) } } + + // generate pseudo packages for the repos + for _, repo := range repos { + // the test repos have the form: + // https://rpmrepo..../el9/cs9-x86_64-rt-20240915 + // drop the date as it's not needed for this level of + // mocks + baseURL := repo.BaseURLs[0] + if idx := strings.LastIndex(baseURL, "-"); idx > 0 { + baseURL = baseURL[:idx] + } + url, err := url.Parse(baseURL) + if err != nil { + panic(err) + } + url.Host = "example.com" + url.Path = "pseudo-repo-pkg:" + url.Path + specSet = append(specSet, rpmmd.PackageSpec{ + Name: url.String(), + RemoteLocation: url.String(), + Checksum: "sha256:" + fmt.Sprintf("%x", sha256.Sum256([]byte(url.String()))), + }) + } + depsolvedSets[name] = specSet repoSets[name] = repos }