cloudapi: collect RPMs from v2 result stages
Fix for v1 results: collect RPMs for main stages, not build. Support for v2 results: filter out build stages from stage results, which include stages from all pipelines (flattened).
This commit is contained in:
parent
b46addea5c
commit
51503cc000
1 changed files with 41 additions and 26 deletions
|
|
@ -544,7 +544,6 @@ func (server *Server) ComposeMetadata(w http.ResponseWriter, r *http.Request, id
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var rpms []rpmmd.RPM
|
|
||||||
if status.Finished.IsZero() {
|
if status.Finished.IsZero() {
|
||||||
// job still running: empty response
|
// job still running: empty response
|
||||||
if err := json.NewEncoder(w).Encode(new(ComposeMetadata)); err != nil {
|
if err := json.NewEncoder(w).Encode(new(ComposeMetadata)); err != nil {
|
||||||
|
|
@ -552,7 +551,46 @@ func (server *Server) ComposeMetadata(w http.ResponseWriter, r *http.Request, id
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
rpms = rpmmd.OSBuildStagesToRPMs(result.OSBuildOutput.Build.Stages)
|
|
||||||
|
manifestVer, err := job.Manifest.Version()
|
||||||
|
if err != nil {
|
||||||
|
panic("Failed to parse manifest version: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
var rpms []rpmmd.RPM
|
||||||
|
var ostreeCommitResult *osbuild1.StageResult
|
||||||
|
var coreStages []osbuild1.StageResult
|
||||||
|
switch manifestVer {
|
||||||
|
case "1":
|
||||||
|
coreStages = result.OSBuildOutput.Stages
|
||||||
|
if assemblerResult := result.OSBuildOutput.Assembler; assemblerResult.Name == "org.osbuild.ostree.commit" {
|
||||||
|
ostreeCommitResult = result.OSBuildOutput.Assembler
|
||||||
|
}
|
||||||
|
case "2":
|
||||||
|
// v2 manifest results store all stage output in the main stages
|
||||||
|
// here we filter out the build stages to collect only the RPMs for the
|
||||||
|
// core stages
|
||||||
|
// the filtering relies on two assumptions:
|
||||||
|
// 1. the build pipeline is named "build"
|
||||||
|
// 2. the stage results from v2 manifests when converted to v1 are
|
||||||
|
// named by prefixing the pipeline name
|
||||||
|
for _, stage := range result.OSBuildOutput.Stages {
|
||||||
|
if !strings.HasPrefix(stage.Name, "build") {
|
||||||
|
coreStages = append(coreStages, stage)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// find the ostree.commit stage
|
||||||
|
for idx, stage := range result.OSBuildOutput.Stages {
|
||||||
|
if strings.HasSuffix(stage.Name, "org.osbuild.ostree.commit") {
|
||||||
|
ostreeCommitResult = &result.OSBuildOutput.Stages[idx]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
panic("Unknown manifest version: " + manifestVer)
|
||||||
|
}
|
||||||
|
|
||||||
|
rpms = rpmmd.OSBuildStagesToRPMs(coreStages)
|
||||||
|
|
||||||
packages := make([]PackageMetadata, len(rpms))
|
packages := make([]PackageMetadata, len(rpms))
|
||||||
for idx, rpm := range rpms {
|
for idx, rpm := range rpms {
|
||||||
|
|
@ -568,36 +606,13 @@ func (server *Server) ComposeMetadata(w http.ResponseWriter, r *http.Request, id
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
manifestVer, err := job.Manifest.Version()
|
|
||||||
if err != nil {
|
|
||||||
panic("Failed to parse manifest version: " + err.Error())
|
|
||||||
}
|
|
||||||
|
|
||||||
ostreeCommitResult := new(osbuild1.StageResult)
|
|
||||||
switch manifestVer {
|
|
||||||
case "1":
|
|
||||||
if assemblerResult := result.OSBuildOutput.Assembler; assemblerResult.Name == "org.osbuild.ostree.commit" {
|
|
||||||
ostreeCommitResult = result.OSBuildOutput.Assembler
|
|
||||||
}
|
|
||||||
case "2":
|
|
||||||
// find the ostree.commit stage
|
|
||||||
for idx, stage := range result.OSBuildOutput.Stages {
|
|
||||||
if stage.Name == "org.osbuild.ostree.commit" {
|
|
||||||
ostreeCommitResult = &result.OSBuildOutput.Stages[idx]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
panic("Unknown manifest version: " + manifestVer)
|
|
||||||
}
|
|
||||||
|
|
||||||
resp := new(ComposeMetadata)
|
resp := new(ComposeMetadata)
|
||||||
resp.Packages = &packages
|
resp.Packages = &packages
|
||||||
|
|
||||||
if ostreeCommitResult != nil {
|
if ostreeCommitResult != nil {
|
||||||
commitMetadata, ok := ostreeCommitResult.Metadata.(*osbuild1.OSTreeCommitStageMetadata)
|
commitMetadata, ok := ostreeCommitResult.Metadata.(*osbuild1.OSTreeCommitStageMetadata)
|
||||||
if !ok {
|
if !ok {
|
||||||
panic("Failed to parse ostree commit stage metadata")
|
panic("Failed to convert ostree commit stage metadata")
|
||||||
}
|
}
|
||||||
resp.OstreeCommit = &commitMetadata.Compose.OSTreeCommit
|
resp.OstreeCommit = &commitMetadata.Compose.OSTreeCommit
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue