github.com/pluralsh/plural-cli@v0.9.5/pkg/api/artifacts.go (about)

     1  package api
     2  
     3  import (
     4  	"context"
     5  	"os"
     6  	"path/filepath"
     7  
     8  	"github.com/pluralsh/gqlclient"
     9  	"github.com/pluralsh/gqlclient/pkg/utils"
    10  	file "github.com/pluralsh/plural-cli/pkg/utils"
    11  	"sigs.k8s.io/yaml"
    12  )
    13  
    14  type ArtifactAttributes struct {
    15  	Name     string
    16  	Readme   string
    17  	Type     string
    18  	Platform string
    19  	Blob     string
    20  	Arch     string
    21  }
    22  
    23  func (client *client) ListArtifacts(repo string) ([]Artifact, error) {
    24  
    25  	result := make([]Artifact, 0)
    26  
    27  	resp, err := client.pluralClient.ListArtifacts(client.ctx, repo)
    28  	if err != nil {
    29  		return result, err
    30  	}
    31  	for _, artifact := range resp.Repository.Artifacts {
    32  		ar := Artifact{
    33  			Id:     utils.ConvertStringPointer(artifact.ID),
    34  			Name:   utils.ConvertStringPointer(artifact.Name),
    35  			Readme: utils.ConvertStringPointer(artifact.Readme),
    36  			Blob:   utils.ConvertStringPointer(artifact.Blob),
    37  			Sha:    utils.ConvertStringPointer(artifact.Sha),
    38  			Arch:   utils.ConvertStringPointer(artifact.Arch),
    39  		}
    40  		if artifact.Platform != nil {
    41  			ar.Platform = string(*artifact.Platform)
    42  		}
    43  		if artifact.Filesize != nil {
    44  			ar.Filesize = int(*artifact.Filesize)
    45  		}
    46  		result = append(result, ar)
    47  	}
    48  	return result, nil
    49  }
    50  
    51  func (client *client) CreateArtifact(repo string, attrs ArtifactAttributes) (Artifact, error) {
    52  	var artifact Artifact
    53  	fullPath, _ := filepath.Abs(attrs.Blob)
    54  	rf, err := os.Open(fullPath)
    55  	if err != nil {
    56  		return artifact, err
    57  	}
    58  	defer rf.Close()
    59  
    60  	readmePath, _ := filepath.Abs(attrs.Readme)
    61  	readme, err := file.ReadFile(readmePath)
    62  	if err != nil {
    63  		return artifact, err
    64  	}
    65  
    66  	createArtifact, err := client.pluralClient.CreateArtifact(context.Background(), repo, attrs.Name, readme, attrs.Type, attrs.Platform, "blob", &attrs.Arch, gqlclient.WithFiles([]gqlclient.Upload{{
    67  		Field: "blob",
    68  		Name:  attrs.Blob,
    69  		R:     rf,
    70  	}}))
    71  	if err != nil {
    72  		return artifact, err
    73  	}
    74  	artifact.Id = utils.ConvertStringPointer(createArtifact.CreateArtifact.ID)
    75  	artifact.Name = utils.ConvertStringPointer(createArtifact.CreateArtifact.Name)
    76  	artifact.Readme = utils.ConvertStringPointer(createArtifact.CreateArtifact.Readme)
    77  	artifact.Arch = utils.ConvertStringPointer(createArtifact.CreateArtifact.Arch)
    78  	artifact.Sha = utils.ConvertStringPointer(createArtifact.CreateArtifact.Sha)
    79  	if createArtifact.CreateArtifact.Platform != nil {
    80  		platform := createArtifact.CreateArtifact.Platform
    81  		artifact.Platform = string(*platform)
    82  	}
    83  
    84  	return artifact, err
    85  }
    86  
    87  func ConstructArtifactAttributes(marshalled []byte) (ArtifactAttributes, error) {
    88  	var attrs ArtifactAttributes
    89  	err := yaml.Unmarshal(marshalled, &attrs)
    90  	return attrs, err
    91  }