osbuild2: use source-array-ref for rpm stage inputs

The (new) source-array-ref object is an array of objects, which allows
for input references to have options (metadata) but still maintain their
order when (de)serialised.

Fixes https://github.com/osbuild/osbuild-composer/issues/2577
Related to https://github.com/osbuild/osbuild/pull/1003
This commit is contained in:
Achilleas Koutsou 2022-04-21 20:20:24 +02:00 committed by Tomáš Hozza
parent 26a83262a8
commit 2b2181867f
219 changed files with 803999 additions and 280252 deletions

View file

@ -49,7 +49,7 @@ type RPMStageInput struct {
// Collection of references. Each reference defines a package to be
// installed, with optional metadata.
References RPMStageReferences `json:"references"`
References RPMStageSourceArrayRefs `json:"references"`
}
func (RPMStageInput) isStageInput() {}
@ -181,13 +181,17 @@ func NewRpmStageSourceFilesInputs(specs []rpmmd.PackageSpec) *RPMStageInputs {
return &RPMStageInputs{Packages: stageInput}
}
func pkgRefs(specs []rpmmd.PackageSpec) RPMStageReferences {
refs := make(RPMStageReferences, len(specs))
for _, pkg := range specs {
refs[pkg.Checksum] = &RPMStageSourceOptions{}
func pkgRefs(specs []rpmmd.PackageSpec) RPMStageSourceArrayRefs {
refs := make(RPMStageSourceArrayRefs, len(specs))
for idx, pkg := range specs {
refs[idx] = &RPMStageSourceArrayRef{
ID: pkg.Checksum,
}
if pkg.CheckGPG {
refs[pkg.Checksum].Metadata = &RPMStageReferenceMetadata{
CheckGPG: pkg.CheckGPG,
refs[idx].Options = &RPMStageSourceOptions{
Metadata: &RPMStageReferenceMetadata{
CheckGPG: pkg.CheckGPG,
},
}
}
}

View file

@ -817,11 +817,16 @@ func TestStageV2_UnmarshalJSON(t *testing.T) {
Type: "org.osbuild.rpm",
Inputs: &RPMStageInputs{
Packages: &RPMStageInput{
References: RPMStageReferences{
"checksum1": &RPMStageSourceOptions{},
"checksum2": &RPMStageSourceOptions{
Metadata: &RPMStageReferenceMetadata{
CheckGPG: true,
References: RPMStageSourceArrayRefs{
&RPMStageSourceArrayRef{
ID: "checksum1",
},
&RPMStageSourceArrayRef{
ID: "checksum2",
Options: &RPMStageSourceOptions{
Metadata: &RPMStageReferenceMetadata{
CheckGPG: true,
},
},
},
},
@ -832,7 +837,7 @@ func TestStageV2_UnmarshalJSON(t *testing.T) {
},
},
args: args{
data: []byte(`{"type":"org.osbuild.rpm","inputs":{"packages":{"type":"","origin":"","references":{"checksum1":{},"checksum2":{"metadata":{"rpm.check_gpg":true}}}}},"options":{"gpgkeys":["key1","key2"]}}`),
data: []byte(`{"type":"org.osbuild.rpm","inputs":{"packages":{"type":"","origin":"","references":[{"id":"checksum1"},{"id":"checksum2","options":{"metadata":{"rpm.check_gpg":true}}}]}},"options":{"gpgkeys":["key1","key2"]}}`),
},
},
{

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -11231,7 +11231,6 @@
"/proc": ".M.......",
"/run/cockpit": ".M.......",
"/sys": ".M.......",
"/var/lib/powerpc-utils/smt.state": "..5....T.",
"/var/log/lastlog": ".M....G..",
"/var/spool/anacron/cron.daily": ".M.......",
"/var/spool/anacron/cron.monthly": ".M.......",

View file

@ -11350,7 +11350,6 @@
"/proc": ".M.......",
"/run/cockpit": ".M.......",
"/sys": ".M.......",
"/var/lib/powerpc-utils/smt.state": "..5....T.",
"/var/log/lastlog": ".M....G..",
"/var/spool/anacron/cron.daily": ".M.......",
"/var/spool/anacron/cron.monthly": ".M.......",

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Some files were not shown because too many files have changed in this diff Show more