osbuild2: copy Result types from osbuild1
Types, parsing functions and helpers copied from osbuild1 to osbuild2/v1result.go. The metadata handling is simplified: osbuild1 stage metadata for the RPM and ostree-commit stages is identical to the osbuild2 counterparts.
This commit is contained in:
parent
c1956ba6e1
commit
d68a95c533
2 changed files with 75 additions and 28 deletions
|
|
@ -5,8 +5,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
"github.com/osbuild/osbuild-composer/internal/osbuild1"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Result struct {
|
type Result struct {
|
||||||
|
|
@ -95,10 +93,10 @@ func (md *PipelineMetadata) UnmarshalJSON(data []byte) error {
|
||||||
|
|
||||||
func (res *Result) UnmarshalJSON(data []byte) error {
|
func (res *Result) UnmarshalJSON(data []byte) error {
|
||||||
// detect if the input is v1 result
|
// detect if the input is v1 result
|
||||||
if v1Result, err := isV1Result(data); err != nil {
|
if isV1, err := isV1Result(data); err != nil {
|
||||||
return err
|
return err
|
||||||
} else if v1Result {
|
} else if isV1 {
|
||||||
var resv1 osbuild1.Result
|
var resv1 v1Result
|
||||||
if err := json.Unmarshal(data, &resv1); err != nil {
|
if err := json.Unmarshal(data, &resv1); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,74 @@ package osbuild2
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"strings"
|
||||||
"github.com/osbuild/osbuild-composer/internal/osbuild1"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (res *Result) fromV1(resv1 osbuild1.Result) {
|
type v1StageResult struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Options json.RawMessage `json:"options"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Output string `json:"output"`
|
||||||
|
Metadata StageMetadata `json:"metadata"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type v1RawStageResult struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Options json.RawMessage `json:"options"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
Output string `json:"output"`
|
||||||
|
Metadata json.RawMessage `json:"metadata"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type v1BuildResult struct {
|
||||||
|
Stages []v1StageResult `json:"stages"`
|
||||||
|
TreeID string `json:"tree_id"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type v1Result struct {
|
||||||
|
TreeID string `json:"tree_id"`
|
||||||
|
OutputID string `json:"output_id"`
|
||||||
|
Build *v1BuildResult `json:"build"`
|
||||||
|
Stages []v1StageResult `json:"stages"`
|
||||||
|
Assembler *v1StageResult `json:"assembler"`
|
||||||
|
Success bool `json:"success"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (result *v1StageResult) UnmarshalJSON(data []byte) error {
|
||||||
|
var rawStageResult v1RawStageResult
|
||||||
|
err := json.Unmarshal(data, &rawStageResult)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
var metadata StageMetadata
|
||||||
|
switch {
|
||||||
|
case strings.HasSuffix(rawStageResult.Name, "org.osbuild.rpm"):
|
||||||
|
metadata = new(RPMStageMetadata)
|
||||||
|
err = json.Unmarshal(rawStageResult.Metadata, metadata)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case strings.HasSuffix(rawStageResult.Name, "org.osbuild.ostree.commit"):
|
||||||
|
metadata = new(OSTreeCommitStageMetadata)
|
||||||
|
err = json.Unmarshal(rawStageResult.Metadata, metadata)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
metadata = RawStageMetadata(rawStageResult.Metadata)
|
||||||
|
}
|
||||||
|
|
||||||
|
result.Name = rawStageResult.Name
|
||||||
|
result.Options = rawStageResult.Options
|
||||||
|
result.Success = rawStageResult.Success
|
||||||
|
result.Output = rawStageResult.Output
|
||||||
|
result.Metadata = metadata
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (res *Result) fromV1(resv1 v1Result) {
|
||||||
res.Success = resv1.Success
|
res.Success = resv1.Success
|
||||||
res.Type = "result"
|
res.Type = "result"
|
||||||
|
|
||||||
|
|
@ -48,7 +111,7 @@ func (res *Result) fromV1(resv1 osbuild1.Result) {
|
||||||
res.Metadata = metadata
|
res.Metadata = metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertStageResults(v1Stages []osbuild1.StageResult) (PipelineResult, PipelineMetadata) {
|
func convertStageResults(v1Stages []v1StageResult) (PipelineResult, PipelineMetadata) {
|
||||||
result := make([]StageResult, len(v1Stages))
|
result := make([]StageResult, len(v1Stages))
|
||||||
metadata := make(map[string]StageMetadata)
|
metadata := make(map[string]StageMetadata)
|
||||||
for idx, srv1 := range v1Stages {
|
for idx, srv1 := range v1Stages {
|
||||||
|
|
@ -63,7 +126,7 @@ func convertStageResults(v1Stages []osbuild1.StageResult) (PipelineResult, Pipel
|
||||||
return result, metadata
|
return result, metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
func convertStageResult(sr1 *osbuild1.StageResult) (*StageResult, StageMetadata) {
|
func convertStageResult(sr1 *v1StageResult) (*StageResult, StageMetadata) {
|
||||||
sr := &StageResult{
|
sr := &StageResult{
|
||||||
ID: "",
|
ID: "",
|
||||||
Type: sr1.Name,
|
Type: sr1.Name,
|
||||||
|
|
@ -72,24 +135,10 @@ func convertStageResult(sr1 *osbuild1.StageResult) (*StageResult, StageMetadata)
|
||||||
Error: "",
|
Error: "",
|
||||||
}
|
}
|
||||||
|
|
||||||
var md StageMetadata = nil
|
// the two metadata types we care about (RPM and ostree-commit) share the
|
||||||
if sr1.Metadata != nil {
|
// same structure across v1 and v2 result types, so no conversion is
|
||||||
switch md1 := sr1.Metadata.(type) {
|
// necessary
|
||||||
case *osbuild1.RPMStageMetadata:
|
return sr, sr1.Metadata
|
||||||
rpmmd := new(RPMStageMetadata)
|
|
||||||
rpmmd.Packages = make([]RPMPackageMetadata, len(md1.Packages))
|
|
||||||
for idx, pkg := range md1.Packages {
|
|
||||||
rpmmd.Packages[idx] = RPMPackageMetadata(pkg)
|
|
||||||
}
|
|
||||||
md = rpmmd
|
|
||||||
case *osbuild1.OSTreeCommitStageMetadata:
|
|
||||||
commitmd := new(OSTreeCommitStageMetadata)
|
|
||||||
commitmd.Compose = OSTreeCommitStageMetadataCompose(md1.Compose)
|
|
||||||
md = commitmd
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return sr, md
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// isV1Result returns true if data contains a json-encoded osbuild result
|
// isV1Result returns true if data contains a json-encoded osbuild result
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue