Blame internal/osbuild/result.go

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
}