You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
packer/internal/hcp/api/service_build.go

121 lines
3.8 KiB

package api
import (
"context"
"fmt"
hcpPackerAPI "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/client/packer_service"
hcpPackerModels "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/stable/2023-01-01/models"
"github.com/hashicorp/packer/packer"
)
func (c *Client) CreateBuild(
ctx context.Context, bucketName, runUUID, fingerprint, componentType string,
buildStatus hcpPackerModels.HashicorpCloudPacker20230101BuildStatus,
) (*hcpPackerAPI.PackerServiceCreateBuildOK, error) {
params := hcpPackerAPI.NewPackerServiceCreateBuildParamsWithContext(ctx)
params.LocationOrganizationID = c.OrganizationID
params.LocationProjectID = c.ProjectID
params.BucketName = bucketName
params.Fingerprint = fingerprint
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101CreateBuildBody{
ComponentType: componentType,
PackerRunUUID: runUUID,
Status: &buildStatus,
}
return c.Packer.PackerServiceCreateBuild(params, nil)
}
// ListBuilds queries a Version on HCP Packer registry for all of it's associated builds.
// Currently, all builds are returned regardless of status.
func (c *Client) ListBuilds(
ctx context.Context, bucketName, fingerprint string,
) ([]*hcpPackerModels.HashicorpCloudPacker20230101Build, error) {
params := hcpPackerAPI.NewPackerServiceListBuildsParamsWithContext(ctx)
params.LocationOrganizationID = c.OrganizationID
params.LocationProjectID = c.ProjectID
params.BucketName = bucketName
params.Fingerprint = fingerprint
resp, err := c.Packer.PackerServiceListBuilds(params, nil)
if err != nil {
return []*hcpPackerModels.HashicorpCloudPacker20230101Build{}, err
}
return resp.Payload.Builds, nil
}
// UpdateBuild updates a single build in a version with the incoming input data.
func (c *Client) UpdateBuild(
ctx context.Context,
bucketName, fingerprint string,
buildID, runUUID, platform, sourceExternalIdentifier string,
parentVersionID string,
parentChannelID string,
buildLabels map[string]string,
buildStatus hcpPackerModels.HashicorpCloudPacker20230101BuildStatus,
artifacts []*hcpPackerModels.HashicorpCloudPacker20230101ArtifactCreateBody,
metadata *hcpPackerModels.HashicorpCloudPacker20230101BuildMetadata,
) (string, error) {
params := hcpPackerAPI.NewPackerServiceUpdateBuildParamsWithContext(ctx)
params.BuildID = buildID
params.LocationOrganizationID = c.OrganizationID
params.LocationProjectID = c.ProjectID
params.BucketName = bucketName
params.Fingerprint = fingerprint
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UpdateBuildBody{
Artifacts: artifacts,
Labels: buildLabels,
PackerRunUUID: runUUID,
ParentChannelID: parentChannelID,
ParentVersionID: parentVersionID,
Platform: platform,
SourceExternalIdentifier: sourceExternalIdentifier,
Status: &buildStatus,
Metadata: metadata,
}
resp, err := c.Packer.PackerServiceUpdateBuild(params, nil)
if err != nil {
return "", err
}
if resp == nil {
return "", fmt.Errorf(
"something went wrong retrieving the build %s from bucket %s", buildID, bucketName,
)
}
return resp.Payload.Build.ID, nil
}
func (c *Client) UploadSbom(
ctx context.Context,
bucketName, fingerprint string,
buildID string,
sbom packer.SBOM,
) error {
params := hcpPackerAPI.NewPackerServiceUploadSbomParamsWithContext(ctx)
params.BuildID = buildID
params.LocationOrganizationID = c.OrganizationID
params.LocationProjectID = c.ProjectID
params.BucketName = bucketName
params.Fingerprint = fingerprint
params.Body = &hcpPackerModels.HashicorpCloudPacker20230101UploadSbomBody{
CompressedSbom: sbom.CompressedData,
Format: &sbom.Format,
Name: sbom.Name,
}
_, err := c.Packer.PackerServiceUploadSbom(params, nil)
return err
}