From 72f0f7ffeda1e09ba07bfe23a5838c05fd33ee47 Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Mon, 21 Jun 2021 17:05:28 +0200 Subject: [PATCH] osbuild1: store all stage result metadata Currently, metadata from osbuild is discarded for all stages except RPM. Adding explicit support for the ostree.commit stage/assembler and storing the metadata in a known type. For all other stages, store the metadata directly without parsing. The rawAssemblerResult is removed. Assembler results are treated as stage results. --- internal/osbuild1/ostree_commit_assembler.go | 18 +++++++++++ internal/osbuild1/result.go | 33 +++++++++++--------- internal/osbuild1/result_test.go | 2 +- 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/internal/osbuild1/ostree_commit_assembler.go b/internal/osbuild1/ostree_commit_assembler.go index b9e18d355..f7b0e4b71 100644 --- a/internal/osbuild1/ostree_commit_assembler.go +++ b/internal/osbuild1/ostree_commit_assembler.go @@ -21,3 +21,21 @@ func NewOSTreeCommitAssembler(options *OSTreeCommitAssemblerOptions) *Assembler Options: options, } } + +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"` +} + +func (OSTreeCommitStageMetadata) isStageMetadata() {} diff --git a/internal/osbuild1/result.go b/internal/osbuild1/result.go index 3a17b3c06..89c6a30d2 100644 --- a/internal/osbuild1/result.go +++ b/internal/osbuild1/result.go @@ -9,13 +9,6 @@ import ( "github.com/osbuild/osbuild-composer/internal/osbuild2" ) -type rawAssemblerResult struct { - Name string `json:"name"` - Options json.RawMessage `json:"options"` - Success bool `json:"success"` - Output string `json:"output"` -} - type StageResult struct { Name string `json:"name"` Options json.RawMessage `json:"options"` @@ -29,6 +22,10 @@ type StageMetadata interface { isStageMetadata() } +type RawStageMetadata json.RawMessage + +func (RawStageMetadata) isStageMetadata() {} + type rawStageResult struct { Name string `json:"name"` Options json.RawMessage `json:"options"` @@ -44,12 +41,12 @@ type buildResult struct { } type Result struct { - TreeID string `json:"tree_id"` - OutputID string `json:"output_id"` - Build *buildResult `json:"build"` - Stages []StageResult `json:"stages"` - Assembler *rawAssemblerResult `json:"assembler"` - Success bool `json:"success"` + TreeID string `json:"tree_id"` + OutputID string `json:"output_id"` + Build *buildResult `json:"build"` + Stages []StageResult `json:"stages"` + Assembler *StageResult `json:"assembler"` + Success bool `json:"success"` } func (result *StageResult) UnmarshalJSON(data []byte) error { @@ -66,8 +63,14 @@ func (result *StageResult) UnmarshalJSON(data []byte) error { if err != nil { return err } + case "org.osbuild.ostree.commit": + metadata = new(OSTreeCommitStageMetadata) + err = json.Unmarshal(rawStageResult.Metadata, metadata) + if err != nil { + return err + } default: - metadata = nil + metadata = RawStageMetadata(rawStageResult.Metadata) } result.Name = rawStageResult.Name @@ -196,7 +199,7 @@ func (cr *Result) fromV2(crv2 osbuild2.Result) { cr.Success = crv2.Success // Empty build and assembler results for new types of jobs cr.Build = new(buildResult) - cr.Assembler = new(rawAssemblerResult) + cr.Assembler = new(StageResult) // crv2.Log contains a map of pipelines. Unfortunately, Go doesn't // preserve the order of keys in a map. See: diff --git a/internal/osbuild1/result_test.go b/internal/osbuild1/result_test.go index 474d8bf6c..cdb2cc996 100644 --- a/internal/osbuild1/result_test.go +++ b/internal/osbuild1/result_test.go @@ -170,7 +170,7 @@ func TestWriteFull(t *testing.T) { Success: true, } - testAssembler := rawAssemblerResult{ + testAssembler := StageResult{ Name: "testAssembler", Options: []byte(testOptions), Success: true,