From 39e646ae687b81d0ab96af2c881ab047f6af979d Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Tue, 22 Jun 2021 12:59:43 +0200 Subject: [PATCH] cloudapi: return ostree commit ID with metadata When the assembler (v1) or any stage (v2) has type ostree.commit, retrieve the commit ID (hash) from the osbuild stage metadata and return it with the rest of the metadata (package NEVRAs). --- internal/cloudapi/server.go | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/internal/cloudapi/server.go b/internal/cloudapi/server.go index f19886b21..4cb353405 100644 --- a/internal/cloudapi/server.go +++ b/internal/cloudapi/server.go @@ -19,6 +19,7 @@ import ( "github.com/osbuild/osbuild-composer/internal/blueprint" "github.com/osbuild/osbuild-composer/internal/distro" "github.com/osbuild/osbuild-composer/internal/distroregistry" + "github.com/osbuild/osbuild-composer/internal/osbuild1" "github.com/osbuild/osbuild-composer/internal/ostree" "github.com/osbuild/osbuild-composer/internal/rpmmd" "github.com/osbuild/osbuild-composer/internal/target" @@ -566,9 +567,40 @@ func (server *Server) ComposeMetadata(w http.ResponseWriter, r *http.Request, id Signature: rpm.Signature, } } + + 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.Packages = &packages - resp.OstreeCommit = nil + + if ostreeCommitResult != nil { + commitMetadata, ok := ostreeCommitResult.Metadata.(*osbuild1.OSTreeCommitStageMetadata) + if !ok { + panic("Failed to parse ostree commit stage metadata") + } + resp.OstreeCommit = &commitMetadata.Compose.OSTreeCommit + } if err := json.NewEncoder(w).Encode(resp); err != nil { panic("Failed to write response: " + err.Error())