From 9d2dacbcabd11b4ce0aa25f7e1545eece862fe22 Mon Sep 17 00:00:00 2001 From: Martin Sehnoutka Date: Mon, 23 Mar 2020 10:33:44 +0100 Subject: [PATCH] internal: pass architecture from the APIs to dnf-json The following commit will introduce support for forced architecture in dnf-json. The APIs already have this kind of information, so we can simply pass it to the Depsolve and FetchMetadata functions. --- cmd/osbuild-dnf-json-tests/main_test.go | 2 +- cmd/osbuild-pipeline/main.go | 4 ++-- internal/mocks/rpmmd/rpmmd_mock.go | 4 ++-- internal/rcm/api.go | 8 ++++---- internal/rpmmd/repository.go | 18 ++++++++++-------- internal/weldr/api.go | 10 +++++----- 6 files changed, 24 insertions(+), 22 deletions(-) diff --git a/cmd/osbuild-dnf-json-tests/main_test.go b/cmd/osbuild-dnf-json-tests/main_test.go index 13595af35..b2d2a2152 100644 --- a/cmd/osbuild-dnf-json-tests/main_test.go +++ b/cmd/osbuild-dnf-json-tests/main_test.go @@ -28,7 +28,7 @@ func TestFetchChecksum(t *testing.T) { IgnoreSSL: true, } rpmMetadata := rpmmd.NewRPMMD(path.Join(dir, "rpmmd")) - _, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31") + _, c, err := rpmMetadata.FetchMetadata([]rpmmd.RepoConfig{repoCfg}, "platform:f31", "x86_64") assert.Nilf(t, err, "Failed to fetch checksum: %v", err) assert.NotEqual(t, "", c["repo"], "The checksum is empty") } diff --git a/cmd/osbuild-pipeline/main.go b/cmd/osbuild-pipeline/main.go index 09b87a4ec..66930097b 100644 --- a/cmd/osbuild-pipeline/main.go +++ b/cmd/osbuild-pipeline/main.go @@ -121,13 +121,13 @@ func main() { } rpmmd := rpmmd.NewRPMMD(path.Join(home, ".cache/osbuild-composer/rpmmd")) - packageSpecs, checksums, err := rpmmd.Depsolve(packages, exclude_pkgs, repos[arch.Name()], distro.ModulePlatformID()) + packageSpecs, checksums, err := rpmmd.Depsolve(packages, exclude_pkgs, repos[arch.Name()], distro.ModulePlatformID(), arch.Name()) if err != nil { panic("Could not depsolve: " + err.Error()) } buildPkgs := imageType.BuildPackages() - buildPackageSpecs, _, err := rpmmd.Depsolve(buildPkgs, nil, repos[arch.Name()], distro.ModulePlatformID()) + buildPackageSpecs, _, err := rpmmd.Depsolve(buildPkgs, nil, repos[arch.Name()], distro.ModulePlatformID(), arch.Name()) if err != nil { panic("Could not depsolve build packages: " + err.Error()) } diff --git a/internal/mocks/rpmmd/rpmmd_mock.go b/internal/mocks/rpmmd/rpmmd_mock.go index 35a7689ae..3cf3013a0 100644 --- a/internal/mocks/rpmmd/rpmmd_mock.go +++ b/internal/mocks/rpmmd/rpmmd_mock.go @@ -30,10 +30,10 @@ func NewRPMMDMock(fixture Fixture) rpmmd.RPMMD { return &rpmmdMock{Fixture: fixture} } -func (r *rpmmdMock) FetchMetadata(repos []rpmmd.RepoConfig, modulePlatformID string) (rpmmd.PackageList, map[string]string, error) { +func (r *rpmmdMock) FetchMetadata(repos []rpmmd.RepoConfig, modulePlatformID string, arch string) (rpmmd.PackageList, map[string]string, error) { return r.Fixture.fetchPackageList.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.fetchPackageList.err } -func (r *rpmmdMock) Depsolve(specs, excludeSpecs []string, repos []rpmmd.RepoConfig, modulePlatformID string) ([]rpmmd.PackageSpec, map[string]string, error) { +func (r *rpmmdMock) Depsolve(specs, excludeSpecs []string, repos []rpmmd.RepoConfig, modulePlatformID, arch string) ([]rpmmd.PackageSpec, map[string]string, error) { return r.Fixture.depsolve.ret, r.Fixture.fetchPackageList.checksums, r.Fixture.depsolve.err } diff --git a/internal/rcm/api.go b/internal/rcm/api.go index 106811468..202bd1ded 100644 --- a/internal/rcm/api.go +++ b/internal/rcm/api.go @@ -83,15 +83,15 @@ func notFoundHandler(writer http.ResponseWriter, request *http.Request) { // Depsolves packages and build packages for building an image for a given // distro, in the given architecture -func depsolve(rpmmd rpmmd.RPMMD, distro distro.Distro, imageType distro.ImageType, repos []rpmmd.RepoConfig) ([]rpmmd.PackageSpec, []rpmmd.PackageSpec, error) { +func depsolve(rpmmd rpmmd.RPMMD, distro distro.Distro, imageType distro.ImageType, repos []rpmmd.RepoConfig, arch distro.Arch) ([]rpmmd.PackageSpec, []rpmmd.PackageSpec, error) { specs, excludeSpecs := imageType.BasePackages() - packages, _, err := rpmmd.Depsolve(specs, excludeSpecs, repos, distro.ModulePlatformID()) + packages, _, err := rpmmd.Depsolve(specs, excludeSpecs, repos, distro.ModulePlatformID(), arch.Name()) if err != nil { return nil, nil, fmt.Errorf("RPMMD.Depsolve: %v", err) } specs = imageType.BuildPackages() - buildPackages, _, err := rpmmd.Depsolve(specs, nil, repos, distro.ModulePlatformID()) + buildPackages, _, err := rpmmd.Depsolve(specs, nil, repos, distro.ModulePlatformID(), arch.Name()) if err != nil { return nil, nil, fmt.Errorf("RPMMD.Depsolve: %v", err) } @@ -195,7 +195,7 @@ func (api *API) submit(writer http.ResponseWriter, request *http.Request, _ http }) } - packages, buildPackages, err := depsolve(api.rpmMetadata, distro, imageType, repoConfigs) + packages, buildPackages, err := depsolve(api.rpmMetadata, distro, imageType, repoConfigs, arch) if err != nil { writer.WriteHeader(http.StatusBadRequest) _, err := writer.Write([]byte(err.Error())) diff --git a/internal/rpmmd/repository.go b/internal/rpmmd/repository.go index b71b19f46..983994592 100644 --- a/internal/rpmmd/repository.go +++ b/internal/rpmmd/repository.go @@ -98,12 +98,12 @@ type PackageInfo struct { type RPMMD interface { // FetchMetadata returns all metadata about the repositories we use in the code. Specifically it is a // list of packages and dictionary of checksums of the repositories. - FetchMetadata(repos []RepoConfig, modulePlatformID string) (PackageList, map[string]string, error) + FetchMetadata(repos []RepoConfig, modulePlatformID string, arch string) (PackageList, map[string]string, error) // Depsolve takes a list of required content (specs), explicitly unwanted content (excludeSpecs), list // or repositories, and platform ID for modularity. It returns a list of all packages (with solved // dependencies) that will be installed into the system. - Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID string) ([]PackageSpec, map[string]string, error) + Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID, arch string) ([]PackageSpec, map[string]string, error) } type DNFError struct { @@ -221,12 +221,13 @@ func NewRPMMD(cacheDir string) RPMMD { } } -func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string) (PackageList, map[string]string, error) { +func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string, arch string) (PackageList, map[string]string, error) { var arguments = struct { Repos []RepoConfig `json:"repos"` CacheDir string `json:"cachedir"` ModulePlatformID string `json:"module_platform_id"` - }{repos, r.CacheDir, modulePlatformID} + Arch string `json:"arch"` + }{repos, r.CacheDir, modulePlatformID, arch} var reply struct { Checksums map[string]string `json:"checksums"` Packages PackageList `json:"packages"` @@ -238,14 +239,15 @@ func (r *rpmmdImpl) FetchMetadata(repos []RepoConfig, modulePlatformID string) ( return reply.Packages, reply.Checksums, err } -func (r *rpmmdImpl) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID string) ([]PackageSpec, map[string]string, error) { +func (r *rpmmdImpl) Depsolve(specs, excludeSpecs []string, repos []RepoConfig, modulePlatformID, arch string) ([]PackageSpec, map[string]string, error) { var arguments = struct { PackageSpecs []string `json:"package-specs"` ExcludSpecs []string `json:"exclude-specs"` Repos []RepoConfig `json:"repos"` CacheDir string `json:"cachedir"` ModulePlatformID string `json:"module_platform_id"` - }{specs, excludeSpecs, repos, r.CacheDir, modulePlatformID} + Arch string `json:"arch"` + }{specs, excludeSpecs, repos, r.CacheDir, modulePlatformID, arch} var reply struct { Checksums map[string]string `json:"checksums"` Dependencies []PackageSpec `json:"dependencies"` @@ -306,7 +308,7 @@ func (packages PackageList) ToPackageInfos() []PackageInfo { return results } -func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig, modulePlatformID string) (err error) { - pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, nil, repos, modulePlatformID) +func (pkg *PackageInfo) FillDependencies(rpmmd RPMMD, repos []RepoConfig, modulePlatformID string, arch string) (err error) { + pkg.Dependencies, _, err = rpmmd.Depsolve([]string{pkg.Name}, nil, repos, modulePlatformID, arch) return } diff --git a/internal/weldr/api.go b/internal/weldr/api.go index ce6010550..76627fc76 100644 --- a/internal/weldr/api.go +++ b/internal/weldr/api.go @@ -632,7 +632,7 @@ func (api *API) modulesInfoHandler(writer http.ResponseWriter, request *http.Req if modulesRequested { for i := range packageInfos { - err := packageInfos[i].FillDependencies(api.rpmmd, api.repos, api.distro.ModulePlatformID()) + err := packageInfos[i].FillDependencies(api.rpmmd, api.repos, api.distro.ModulePlatformID(), api.arch.Name()) if err != nil { errors := responseError{ ID: errorId, @@ -663,7 +663,7 @@ func (api *API) projectsDepsolveHandler(writer http.ResponseWriter, request *htt names := strings.Split(params.ByName("projects"), ",") - packages, _, err := api.rpmmd.Depsolve(names, nil, api.repos, api.distro.ModulePlatformID()) + packages, _, err := api.rpmmd.Depsolve(names, nil, api.repos, api.distro.ModulePlatformID(), api.arch.Name()) if err != nil { errors := responseError{ @@ -1963,7 +1963,7 @@ func (api *API) fetchPackageList() (rpmmd.PackageList, error) { repos = append(repos, source.RepoConfig()) } - packages, _, err := api.rpmmd.FetchMetadata(repos, api.distro.ModulePlatformID()) + packages, _, err := api.rpmmd.FetchMetadata(repos, api.distro.ModulePlatformID(), api.arch.Name()) return packages, err } @@ -1999,7 +1999,7 @@ func (api *API) depsolveBlueprint(bp *blueprint.Blueprint, imageType distro.Imag excludeSpecs = append(excludePackages, excludeSpecs...) } - packages, _, err := api.rpmmd.Depsolve(specs, excludeSpecs, repos, api.distro.ModulePlatformID()) + packages, _, err := api.rpmmd.Depsolve(specs, excludeSpecs, repos, api.distro.ModulePlatformID(), api.arch.Name()) if err != nil { return nil, nil, err } @@ -2007,7 +2007,7 @@ func (api *API) depsolveBlueprint(bp *blueprint.Blueprint, imageType distro.Imag buildPackages := []rpmmd.PackageSpec{} if imageType != nil { buildSpecs := imageType.BuildPackages() - buildPackages, _, err = api.rpmmd.Depsolve(buildSpecs, nil, repos, api.distro.ModulePlatformID()) + buildPackages, _, err = api.rpmmd.Depsolve(buildSpecs, nil, repos, api.distro.ModulePlatformID(), api.arch.Name()) if err != nil { return nil, nil, err }