osbuild2: add support for reading stage metadata
Metadata from stages in the output from osbuild in the v2 schema are stored at the top level of the result structure. Adding the same Metadata types from v1: - org.osbuild.rpm stage - org.osbuild.ostree.commit stage - Raw metadata (for every other stage type)
This commit is contained in:
parent
2212fedae3
commit
1dcaa26966
3 changed files with 85 additions and 5 deletions
|
|
@ -39,3 +39,23 @@ func NewOSTreeCommitStage(options *OSTreeCommitStageOptions, inputs *OSTreeCommi
|
|||
Inputs: inputs,
|
||||
}
|
||||
}
|
||||
|
||||
type OSTreeCommitStageMetadata struct {
|
||||
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() {}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,18 @@ type StageResult struct {
|
|||
Error string `json:"string,omitempty"`
|
||||
}
|
||||
|
||||
type PipelineMetadata map[string]StageMetadata
|
||||
|
||||
type StageMetadata interface {
|
||||
isStageMetadata()
|
||||
}
|
||||
|
||||
// RawStageMetadata is used to store the metadata from a stage that doesn't
|
||||
// define its own structure
|
||||
type RawStageMetadata json.RawMessage
|
||||
|
||||
func (RawStageMetadata) isStageMetadata() {}
|
||||
|
||||
// UnmarshalJSON decodes json-encoded StageResult.
|
||||
//
|
||||
// This method is here only as a workaround for the default value of the
|
||||
|
|
@ -40,9 +52,38 @@ func (sr *StageResult) UnmarshalJSON(data []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
Type string `json:"type"`
|
||||
Success bool `json:"success"`
|
||||
Error json.RawMessage `json:"error"`
|
||||
Log map[string]PipelineResult `json:"log"`
|
||||
func (md *PipelineMetadata) UnmarshalJSON(data []byte) error {
|
||||
var rawPipelineMetadata map[string]json.RawMessage
|
||||
if err := json.Unmarshal(data, &rawPipelineMetadata); err != nil {
|
||||
return err
|
||||
}
|
||||
pmd := make(map[string]StageMetadata)
|
||||
var metadata StageMetadata
|
||||
for name, rawStageData := range rawPipelineMetadata {
|
||||
switch name {
|
||||
case "org.osbuild.rpm":
|
||||
metadata = new(RPMStageMetadata)
|
||||
if err := json.Unmarshal(rawStageData, metadata); err != nil {
|
||||
return err
|
||||
}
|
||||
case "org.osbuild.ostree.commit":
|
||||
metadata = new(OSTreeCommitStageMetadata)
|
||||
if err := json.Unmarshal(rawStageData, metadata); err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
metadata = RawStageMetadata(rawStageData)
|
||||
}
|
||||
pmd[name] = metadata
|
||||
}
|
||||
*md = pmd
|
||||
return nil
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
Type string `json:"type"`
|
||||
Success bool `json:"success"`
|
||||
Error json.RawMessage `json:"error"`
|
||||
Log map[string]PipelineResult `json:"log"`
|
||||
Metadata map[string]PipelineMetadata `json:"metadata"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,3 +51,22 @@ func NewRPMStage(options *RPMStageOptions, inputs *RPMStageInputs) *Stage {
|
|||
Options: options,
|
||||
}
|
||||
}
|
||||
|
||||
// RPMStageMetadata gives the set of packages installed by the RPM stage
|
||||
type RPMStageMetadata struct {
|
||||
Packages []RPMPackageMetadata `json:"packages"`
|
||||
}
|
||||
|
||||
// RPMPackageMetadata contains the metadata extracted from one RPM header
|
||||
type RPMPackageMetadata struct {
|
||||
Name string `json:"name"`
|
||||
Version string `json:"version"`
|
||||
Release string `json:"release"`
|
||||
Epoch *string `json:"epoch"`
|
||||
Arch string `json:"arch"`
|
||||
SigMD5 string `json:"sigmd5"`
|
||||
SigPGP string `json:"sigpgp"`
|
||||
SigGPG string `json:"siggpg"`
|
||||
}
|
||||
|
||||
func (RPMStageMetadata) isStageMetadata() {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue