osbuild1: convert stage metadata from v2
While unmarshalling osbuild output and converting from v1 to v2, convert the metadata as well. Added checks to successful parsing and conversion test.
This commit is contained in:
parent
1dcaa26966
commit
b46addea5c
3 changed files with 89 additions and 19 deletions
|
|
@ -23,19 +23,21 @@ func NewOSTreeCommitAssembler(options *OSTreeCommitAssemblerOptions) *Assembler
|
|||
}
|
||||
|
||||
type OSTreeCommitStageMetadata struct {
|
||||
Compose struct {
|
||||
Ref string `json:"ref"`
|
||||
OSTreeNMetadataTotal int `json:"ostree-n-metadata-total"`
|
||||
OSTreeNMetadataWritten int `json:"ostree-n-metadata-written"`
|
||||
OSTreeNContentTotal int `json:"ostree-n-content-total"`
|
||||
OSTreeNContentWritten int `json:"ostree-n-content-written"`
|
||||
OSTreeNCacheHits int `json:"ostree-n-cache-hits"`
|
||||
OSTreeContentBytesWritten int `json:"ostree-content-bytes-written"`
|
||||
OSTreeCommit string `json:"ostree-commit"`
|
||||
OSTreeContentChecksum string `json:"ostree-content-checksum"`
|
||||
OSTreeTimestamp string `json:"ostree-timestamp"`
|
||||
RPMOSTreeInputHash string `json:"rpm-ostree-inputhash"`
|
||||
} `json:"compose"`
|
||||
Compose OSTreeCommitStageMetadataCompose `json:"compose"`
|
||||
}
|
||||
|
||||
type OSTreeCommitStageMetadataCompose struct {
|
||||
Ref string `json:"ref"`
|
||||
OSTreeNMetadataTotal int `json:"ostree-n-metadata-total"`
|
||||
OSTreeNMetadataWritten int `json:"ostree-n-metadata-written"`
|
||||
OSTreeNContentTotal int `json:"ostree-n-content-total"`
|
||||
OSTreeNContentWritten int `json:"ostree-n-content-written"`
|
||||
OSTreeNCacheHits int `json:"ostree-n-cache-hits"`
|
||||
OSTreeContentBytesWritten int `json:"ostree-content-bytes-written"`
|
||||
OSTreeCommit string `json:"ostree-commit"`
|
||||
OSTreeContentChecksum string `json:"ostree-content-checksum"`
|
||||
OSTreeTimestamp string `json:"ostree-timestamp"`
|
||||
RPMOSTreeInputHash string `json:"rpm-ostree-inputhash"`
|
||||
}
|
||||
|
||||
func (OSTreeCommitStageMetadata) isStageMetadata() {}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/osbuild/osbuild-composer/internal/osbuild2"
|
||||
)
|
||||
|
|
@ -56,14 +57,14 @@ func (result *StageResult) UnmarshalJSON(data []byte) error {
|
|||
return err
|
||||
}
|
||||
var metadata StageMetadata
|
||||
switch rawStageResult.Name {
|
||||
case "org.osbuild.rpm":
|
||||
switch {
|
||||
case strings.HasSuffix(rawStageResult.Name, "org.osbuild.rpm"):
|
||||
metadata = new(RPMStageMetadata)
|
||||
err = json.Unmarshal(rawStageResult.Metadata, metadata)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "org.osbuild.ostree.commit":
|
||||
case strings.HasSuffix(rawStageResult.Name, "org.osbuild.ostree.commit"):
|
||||
metadata = new(OSTreeCommitStageMetadata)
|
||||
err = json.Unmarshal(rawStageResult.Metadata, metadata)
|
||||
if err != nil {
|
||||
|
|
@ -230,17 +231,70 @@ func (cr *Result) fromV2(crv2 osbuild2.Result) {
|
|||
return pipelineResults[i].pipelineName < pipelineResults[j].pipelineName
|
||||
})
|
||||
|
||||
v2metadata := crv2.Metadata
|
||||
// convert all stages logs from all pipelines into v1 StageResult objects
|
||||
for _, pr := range pipelineResults {
|
||||
pipelineMetadata := v2metadata[pr.pipelineName]
|
||||
for idx, stage := range pr.stageResults {
|
||||
stageMetadataV2 := pipelineMetadata[stage.Type]
|
||||
stageMetadata, _ := convertStageMetadata(stageMetadataV2, stage.Type)
|
||||
stageResult := StageResult{
|
||||
// Create uniquely identifiable name for the stage:
|
||||
// <pipeline name>:<stage index>-<stage type>
|
||||
Name: fmt.Sprintf("%s:%d-%s", pr.pipelineName, idx, stage.Type),
|
||||
Success: stage.Success,
|
||||
Output: stage.Output,
|
||||
Name: fmt.Sprintf("%s:%d-%s", pr.pipelineName, idx, stage.Type),
|
||||
Success: stage.Success,
|
||||
Output: stage.Output,
|
||||
Metadata: stageMetadata,
|
||||
}
|
||||
cr.Stages = append(cr.Stages, stageResult)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func convertStageMetadata(v2md osbuild2.StageMetadata, stageType string) (StageMetadata, error) {
|
||||
if v2md == nil {
|
||||
return nil, nil
|
||||
}
|
||||
switch metadata := v2md.(type) {
|
||||
case *osbuild2.RPMStageMetadata:
|
||||
packages := make([]RPMPackageMetadata, len(metadata.Packages))
|
||||
for idx, pkg := range metadata.Packages {
|
||||
packages[idx] = RPMPackageMetadata{
|
||||
Name: pkg.Name,
|
||||
Version: pkg.Version,
|
||||
Release: pkg.Release,
|
||||
Epoch: pkg.Epoch,
|
||||
Arch: pkg.Arch,
|
||||
SigMD5: pkg.SigMD5,
|
||||
SigPGP: pkg.SigPGP,
|
||||
SigGPG: pkg.SigGPG,
|
||||
}
|
||||
}
|
||||
return RPMStageMetadata{Packages: packages}, nil
|
||||
case *osbuild2.OSTreeCommitStageMetadata:
|
||||
v2compose := metadata.Compose
|
||||
commitMetadata := OSTreeCommitStageMetadata{
|
||||
Compose: OSTreeCommitStageMetadataCompose{
|
||||
Ref: v2compose.Ref,
|
||||
OSTreeNMetadataTotal: v2compose.OSTreeNMetadataTotal,
|
||||
OSTreeNMetadataWritten: v2compose.OSTreeNMetadataWritten,
|
||||
OSTreeNContentTotal: v2compose.OSTreeNContentTotal,
|
||||
OSTreeNContentWritten: v2compose.OSTreeNContentWritten,
|
||||
OSTreeNCacheHits: v2compose.OSTreeNCacheHits,
|
||||
OSTreeContentBytesWritten: v2compose.OSTreeContentBytesWritten,
|
||||
OSTreeCommit: v2compose.OSTreeCommit,
|
||||
OSTreeContentChecksum: v2compose.OSTreeContentChecksum,
|
||||
OSTreeTimestamp: v2compose.OSTreeTimestamp,
|
||||
RPMOSTreeInputHash: v2compose.RPMOSTreeInputHash,
|
||||
},
|
||||
}
|
||||
return commitMetadata, nil
|
||||
}
|
||||
|
||||
// any other type, return raw
|
||||
raw, err := json.Marshal(v2md)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return RawStageMetadata(raw), nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package osbuild1
|
|||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
|
@ -119,6 +120,19 @@ func TestUnmarshalV2Success(t *testing.T) {
|
|||
assert.Len(t, result.Stages, 16)
|
||||
assert.True(t, result.Stages[15].Success)
|
||||
assert.NotEmpty(t, result.Stages[0].Name)
|
||||
|
||||
// check metadata
|
||||
for _, stage := range result.Stages {
|
||||
if strings.HasSuffix(stage.Name, "org.osbuild.rpm") {
|
||||
rpmMd, convOk := stage.Metadata.(RPMStageMetadata)
|
||||
assert.True(t, convOk)
|
||||
assert.Greater(t, len(rpmMd.Packages), 0)
|
||||
} else if strings.HasSuffix(stage.Name, "org.osbuild.ostree.commit") {
|
||||
commitMd, convOk := stage.Metadata.(OSTreeCommitStageMetadata)
|
||||
assert.True(t, convOk)
|
||||
assert.NotEmpty(t, commitMd.Compose.Ref)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnmarshalV2Failure(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue