From a8cb35cadfaf2c01fb51f09d3651402eb4c7d69a Mon Sep 17 00:00:00 2001 From: Devashish Date: Wed, 3 Apr 2024 16:34:59 -0400 Subject: [PATCH] Move AddMetadataToBuild to bucket methods --- internal/hcp/registry/hcl.go | 28 ++++----------------------- internal/hcp/registry/json.go | 19 ++++-------------- internal/hcp/registry/types.bucket.go | 23 +++++++++++++++++++--- 3 files changed, 28 insertions(+), 42 deletions(-) diff --git a/internal/hcp/registry/hcl.go b/internal/hcp/registry/hcl.go index 897e2afc0ec..b80c32408f3 100644 --- a/internal/hcp/registry/hcl.go +++ b/internal/hcp/registry/hcl.go @@ -65,18 +65,8 @@ func (h *HCLRegistry) PopulateVersion(ctx context.Context) error { // StartBuild is invoked when one build for the configuration is starting to be processed func (h *HCLRegistry) StartBuild(ctx context.Context, build sdkpacker.Build) error { - name := build.Name() - cb, ok := build.(*packer.CoreBuild) - if ok { - name = cb.Type - } - - metadata := cb.GetMetadata() - err := h.bucket.Version.AddMetadataToBuild(ctx, name, metadata) - if err != nil { - return err - } - return h.bucket.startBuild(ctx, name) + coreBuild := build.(*packer.CoreBuild) + return h.bucket.startBuild(ctx, coreBuild) } // CompleteBuild is invoked when one build for the configuration has finished @@ -86,18 +76,8 @@ func (h *HCLRegistry) CompleteBuild( artifacts []sdkpacker.Artifact, buildErr error, ) ([]sdkpacker.Artifact, error) { - buildName := build.Name() - cb, ok := build.(*packer.CoreBuild) - if ok { - buildName = cb.Type - } - - buildMetadata := cb.GetMetadata() - err := h.bucket.Version.AddMetadataToBuild(ctx, buildName, buildMetadata) - if err != nil { - return nil, err - } - return h.bucket.completeBuild(ctx, buildName, artifacts, buildErr) + coreBuild := build.(*packer.CoreBuild) + return h.bucket.completeBuild(ctx, coreBuild, artifacts, buildErr) } // VersionStatusSummary prints a status report in the UI if the version is not yet done diff --git a/internal/hcp/registry/json.go b/internal/hcp/registry/json.go index 407ea40a062..61142b7e1d5 100644 --- a/internal/hcp/registry/json.go +++ b/internal/hcp/registry/json.go @@ -83,14 +83,8 @@ func (h *JSONRegistry) PopulateVersion(ctx context.Context) error { // StartBuild is invoked when one build for the configuration is starting to be processed func (h *JSONRegistry) StartBuild(ctx context.Context, build sdkpacker.Build) error { - name := build.Name() - - metadata := build.(*packer.CoreBuild).GetMetadata() - err := h.bucket.Version.AddMetadataToBuild(ctx, name, metadata) - if err != nil { - return err - } - return h.bucket.startBuild(ctx, name) + coreBuild := build.(*packer.CoreBuild) + return h.bucket.startBuild(ctx, coreBuild) } // CompleteBuild is invoked when one build for the configuration has finished @@ -100,13 +94,8 @@ func (h *JSONRegistry) CompleteBuild( artifacts []sdkpacker.Artifact, buildErr error, ) ([]sdkpacker.Artifact, error) { - buildName := build.Name() - buildMetadata := build.(*packer.CoreBuild).GetMetadata() - err := h.bucket.Version.AddMetadataToBuild(ctx, buildName, buildMetadata) - if err != nil { - return nil, err - } - return h.bucket.completeBuild(ctx, buildName, artifacts, buildErr) + coreBuild := build.(*packer.CoreBuild) + return h.bucket.completeBuild(ctx, coreBuild, artifacts, buildErr) } // VersionStatusSummary prints a status report in the UI if the version is not yet done diff --git a/internal/hcp/registry/types.bucket.go b/internal/hcp/registry/types.bucket.go index 1fe9dd3b2b3..6d978ed0c33 100644 --- a/internal/hcp/registry/types.bucket.go +++ b/internal/hcp/registry/types.bucket.go @@ -19,6 +19,7 @@ import ( "github.com/hashicorp/packer/hcl2template" hcpPackerAPI "github.com/hashicorp/packer/internal/hcp/api" "github.com/hashicorp/packer/internal/hcp/env" + "github.com/hashicorp/packer/packer" "github.com/mitchellh/mapstructure" "google.golang.org/grpc/codes" ) @@ -554,14 +555,22 @@ func (bucket *Bucket) HeartbeatBuild(ctx context.Context, build string) (func(), }, nil } -func (bucket *Bucket) startBuild(ctx context.Context, buildName string) error { +func (bucket *Bucket) startBuild(ctx context.Context, build *packer.CoreBuild) error { + buildName := build.Name() + + metadata := build.GetMetadata() + err := bucket.Version.AddMetadataToBuild(ctx, buildName, metadata) + if err != nil { + return err + } + if !bucket.IsExpectingBuildForComponent(buildName) { return &ErrBuildAlreadyDone{ Message: "build is already done", } } - err := bucket.UpdateBuildStatus(ctx, buildName, hcpPackerModels.HashicorpCloudPacker20230101BuildStatusBUILDRUNNING) + err = bucket.UpdateBuildStatus(ctx, buildName, hcpPackerModels.HashicorpCloudPacker20230101BuildStatusBUILDRUNNING) if err != nil { return fmt.Errorf("failed to update HCP Packer Build status for %q: %s", buildName, err) } @@ -604,10 +613,18 @@ type NotAHCPArtifactError struct { func (bucket *Bucket) completeBuild( ctx context.Context, - buildName string, + coreBuild *packer.CoreBuild, packerSDKArtifacts []packerSDK.Artifact, buildErr error, ) ([]packerSDK.Artifact, error) { + buildName := coreBuild.Name() + + buildMetadata := coreBuild.GetMetadata() + err := bucket.Version.AddMetadataToBuild(ctx, buildName, buildMetadata) + if err != nil { + return nil, err + } + doneCh, ok := bucket.RunningBuilds[buildName] if !ok { log.Print("[ERROR] done build does not have an entry in the heartbeat table, state will be inconsistent.")