|
Packit Service |
509fd4 |
package osbuild
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
import (
|
|
Packit Service |
509fd4 |
"encoding/json"
|
|
Packit Service |
509fd4 |
"fmt"
|
|
Packit Service |
509fd4 |
"io"
|
|
Packit Service |
509fd4 |
)
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
type rawAssemblerResult struct {
|
|
Packit Service |
509fd4 |
Name string `json:"name"`
|
|
Packit Service |
509fd4 |
Options json.RawMessage `json:"options"`
|
|
Packit Service |
509fd4 |
Success bool `json:"success"`
|
|
Packit Service |
509fd4 |
Output string `json:"output"`
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
type StageResult struct {
|
|
Packit Service |
509fd4 |
Name string `json:"name"`
|
|
Packit Service |
509fd4 |
Options json.RawMessage `json:"options"`
|
|
Packit Service |
509fd4 |
Success bool `json:"success"`
|
|
Packit Service |
509fd4 |
Output string `json:"output"`
|
|
Packit Service |
509fd4 |
Metadata StageMetadata `json:"metadata"`
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
// StageMetadata specify the metadata of a given stage-type.
|
|
Packit Service |
509fd4 |
type StageMetadata interface {
|
|
Packit Service |
509fd4 |
isStageMetadata()
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
type rawStageResult struct {
|
|
Packit Service |
509fd4 |
Name string `json:"name"`
|
|
Packit Service |
509fd4 |
Options json.RawMessage `json:"options"`
|
|
Packit Service |
509fd4 |
Success bool `json:"success"`
|
|
Packit Service |
509fd4 |
Output string `json:"output"`
|
|
Packit Service |
509fd4 |
Metadata json.RawMessage `json:"metadata"`
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
type buildResult struct {
|
|
Packit Service |
509fd4 |
Stages []StageResult `json:"stages"`
|
|
Packit Service |
509fd4 |
TreeID string `json:"tree_id"`
|
|
Packit Service |
509fd4 |
Success bool `json:"success"`
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
type Result struct {
|
|
Packit Service |
509fd4 |
TreeID string `json:"tree_id"`
|
|
Packit Service |
509fd4 |
OutputID string `json:"output_id"`
|
|
Packit Service |
509fd4 |
Build *buildResult `json:"build"`
|
|
Packit Service |
509fd4 |
Stages []StageResult `json:"stages"`
|
|
Packit Service |
509fd4 |
Assembler *rawAssemblerResult `json:"assembler"`
|
|
Packit Service |
509fd4 |
Success bool `json:"success"`
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
func (result *StageResult) UnmarshalJSON(data []byte) error {
|
|
Packit Service |
509fd4 |
var rawStageResult rawStageResult
|
|
Packit Service |
509fd4 |
err := json.Unmarshal(data, &rawStageResult)
|
|
Packit Service |
509fd4 |
if err != nil {
|
|
Packit Service |
509fd4 |
return err
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
var metadata StageMetadata
|
|
Packit Service |
509fd4 |
switch rawStageResult.Name {
|
|
Packit Service |
509fd4 |
case "org.osbuild.rpm":
|
|
Packit Service |
509fd4 |
metadata = new(RPMStageMetadata)
|
|
Packit Service |
509fd4 |
err = json.Unmarshal(rawStageResult.Metadata, metadata)
|
|
Packit Service |
509fd4 |
if err != nil {
|
|
Packit Service |
509fd4 |
return err
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
default:
|
|
Packit Service |
509fd4 |
metadata = nil
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
result.Name = rawStageResult.Name
|
|
Packit Service |
509fd4 |
result.Options = rawStageResult.Options
|
|
Packit Service |
509fd4 |
result.Success = rawStageResult.Success
|
|
Packit Service |
509fd4 |
result.Output = rawStageResult.Output
|
|
Packit Service |
509fd4 |
result.Metadata = metadata
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
return nil
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
func (cr *Result) Write(writer io.Writer) error {
|
|
Packit Service |
509fd4 |
if cr.Build == nil && len(cr.Stages) == 0 && cr.Assembler == nil {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "The compose result is empty.\n")
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if cr.Build != nil {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "Build pipeline:\n")
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
for _, stage := range cr.Build.Stages {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "Stage %s\n", stage.Name)
|
|
Packit Service |
509fd4 |
enc := json.NewEncoder(writer)
|
|
Packit Service |
509fd4 |
enc.SetIndent("", " ")
|
|
Packit Service |
509fd4 |
err := enc.Encode(stage.Options)
|
|
Packit Service |
509fd4 |
if err != nil {
|
|
Packit Service |
509fd4 |
return err
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "\nOutput:\n%s\n", stage.Output)
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if len(cr.Stages) > 0 {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "Stages:\n")
|
|
Packit Service |
509fd4 |
for _, stage := range cr.Stages {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "Stage: %s\n", stage.Name)
|
|
Packit Service |
509fd4 |
enc := json.NewEncoder(writer)
|
|
Packit Service |
509fd4 |
enc.SetIndent("", " ")
|
|
Packit Service |
509fd4 |
err := enc.Encode(stage.Options)
|
|
Packit Service |
509fd4 |
if err != nil {
|
|
Packit Service |
509fd4 |
return err
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "\nOutput:\n%s\n", stage.Output)
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
if cr.Assembler != nil {
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "Assembler %s:\n", cr.Assembler.Name)
|
|
Packit Service |
509fd4 |
enc := json.NewEncoder(writer)
|
|
Packit Service |
509fd4 |
enc.SetIndent("", " ")
|
|
Packit Service |
509fd4 |
err := enc.Encode(cr.Assembler.Options)
|
|
Packit Service |
509fd4 |
if err != nil {
|
|
Packit Service |
509fd4 |
return err
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
fmt.Fprintf(writer, "\nOutput:\n%s\n", cr.Assembler.Output)
|
|
Packit Service |
509fd4 |
}
|
|
Packit Service |
509fd4 |
|
|
Packit Service |
509fd4 |
return nil
|
|
Packit Service |
509fd4 |
}
|