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 }