From 1667e6e8595a9d4c41b9b6cc78712249c13e96b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hozza?= Date: Fri, 27 Jan 2023 10:21:11 +0100 Subject: [PATCH] osbuild: rework RPM stage inputs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rework the stage to not reimplement `FilesInput` as `RPMStageInput`, but instead use the one common `FilesInput` implementation and its supported references. Signed-off-by: Tomáš Hozza --- internal/osbuild/rpm_stage.go | 92 ++++++----------------------------- 1 file changed, 14 insertions(+), 78 deletions(-) diff --git a/internal/osbuild/rpm_stage.go b/internal/osbuild/rpm_stage.go index 91d5453cb..7fbe138cd 100644 --- a/internal/osbuild/rpm_stage.go +++ b/internal/osbuild/rpm_stage.go @@ -1,6 +1,8 @@ package osbuild import ( + "strings" + "github.com/osbuild/osbuild-composer/internal/rpmmd" ) @@ -42,24 +44,12 @@ func (RPMStageOptions) isStageOptions() {} // RPMStageInputs defines a collection of packages to be installed by the RPM // stage. type RPMStageInputs struct { - // Packages to install - Packages *RPMStageInput `json:"packages"` + Packages *FilesInput `json:"packages"` } func (RPMStageInputs) isStageInputs() {} -// RPMStageInput defines a single input source. -type RPMStageInput struct { - inputCommon - - // Collection of references. Each reference defines a package to be - // installed, with optional metadata. - References RPMStageSourceArrayRefs `json:"references"` -} - -func (RPMStageInput) isStageInput() {} - // RPM package reference metadata type RPMStageReferenceMetadata struct { // This option defaults to `false`, therefore it does not need to be @@ -67,56 +57,7 @@ type RPMStageReferenceMetadata struct { CheckGPG bool `json:"rpm.check_gpg,omitempty"` } -// RPMStageSourceOptions holds the metadata/options for a single RPM package to be -// installed. -type RPMStageSourceOptions struct { - Metadata *RPMStageReferenceMetadata `json:"metadata,omitempty"` -} - -// RPMStageReferences: References to RPM packages defined in JSON as: -// -// "sha256:<...>": { -// "metadata": { -// "rpm.check_gpg": -// } -// }, -// "sha256:<...>": { -// "metadata": { -// "rpm.check_gpg": -// } -// } -// ... -type RPMStageReferences map[string]*RPMStageSourceOptions - -func (RPMStageReferences) isReferences() {} - -// RPMStageSourceArrayRefs: References to RPM packages defined in JSON as an -// array of objects (preserves item order): -// [ -// { -// "id": "sha256:<...>": { -// "options": { -// "rpm.check_gpg": -// } -// } -// }, -// { -// "id": "sha256:<...>": { -// "options": { -// "rpm.check_gpg": -// } -// } -// }, -// ... -// ] -type RPMStageSourceArrayRefs []*RPMStageSourceArrayRef - -func (RPMStageSourceArrayRefs) isReferences() {} - -type RPMStageSourceArrayRef struct { - ID string `json:"id"` - Options *RPMStageSourceOptions `json:"options,omitempty"` -} +func (*RPMStageReferenceMetadata) isFilesInputRefMetadata() {} // NewRPMStage creates a new RPM stage. func NewRPMStage(options *RPMStageOptions, inputs *RPMStageInputs) *Stage { @@ -180,28 +121,23 @@ func RPMPackageMetadataToSignature(pkg RPMPackageMetadata) *string { } func NewRpmStageSourceFilesInputs(specs []rpmmd.PackageSpec) *RPMStageInputs { - stageInput := new(RPMStageInput) - stageInput.Type = "org.osbuild.files" - stageInput.Origin = "org.osbuild.source" - stageInput.References = pkgRefs(specs) - return &RPMStageInputs{Packages: stageInput} + input := NewFilesInput(pkgRefs(specs)) + return &RPMStageInputs{Packages: input} } -func pkgRefs(specs []rpmmd.PackageSpec) RPMStageSourceArrayRefs { - refs := make(RPMStageSourceArrayRefs, len(specs)) +func pkgRefs(specs []rpmmd.PackageSpec) FilesInputRef { + refs := make([]FilesInputSourceArrayRefEntry, len(specs)) for idx, pkg := range specs { - refs[idx] = &RPMStageSourceArrayRef{ - ID: pkg.Checksum, - } + pkgSum := strings.TrimPrefix(pkg.Checksum, "sha256:") + var pkgMetadata FilesInputRefMetadata if pkg.CheckGPG { - refs[idx].Options = &RPMStageSourceOptions{ - Metadata: &RPMStageReferenceMetadata{ - CheckGPG: pkg.CheckGPG, - }, + pkgMetadata = &RPMStageReferenceMetadata{ + CheckGPG: pkg.CheckGPG, } } + refs[idx] = NewFilesInputSourceArrayRefEntry(pkgSum, pkgMetadata) } - return refs + return NewFilesInputSourceArrayRef(refs) } func NewRPMStageOptions(repos []rpmmd.RepoConfig) *RPMStageOptions {