| // Copyright 2022 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package sign |
| |
| import ( |
| "context" |
| |
| "golang.org/x/build/internal/relui/protos" |
| ) |
| |
| // Service is an interface for a release artifact signing service. |
| // |
| // Each call blocks until either the request has been acknowledged or the passed in context has been canceled. |
| // Setting a timeout on the context is recommended. |
| type Service interface { |
| // SignArtifact creates a request to sign a release artifact. |
| // The object URI must be URIs for file(s) on the service private GCS. |
| SignArtifact(ctx context.Context, bt BuildType, objectURI []string) (jobID string, _ error) |
| // ArtifactSigningStatus retrieves the status of an existing signing request, |
| // or an error indicating that the status couldn't be determined. |
| // If the status is completed, objectURI will be populated with the URIs for signed files in GCS. |
| ArtifactSigningStatus(ctx context.Context, jobID string) (_ Status, description string, objectURI []string, _ error) |
| // CancelSigning marks a previous signing request as no longer needed, |
| // possibly allowing resources to be freed sooner than otherwise. |
| CancelSigning(ctx context.Context, jobID string) error |
| } |
| |
| // Status of the signing request. |
| type Status int |
| |
| const ( |
| StatusUnknown Status = iota |
| StatusRunning |
| StatusFailed |
| StatusCompleted |
| StatusNotFound |
| ) |
| |
| // String is the string representation for the signing request status. |
| func (bs Status) String() string { |
| switch bs { |
| case StatusRunning: |
| return "Running" |
| case StatusFailed: |
| return "Failed" |
| case StatusCompleted: |
| return "Completed" |
| case StatusNotFound: |
| return "NotFound" |
| default: |
| return "Unknown" |
| } |
| } |
| |
| // BuildType is the type of build the signing request is for. |
| type BuildType int |
| |
| const ( |
| BuildUnspecified BuildType = iota |
| BuildMacOS |
| BuildWindows |
| BuildGPG |
| ) |
| |
| // proto is the corresponding protobuf definition for the signing request build type. |
| func (bt BuildType) proto() protos.SignArtifactRequest_BuildType { |
| switch bt { |
| case BuildMacOS: |
| return protos.SignArtifactRequest_BUILD_TYPE_MACOS |
| case BuildWindows: |
| return protos.SignArtifactRequest_BUILD_TYPE_WINDOWS |
| case BuildGPG: |
| return protos.SignArtifactRequest_BUILD_TYPE_GPG |
| default: |
| return protos.SignArtifactRequest_BUILD_TYPE_UNSPECIFIED |
| } |
| } |
| |
| func (bt BuildType) String() string { |
| switch bt { |
| case BuildMacOS: |
| return "macOS" |
| case BuildWindows: |
| return "Windows" |
| case BuildGPG: |
| return "GPG" |
| default: |
| return "unspecified" |
| } |
| } |