diff --git a/bib/cmd/bootc-image-builder/cloud.go b/bib/cmd/bootc-image-builder/cloud.go index 483f4ae52..57feccc9d 100644 --- a/bib/cmd/bootc-image-builder/cloud.go +++ b/bib/cmd/bootc-image-builder/cloud.go @@ -33,12 +33,14 @@ func upload(uploader cloud.Uploader, path string, flags *pflag.FlagSet) error { defer file.Close() var r io.Reader = file + var size int64 if pbar != nil { st, err := file.Stat() if err != nil { return err } - pbar.SetTotal(st.Size()) + size = st.Size() + pbar.SetTotal(size) pbar.Set(pb.Bytes, true) pbar.SetWriter(osStdout) r = pbar.NewProxyReader(file) @@ -46,5 +48,5 @@ func upload(uploader cloud.Uploader, path string, flags *pflag.FlagSet) error { defer pbar.Finish() } - return uploader.UploadAndRegister(r, osStderr) + return uploader.UploadAndRegister(r, uint64(size), osStderr) } diff --git a/bib/cmd/bootc-image-builder/legacy_iso.go b/bib/cmd/bootc-image-builder/legacy_iso.go index cff937c44..58b9185f3 100644 --- a/bib/cmd/bootc-image-builder/legacy_iso.go +++ b/bib/cmd/bootc-image-builder/legacy_iso.go @@ -3,7 +3,6 @@ package main import ( "fmt" "math/rand" - "slices" "strconv" "strings" @@ -15,6 +14,8 @@ import ( "github.com/osbuild/images/pkg/customizations/kickstart" "github.com/osbuild/images/pkg/depsolvednf" "github.com/osbuild/images/pkg/disk" + "github.com/osbuild/images/pkg/distro" + "github.com/osbuild/images/pkg/distro/defs" "github.com/osbuild/images/pkg/image" "github.com/osbuild/images/pkg/manifest" "github.com/osbuild/images/pkg/osbuild" @@ -24,8 +25,6 @@ import ( "github.com/sirupsen/logrus" podman_container "github.com/osbuild/images/pkg/bib/container" - - "github.com/osbuild/bootc-image-builder/bib/internal/distrodef" ) // all possible locations for the bib's distro definitions @@ -164,7 +163,11 @@ func makeISOManifest(c *ManifestConfig, solver *depsolvednf.Solver, cacheRoot st // depsolve packages depsolvedSets := make(map[string]depsolvednf.DepsolveResult) depsolvedRepos := make(map[string][]rpmmd.RepoConfig) - for name, pkgSet := range mani.GetPackageSetChains() { + pkgSetChains, err := mani.GetPackageSetChains() + if err != nil { + return nil, nil, err + } + for name, pkgSet := range pkgSetChains { res, err := solver.Depsolve(pkgSet, 0) if err != nil { return nil, nil, fmt.Errorf("cannot depsolve: %w", err) @@ -229,8 +232,16 @@ func labelForISO(os *osinfo.OSRelease, arch *arch.Arch) string { } } -func needsRHELLoraxTemplates(si osinfo.OSRelease) bool { - return si.ID == "rhel" || slices.Contains(si.IDLike, "rhel") || si.VersionID == "eln" +// from:https://github.com/osbuild/images/blob/v0.201.0/data/distrodefs/rhel-10/imagetypes.yaml#L169 +var loraxRhelTemplates = []string{ + "80-rhel/runtime-postinstall.tmpl", + "80-rhel/runtime-cleanup.tmpl", +} + +// from:https://github.com/osbuild/images/blob/v0.201.0/data/distrodefs/fedora/imagetypes.yaml#L408 +var loraxFedoraTemplates = []string{ + "99-generic/runtime-postinstall.tmpl", + "99-generic/runtime-cleanup.tmpl", } func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, error) { @@ -238,10 +249,31 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro return nil, fmt.Errorf("pipeline: no base image defined") } - imageDef, err := distrodef.LoadImageDef(c.DistroDefPaths, c.SourceInfo.OSRelease.ID, c.SourceInfo.OSRelease.VersionID, "anaconda-iso") + nameVer := fmt.Sprintf("%s-%s", c.SourceInfo.OSRelease.ID, c.SourceInfo.OSRelease.VersionID) + id, err := distro.ParseID(nameVer) + if err != nil { + return nil, err + } + // XXX: ensure all aliases we have for bib are available in + // images + distroYAML, err := defs.NewDistroYAML(nameVer) if err != nil { return nil, err } + // XXX: put bootc-rpm-installer or something into images + installerImgTypeName := "image-installer" + imgType, ok := distroYAML.ImageTypes()[installerImgTypeName] + if !ok { + return nil, fmt.Errorf("cannot find image definition for %v", installerImgTypeName) + } + installerPkgSet, ok := imgType.PackageSets(*id, c.Architecture.String())["installer"] + if !ok { + return nil, fmt.Errorf("cannot find installer package set for %v", installerImgTypeName) + } + installerConfig := imgType.InstallerConfig(*id, c.Architecture.String()) + if installerConfig == nil { + return nil, fmt.Errorf("empty installer config for %s", installerImgTypeName) + } containerSource := container.SourceSpec{ Source: c.Imgref, @@ -286,10 +318,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro img.InstallerCustomizations.Product = c.SourceInfo.OSRelease.Name img.InstallerCustomizations.OSVersion = c.SourceInfo.OSRelease.VersionID img.InstallerCustomizations.ISOLabel = labelForISO(&c.SourceInfo.OSRelease, &c.Architecture) - - img.ExtraBasePackages = rpmmd.PackageSet{ - Include: imageDef.Packages, - } + img.ExtraBasePackages = installerPkgSet var customizations *blueprint.Customizations if c.Config != nil { @@ -328,7 +357,7 @@ func manifestForISO(c *ManifestConfig, rng *rand.Rand) (*manifest.Manifest, erro img.Kickstart.OSTree = &kickstart.OSTree{ OSName: "default", } - img.InstallerCustomizations.UseRHELLoraxTemplates = needsRHELLoraxTemplates(c.SourceInfo.OSRelease) + img.InstallerCustomizations.LoraxTemplates = installerConfig.LoraxTemplates // see https://github.com/osbuild/bootc-image-builder/issues/733 img.InstallerCustomizations.ISORootfsType = manifest.SquashfsRootfs diff --git a/bib/cmd/bootc-image-builder/main.go b/bib/cmd/bootc-image-builder/main.go index 4351b1a5e..a4191ea14 100644 --- a/bib/cmd/bootc-image-builder/main.go +++ b/bib/cmd/bootc-image-builder/main.go @@ -1,7 +1,6 @@ package main import ( - "bytes" "encoding/json" "errors" "fmt" @@ -177,13 +176,11 @@ func manifestFromCobraForDisk(imgref, buildImgref, imgTypeStr, rootFs, rpmCacheR return nil, nil, err } - var buf bytes.Buffer repos, err := reporegistry.New(nil, []fs.FS{repos.FS}) if err != nil { return nil, nil, err } mg, err := manifestgen.New(repos, &manifestgen.Options{ - Output: &buf, // XXX: hack to skip repo loading for the bootc image. // We need to add a SkipRepositories or similar to // manifestgen instead to make this clean @@ -196,10 +193,11 @@ func manifestFromCobraForDisk(imgref, buildImgref, imgTypeStr, rootFs, rpmCacheR if err != nil { return nil, nil, err } - if err := mg.Generate(config, distro, imgType, archi, nil); err != nil { + manifest, err := mg.Generate(config, imgType, nil) + if err != nil { return nil, nil, err } - return buf.Bytes(), nil, nil + return manifest, nil, nil } func cmdManifest(cmd *cobra.Command, args []string) error { diff --git a/bib/cmd/upload/main.go b/bib/cmd/upload/main.go index c0b25f5e1..8f7ddccd9 100644 --- a/bib/cmd/upload/main.go +++ b/bib/cmd/upload/main.go @@ -50,7 +50,7 @@ func uploadAMI(cmd *cobra.Command, args []string) { // nolint:errcheck defer f.Close() - check(uploader.UploadAndRegister(f, os.Stderr)) + check(uploader.UploadAndRegister(f, 0, os.Stderr)) } func setupCLI() *cobra.Command { diff --git a/bib/data/defs/almalinux-10.yaml b/bib/data/defs/almalinux-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/almalinux-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/almalinux-9.yaml b/bib/data/defs/almalinux-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/almalinux-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/data/defs/aurora-40.yaml b/bib/data/defs/aurora-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/aurora-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/aurora-helium-10.yaml b/bib/data/defs/aurora-helium-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/aurora-helium-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/bazzite-40.yaml b/bib/data/defs/bazzite-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/bazzite-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/bluefin-40.yaml b/bib/data/defs/bluefin-40.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/bluefin-40.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/centos-10.yaml b/bib/data/defs/centos-10.yaml deleted file mode 100644 index dcf78f042..000000000 --- a/bib/data/defs/centos-10.yaml +++ /dev/null @@ -1,93 +0,0 @@ -anaconda-iso: - packages: - - "@hardware-support" - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-img-deps - - anaconda-widgets - - audit - - bind-utils - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - less - - libblockdev-lvm-dbus - - libibverbs - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xrdb - - xz diff --git a/bib/data/defs/centos-9.yaml b/bib/data/defs/centos-9.yaml deleted file mode 100644 index 431642ca7..000000000 --- a/bib/data/defs/centos-9.yaml +++ /dev/null @@ -1,108 +0,0 @@ -anaconda-iso: - # This is the same set as the Fedora one, but without packages not available in CentOS/RHEL: - # atheros-firmware, brcmfmac-firmware, iwlwifi-dvm-firmware, iwlwifi-mvm-firmware, realtek-firmware, rit-meera-new-fonts - packages: - - aajohan-comfortaa-fonts - - abattis-cantarell-fonts - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-env-deps - - anaconda-widgets - - audit - - bind-utils - - bitmap-fangsongti-fonts - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - gdisk - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - khmeros-base-fonts - - less - - libblockdev-lvm-dbus - - libibverbs - - libreport-plugin-bugzilla - - libreport-plugin-reportuploader - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-abyssinica-fonts - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - tigervnc-server-minimal - - tigervnc-server-module - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xorg-x11-drivers - - xorg-x11-fonts-misc - - xorg-x11-server-Xorg - - xorg-x11-xauth - - xrdb - - xz diff --git a/bib/data/defs/fedora-40.yaml b/bib/data/defs/fedora-40.yaml deleted file mode 100644 index c1431a18a..000000000 --- a/bib/data/defs/fedora-40.yaml +++ /dev/null @@ -1,112 +0,0 @@ -anaconda-iso: - packages: - - aajohan-comfortaa-fonts - - abattis-cantarell-fonts - - alsa-firmware - - alsa-tools-firmware - - anaconda - - anaconda-dracut - - anaconda-install-img-deps - - anaconda-widgets - - atheros-firmware - - audit - - bind-utils - - bitmap-fangsongti-fonts - - brcmfmac-firmware - - bzip2 - - cryptsetup - - curl - - dbus-x11 - - dejavu-sans-fonts - - dejavu-sans-mono-fonts - - device-mapper-persistent-data - - dmidecode - - dnf - - dracut-config-generic - - dracut-network - - efibootmgr - - ethtool - - fcoe-utils - - ftp - - gdb-gdbserver - - gdisk - - glibc-all-langpacks - - gnome-kiosk - - google-noto-sans-cjk-ttc-fonts - - grub2-tools - - grub2-tools-extra - - grub2-tools-minimal - - grubby - - gsettings-desktop-schemas - - hdparm - - hexedit - - hostname - - initscripts - - ipmitool - - iwlwifi-dvm-firmware - - iwlwifi-mvm-firmware - - jomolhari-fonts - - kbd - - kbd-misc - - kdump-anaconda-addon - - kernel - - khmeros-base-fonts - - less - - libblockdev-lvm-dbus - - libibverbs - - libreport-plugin-bugzilla - - libreport-plugin-reportuploader - - librsvg2 - - linux-firmware - - lldpad - - lsof - - madan-fonts - - mt-st - - mtr - - net-tools - - nfs-utils - - nm-connection-editor - - nmap-ncat - - nss-tools - - openssh-clients - - openssh-server - - ostree - - pciutils - - perl-interpreter - - pigz - - plymouth - - prefixdevname - - python3-pyatspi - - rdma-core - - realtek-firmware - - rit-meera-new-fonts - - rng-tools - - rpcbind - - rpm-ostree - - rsync - - rsyslog - - selinux-policy-targeted - - sg3_utils - - sil-abyssinica-fonts - - sil-padauk-fonts - - smartmontools - - spice-vdagent - - strace - - systemd - - tar - - tigervnc-server-minimal - - tigervnc-server-module - - udisks2 - - udisks2-iscsi - - usbutils - - vim-minimal - - volume_key - - wget - - xfsdump - - xfsprogs - - xorg-x11-drivers - - xorg-x11-fonts-misc - - xorg-x11-server-Xorg - - xorg-x11-xauth - - xrdb - - xz diff --git a/bib/data/defs/fedora-42.yaml b/bib/data/defs/fedora-42.yaml deleted file mode 120000 index b77da5759..000000000 --- a/bib/data/defs/fedora-42.yaml +++ /dev/null @@ -1 +0,0 @@ -fedora-40.yaml \ No newline at end of file diff --git a/bib/data/defs/heliumos-10.yaml b/bib/data/defs/heliumos-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/heliumos-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/heliumos-9.yaml b/bib/data/defs/heliumos-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/heliumos-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/data/defs/rhel-10.yaml b/bib/data/defs/rhel-10.yaml deleted file mode 120000 index 31ce3eb13..000000000 --- a/bib/data/defs/rhel-10.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-10.yaml \ No newline at end of file diff --git a/bib/data/defs/rhel-9.yaml b/bib/data/defs/rhel-9.yaml deleted file mode 120000 index f09a87265..000000000 --- a/bib/data/defs/rhel-9.yaml +++ /dev/null @@ -1 +0,0 @@ -centos-9.yaml \ No newline at end of file diff --git a/bib/go.mod b/bib/go.mod index 6be4b03ac..dad63d503 100644 --- a/bib/go.mod +++ b/bib/go.mod @@ -8,8 +8,8 @@ require ( github.com/cheggaaa/pb/v3 v3.1.7 github.com/hashicorp/go-version v1.7.0 github.com/osbuild/blueprint v1.13.0 - github.com/osbuild/image-builder-cli v0.0.0-20250331194259-63bb56e12db3 - github.com/osbuild/images v0.191.0 + github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521 + github.com/osbuild/images v0.201.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.10.1 github.com/spf13/pflag v1.0.10 diff --git a/bib/go.sum b/bib/go.sum index f321eff31..7540c03be 100644 --- a/bib/go.sum +++ b/bib/go.sum @@ -243,10 +243,12 @@ github.com/opencontainers/selinux v1.12.0 h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplU github.com/opencontainers/selinux v1.12.0/go.mod h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U= github.com/osbuild/blueprint v1.13.0 h1:blo22+S2ZX5bBmjGcRveoTUrV4Ms7kLfKyb32WyuymA= github.com/osbuild/blueprint v1.13.0/go.mod h1:HPlJzkEl7q5g8hzaGksUk7ifFAy9QFw9LmzhuFOAVm4= -github.com/osbuild/image-builder-cli v0.0.0-20250331194259-63bb56e12db3 h1:M3yYunKH4quwJLQrnFo7dEwCTKorafNC+AUqAo7m5Yo= -github.com/osbuild/image-builder-cli v0.0.0-20250331194259-63bb56e12db3/go.mod h1:0sEmiQiMo1ChSuOoeONN0RmsoZbQEvj2mlO2448gC5w= -github.com/osbuild/images v0.191.0 h1:nhTIAf0JJTEf1gIUsU1II0BVIYBj537BvDpBBXCLYig= -github.com/osbuild/images v0.191.0/go.mod h1:KPiYBF0VrOXz5NAw6Lv4X170uN8wnOHpWuBzKT4jPrU= +github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521 h1:Mo1htXYyEoKrBQD+/RC/kluAWu4+E0oEjPorujVn/K8= +github.com/osbuild/image-builder-cli v0.0.0-20250924085931-15de5139f521/go.mod h1:oTn9T+bV9g/760hM/jX7AV0c4vuVIn6FjAnaVM9RzRo= +github.com/osbuild/images v0.197.0 h1:JSwivw9X2HLgGPq1NG407FrSbyNlfwdACwI0g6kUkjY= +github.com/osbuild/images v0.197.0/go.mod h1:xkXfw5CIy0bVNTNdB6GXiewu/IzBgpofkItDJPAzGA4= +github.com/osbuild/images v0.201.0 h1:AOUslfK+TR0q4WA63+r/GNJIpdg5Ve1vStR72x+4awk= +github.com/osbuild/images v0.201.0/go.mod h1:xkXfw5CIy0bVNTNdB6GXiewu/IzBgpofkItDJPAzGA4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -254,8 +256,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/proglottis/gpgme v0.1.4 h1:3nE7YNA70o2aLjcg63tXMOhPD7bplfE5CBdV+hLAm2M= github.com/proglottis/gpgme v0.1.4/go.mod h1:5LoXMgpE4bttgwwdv9bLs/vwqv3qV7F4glEEZ7mRKrM= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= +github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= diff --git a/bib/internal/distrodef/distrodef.go b/bib/internal/distrodef/distrodef.go deleted file mode 100644 index c121d2910..000000000 --- a/bib/internal/distrodef/distrodef.go +++ /dev/null @@ -1,98 +0,0 @@ -package distrodef - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "golang.org/x/exp/maps" - "gopkg.in/yaml.v3" - - "github.com/hashicorp/go-version" -) - -// ImageDef is a structure containing extra information needed to build an image that cannot be extracted -// from the container image itself. Currently, this is only the list of packages needed for the installer -// ISO. -type ImageDef struct { - Packages []string `yaml:"packages"` -} - -func findDistroDef(defDirs []string, distro, wantedVerStr string) (string, error) { - var bestFuzzyMatch string - - bestFuzzyVer := &version.Version{} - wantedVer, err := version.NewVersion(wantedVerStr) - if err != nil { - return "", fmt.Errorf("cannot parse wanted version string: %w", err) - } - - for _, defDir := range defDirs { - // exact match - matches, err := filepath.Glob(filepath.Join(defDir, fmt.Sprintf("%s-%s.yaml", distro, wantedVerStr))) - if err != nil { - return "", err - } - if len(matches) == 1 { - return matches[0], nil - } - - // fuzzy match - matches, err = filepath.Glob(filepath.Join(defDir, fmt.Sprintf("%s-[0-9]*.yaml", distro))) - if err != nil { - return "", err - } - for _, m := range matches { - baseNoExt := strings.TrimSuffix(filepath.Base(m), ".yaml") - haveVerStr := strings.SplitN(baseNoExt, "-", 2)[1] - // this should never error (because of the glob above) but be defensive - haveVer, err := version.NewVersion(haveVerStr) - if err != nil { - return "", fmt.Errorf("cannot parse distro version from %q: %w", m, err) - } - if wantedVer.Compare(haveVer) >= 0 && haveVer.Compare(bestFuzzyVer) > 0 { - bestFuzzyVer = haveVer - bestFuzzyMatch = m - } - } - } - if bestFuzzyMatch == "" { - return "", fmt.Errorf("could not find def file for distro %s-%s", distro, wantedVerStr) - } - - return bestFuzzyMatch, nil -} - -func loadFile(defDirs []string, distro, ver string) ([]byte, error) { - defPath, err := findDistroDef(defDirs, distro, ver) - if err != nil { - return nil, err - } - - content, err := os.ReadFile(defPath) - if err != nil { - return nil, fmt.Errorf("could not read def file %s for distro %s-%s: %v", defPath, distro, ver, err) - } - return content, nil -} - -// Loads a definition file for a given distro and image type -func LoadImageDef(defDirs []string, distro, ver, it string) (*ImageDef, error) { - data, err := loadFile(defDirs, distro, ver) - if err != nil { - return nil, err - } - - var defs map[string]ImageDef - if err := yaml.Unmarshal(data, &defs); err != nil { - return nil, fmt.Errorf("could not unmarshal def file for distro %s: %v", distro, err) - } - - d, ok := defs[it] - if !ok { - return nil, fmt.Errorf("could not find def for distro %s and image type %s, available types: %s", distro, it, strings.Join(maps.Keys(defs), ", ")) - } - - return &d, nil -} diff --git a/bib/internal/distrodef/distrodef_test.go b/bib/internal/distrodef/distrodef_test.go deleted file mode 100644 index 1b5f86f5f..000000000 --- a/bib/internal/distrodef/distrodef_test.go +++ /dev/null @@ -1,148 +0,0 @@ -package distrodef - -import ( - "os" - "path/filepath" - "slices" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -const testDefLocation = "test_defs" - -func TestLoadSimple(t *testing.T) { - def, err := LoadImageDef([]string{testDefLocation}, "fedoratest", "41", "anaconda-iso") - require.NoError(t, err) - assert.NotEmpty(t, def.Packages) -} - -func TestLoadFuzzy(t *testing.T) { - def, err := LoadImageDef([]string{testDefLocation}, "fedoratest", "99", "anaconda-iso") - require.NoError(t, err) - assert.NotEmpty(t, def.Packages) -} - -func TestLoadUnhappy(t *testing.T) { - _, err := LoadImageDef([]string{testDefLocation}, "lizard", "42", "anaconda-iso") - assert.ErrorContains(t, err, "could not find def file for distro lizard-42") - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "0", "anaconda-iso") - assert.ErrorContains(t, err, "could not find def file for distro fedoratest-0") - - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "41", "anaconda-disk") - assert.ErrorContains(t, err, "could not find def for distro fedoratest and image type anaconda-disk") - - _, err = LoadImageDef([]string{testDefLocation}, "fedoratest", "xxx", "anaconda-disk") - assert.ErrorContains(t, err, `cannot parse wanted version string: `) -} - -const fakeDefFileContent = "anaconda-iso:\n packages: \n - foo\n" - -func makeFakeDistrodefRoot(t *testing.T, defFiles []string) (searchPaths []string) { - tmp := t.TempDir() - - for _, defFile := range defFiles { - p := filepath.Join(tmp, defFile) - err := os.MkdirAll(filepath.Dir(p), 0755) - require.NoError(t, err) - err = os.WriteFile(p, []byte(fakeDefFileContent), 0644) - require.NoError(t, err) - - if !slices.Contains(searchPaths, filepath.Dir(p)) { - searchPaths = append(searchPaths, filepath.Dir(p)) - } - } - - return searchPaths -} - -func TestFindDistroDefMultiDirs(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-39.yaml", - "b/fedora-41.yaml", - "c/fedora-41.yaml", - }) - assert.Equal(t, 3, len(defDirs)) - - def, err := findDistroDef(defDirs, "fedora", "41") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/fedora-41.yaml")) -} - -func TestFindDistroDefMultiDirsIgnoreENOENT(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-41.yaml", - }) - defDirs = append([]string{"/no/such/path"}, defDirs...) - - def, err := findDistroDef(defDirs, "fedora", "41") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "a/fedora-41.yaml")) -} - -func TestFindDistroDefMultiFuzzy(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-39.yaml", - "b/fedora-41.yaml", - "b/b/fedora-42.yaml", - "c/fedora-41.yaml", - }) - // no fedora-99, pick the closest - def, err := findDistroDef(defDirs, "fedora", "99") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/b/fedora-42.yaml")) -} - -func TestFindDistroDefMultiFuzzyMinorReleases(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/centos-8.9.yaml", - "b/centos-7.yaml", - "c/centos-9.1.yaml", - "d/centos-9.1.1.yaml", - "b/b/centos-9.10.yaml", - }) - def, err := findDistroDef(defDirs, "centos", "9.11") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/b/centos-9.10.yaml"), def) -} - -func TestFindDistroDefMultiFuzzyMinorReleasesIsZero(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/centos-9.yaml", - "a/centos-10.yaml", - }) - def, err := findDistroDef(defDirs, "centos", "10.0") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "a/centos-10.yaml"), def) -} - -func TestFindDistroDefMultiFuzzyError(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-40.yaml", - }) - // the best version we have is newer than what is requested, this - // is an error - _, err := findDistroDef(defDirs, "fedora", "30") - assert.ErrorContains(t, err, "could not find def file for distro fedora-30") -} - -func TestFindDistroDefBadNumberIgnoresBadFiles(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-NaN.yaml", - }) - _, err := findDistroDef(defDirs, "fedora", "40") - assert.ErrorContains(t, err, "could not find def file for distro fedora-40") -} - -func TestFindDistroDefCornerCases(t *testing.T) { - defDirs := makeFakeDistrodefRoot(t, []string{ - "a/fedora-.yaml", - "b/fedora-1.yaml", - "c/fedora.yaml", - }) - def, err := findDistroDef(defDirs, "fedora", "2") - assert.NoError(t, err) - assert.True(t, strings.HasSuffix(def, "b/fedora-1.yaml")) -} diff --git a/bib/internal/distrodef/test_defs/fedoratest-41.yaml b/bib/internal/distrodef/test_defs/fedoratest-41.yaml deleted file mode 100644 index c010ec5a7..000000000 --- a/bib/internal/distrodef/test_defs/fedoratest-41.yaml +++ /dev/null @@ -1,4 +0,0 @@ -anaconda-iso: - packages: - - anaconda - - curl diff --git a/test/test_manifest.py b/test/test_manifest.py index 7af333b9c..7171bb0fe 100644 --- a/test/test_manifest.py +++ b/test/test_manifest.py @@ -153,7 +153,8 @@ def test_manifest_cross_arch_check(tmp_path, build_container): "manifest", "--target-arch=aarch64", f"localhost/{container_tag}" ], check=True, capture_output=True, encoding="utf8") - assert 'cannot generate manifest: invalid arch: aarch64' in exc.value.stderr + assert ('cannot generate manifest: requested bootc arch "aarch64" ' + 'does not match available arches [x86_64]') in exc.value.stderr def find_rootfs_type_from(manifest_str):