mirror of
https://github.com/google/go-github.git
synced 2026-10-28 16:34:37 +08:00
220 lines
9.2 KiB
Go
220 lines
9.2 KiB
Go
// Copyright 2026 The go-github 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 github
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
)
|
|
|
|
// DeploymentRuntimeRisk represents the runtime risk of a deployment.
|
|
type DeploymentRuntimeRisk string
|
|
|
|
const (
|
|
DeploymentRuntimeRiskCriticalResource DeploymentRuntimeRisk = "critical-resource"
|
|
DeploymentRuntimeRiskInternetExposed DeploymentRuntimeRisk = "internet-exposed"
|
|
DeploymentRuntimeRiskLateralMovement DeploymentRuntimeRisk = "lateral-movement"
|
|
DeploymentRuntimeRiskSensitiveData DeploymentRuntimeRisk = "sensitive-data"
|
|
)
|
|
|
|
// ArtifactDeploymentRecord represents a GitHub artifact deployment record.
|
|
type ArtifactDeploymentRecord struct {
|
|
ID *int64 `json:"id,omitempty"`
|
|
Digest *string `json:"digest,omitempty"`
|
|
LogicalEnvironment *string `json:"logical_environment,omitempty"`
|
|
PhysicalEnvironment *string `json:"physical_environment,omitempty"`
|
|
Cluster *string `json:"cluster,omitempty"`
|
|
DeploymentName *string `json:"deployment_name,omitempty"`
|
|
Tags map[string]string `json:"tags,omitempty"`
|
|
RuntimeRisks []DeploymentRuntimeRisk `json:"runtime_risks,omitempty"`
|
|
AttestationID *int64 `json:"attestation_id,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
// CreateArtifactDeploymentRequest represents the request body for creating a deployment record.
|
|
type CreateArtifactDeploymentRequest struct {
|
|
Name string `json:"name"`
|
|
Digest string `json:"digest"`
|
|
Version *string `json:"version,omitempty"`
|
|
Status string `json:"status"`
|
|
LogicalEnvironment string `json:"logical_environment"`
|
|
PhysicalEnvironment *string `json:"physical_environment,omitempty"`
|
|
Cluster *string `json:"cluster,omitempty"`
|
|
DeploymentName string `json:"deployment_name"`
|
|
Tags map[string]string `json:"tags,omitempty"`
|
|
RuntimeRisks []DeploymentRuntimeRisk `json:"runtime_risks,omitempty"`
|
|
GithubRepository *string `json:"github_repository,omitempty"`
|
|
}
|
|
|
|
// ArtifactDeploymentResponse represents the response for deployment records.
|
|
type ArtifactDeploymentResponse struct {
|
|
TotalCount *int `json:"total_count,omitempty"`
|
|
DeploymentRecords []*ArtifactDeploymentRecord `json:"deployment_records,omitempty"`
|
|
}
|
|
|
|
// ClusterArtifactDeployment represents a deployment within a cluster record request.
|
|
type ClusterArtifactDeployment struct {
|
|
Name string `json:"name"`
|
|
Digest string `json:"digest"`
|
|
Version *string `json:"version,omitempty"`
|
|
Status string `json:"status"`
|
|
DeploymentName string `json:"deployment_name"`
|
|
Tags map[string]string `json:"tags,omitempty"`
|
|
RuntimeRisks []DeploymentRuntimeRisk `json:"runtime_risks,omitempty"`
|
|
GithubRepository *string `json:"github_repository,omitempty"`
|
|
}
|
|
|
|
// ClusterDeploymentRecordsRequest represents the request body for setting cluster deployment records.
|
|
type ClusterDeploymentRecordsRequest struct {
|
|
LogicalEnvironment string `json:"logical_environment"`
|
|
PhysicalEnvironment *string `json:"physical_environment,omitempty"`
|
|
Deployments []*ClusterArtifactDeployment `json:"deployments"`
|
|
}
|
|
|
|
// ArtifactStorageRecord represents a GitHub artifact storage record.
|
|
type ArtifactStorageRecord struct {
|
|
ID *int64 `json:"id,omitempty"`
|
|
Name *string `json:"name,omitempty"`
|
|
Digest *string `json:"digest,omitempty"`
|
|
ArtifactURL *string `json:"artifact_url,omitempty"`
|
|
RegistryURL *string `json:"registry_url,omitempty"`
|
|
Repository *string `json:"repository,omitempty"`
|
|
Status *string `json:"status,omitempty"`
|
|
CreatedAt *Timestamp `json:"created_at,omitempty"`
|
|
UpdatedAt *Timestamp `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
// CreateArtifactStorageRequest represents the request body for creating a storage record.
|
|
type CreateArtifactStorageRequest struct {
|
|
Name string `json:"name"`
|
|
Digest string `json:"digest"`
|
|
Version *string `json:"version,omitempty"`
|
|
ArtifactURL *string `json:"artifact_url,omitempty"`
|
|
Path *string `json:"path,omitempty"`
|
|
RegistryURL string `json:"registry_url"`
|
|
Repository *string `json:"repository,omitempty"`
|
|
Status *string `json:"status,omitempty"`
|
|
GithubRepository *string `json:"github_repository,omitempty"`
|
|
}
|
|
|
|
// ArtifactStorageResponse represents the response for storage records.
|
|
type ArtifactStorageResponse struct {
|
|
TotalCount *int `json:"total_count,omitempty"`
|
|
StorageRecords []*ArtifactStorageRecord `json:"storage_records,omitempty"`
|
|
}
|
|
|
|
// CreateArtifactDeploymentRecord creates or updates deployment records for an artifact associated with an organization.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-an-artifact-deployment-record
|
|
//
|
|
//meta:operation POST /orgs/{org}/artifacts/metadata/deployment-record
|
|
func (s *OrganizationsService) CreateArtifactDeploymentRecord(ctx context.Context, org string, body CreateArtifactDeploymentRequest) (*ArtifactDeploymentResponse, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/artifacts/metadata/deployment-record", org)
|
|
req, err := s.client.NewRequest(ctx, "POST", u, body)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var v *ArtifactDeploymentResponse
|
|
resp, err := s.client.Do(req, &v)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return v, resp, nil
|
|
}
|
|
|
|
// SetClusterDeploymentRecords sets deployment records for a given cluster.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/orgs/artifact-metadata?apiVersion=2022-11-28#set-cluster-deployment-records
|
|
//
|
|
//meta:operation POST /orgs/{org}/artifacts/metadata/deployment-record/cluster/{cluster}
|
|
func (s *OrganizationsService) SetClusterDeploymentRecords(ctx context.Context, org, cluster string, body ClusterDeploymentRecordsRequest) (*ArtifactDeploymentResponse, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/artifacts/metadata/deployment-record/cluster/%v", org, cluster)
|
|
req, err := s.client.NewRequest(ctx, "POST", u, body)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var v *ArtifactDeploymentResponse
|
|
resp, err := s.client.Do(req, &v)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return v, resp, nil
|
|
}
|
|
|
|
// CreateArtifactStorageRecord creates metadata storage records for artifacts.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/orgs/artifact-metadata?apiVersion=2022-11-28#create-artifact-metadata-storage-record
|
|
//
|
|
//meta:operation POST /orgs/{org}/artifacts/metadata/storage-record
|
|
func (s *OrganizationsService) CreateArtifactStorageRecord(ctx context.Context, org string, body CreateArtifactStorageRequest) (*ArtifactStorageResponse, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/artifacts/metadata/storage-record", org)
|
|
req, err := s.client.NewRequest(ctx, "POST", u, body)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var v *ArtifactStorageResponse
|
|
resp, err := s.client.Do(req, &v)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return v, resp, nil
|
|
}
|
|
|
|
// ListArtifactDeploymentRecords lists deployment records for an artifact metadata.
|
|
//
|
|
// subjectDigest is SHA256 digest of the artifact, in the form sha256:HEX_DIGEST.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/orgs/artifact-metadata?apiVersion=2022-11-28#list-artifact-deployment-records
|
|
//
|
|
//meta:operation GET /orgs/{org}/artifacts/{subject_digest}/metadata/deployment-records
|
|
func (s *OrganizationsService) ListArtifactDeploymentRecords(ctx context.Context, org, subjectDigest string) (*ArtifactDeploymentResponse, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/artifacts/%v/metadata/deployment-records", org, subjectDigest)
|
|
|
|
req, err := s.client.NewRequest(ctx, "GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var v *ArtifactDeploymentResponse
|
|
resp, err := s.client.Do(req, &v)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return v, resp, nil
|
|
}
|
|
|
|
// ListArtifactStorageRecords lists artifact storage records with a given subject digest.
|
|
//
|
|
// subjectDigest is SHA256 digest of the artifact, in the form sha256:HEX_DIGEST.
|
|
//
|
|
// GitHub API docs: https://docs.github.com/rest/orgs/artifact-metadata?apiVersion=2022-11-28#list-artifact-storage-records
|
|
//
|
|
//meta:operation GET /orgs/{org}/artifacts/{subject_digest}/metadata/storage-records
|
|
func (s *OrganizationsService) ListArtifactStorageRecords(ctx context.Context, org, subjectDigest string) (*ArtifactStorageResponse, *Response, error) {
|
|
u := fmt.Sprintf("orgs/%v/artifacts/%v/metadata/storage-records", org, subjectDigest)
|
|
|
|
req, err := s.client.NewRequest(ctx, "GET", u, nil)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
|
|
var v *ArtifactStorageResponse
|
|
resp, err := s.client.Do(req, &v)
|
|
if err != nil {
|
|
return nil, resp, err
|
|
}
|
|
|
|
return v, resp, nil
|
|
}
|