From 492fa1fc7d4d5136e7ea198a77cf0acebbaaac18 Mon Sep 17 00:00:00 2001 From: Zeke Gabrielse Date: Fri, 4 Oct 2024 15:51:36 -0500 Subject: [PATCH] add support for package keys for new cmd --- cmd/del.go | 1 + cmd/new.go | 31 +++++++++++--- cmd/publish.go | 1 + cmd/tag.go | 1 + cmd/untag.go | 1 + cmd/upload.go | 2 +- cmd/yank.go | 1 + internal/keygenext/package.go | 77 +++++++++++++++++++++++++++++++++++ 8 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 internal/keygenext/package.go diff --git a/cmd/del.go b/cmd/del.go index 43934c5..00f7d28 100644 --- a/cmd/del.go +++ b/cmd/del.go @@ -126,6 +126,7 @@ func delRun(cmd *cobra.Command, args []string) error { PackageID: &delOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/new.go b/cmd/new.go index a69440e..f640eb1 100644 --- a/cmd/new.go +++ b/cmd/new.go @@ -151,11 +151,6 @@ func draftRun(cmd *cobra.Command, args []string) error { desc = &d } - var pkg *string - if p := draftOpts.Package; p != "" { - pkg = &p - } - version, err := semver.NewVersion(draftOpts.Version) if err != nil { return fmt.Errorf(`version "%s" is not acceptable (%s)`, draftOpts.Version, italic(strings.ToLower(err.Error()))) @@ -168,6 +163,31 @@ func draftRun(cmd *cobra.Command, args []string) error { } } + var pkg *string + if id := draftOpts.Package; id != "" { + p := &keygenext.Package{ID: id} + + // get actual package id e.g. id is key ident + if err := p.Get(); err != nil { + if e, ok := err.(*keygenext.Error); ok { + var code string + if e.Code != "" { + code = italic("(" + e.Code + ")") + } + + if e.Source != "" { + return fmt.Errorf("%s: %s %s %s", e.Title, e.Source, e.Detail, code) + } else { + return fmt.Errorf("%s: %s %s", e.Title, e.Detail, code) + } + } + + return err + } + + pkg = &p.ID + } + release := &keygenext.Release{ Name: name, Description: desc, @@ -179,7 +199,6 @@ func draftRun(cmd *cobra.Command, args []string) error { Constraints: constraints, Metadata: metadata, } - if err := release.Create(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/publish.go b/cmd/publish.go index 6f58a90..91e36b9 100644 --- a/cmd/publish.go +++ b/cmd/publish.go @@ -113,6 +113,7 @@ func publishRun(cmd *cobra.Command, args []string) error { PackageID: &publishOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/tag.go b/cmd/tag.go index 8df5d94..5b5b19f 100644 --- a/cmd/tag.go +++ b/cmd/tag.go @@ -122,6 +122,7 @@ func tagRun(cmd *cobra.Command, args []string) error { PackageID: &tagOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/untag.go b/cmd/untag.go index 59b3597..8417ce0 100644 --- a/cmd/untag.go +++ b/cmd/untag.go @@ -113,6 +113,7 @@ func untagRun(cmd *cobra.Command, args []string) error { PackageID: &untagOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/upload.go b/cmd/upload.go index 3ff6ae8..945e7d5 100644 --- a/cmd/upload.go +++ b/cmd/upload.go @@ -259,6 +259,7 @@ func uploadRun(cmd *cobra.Command, args []string) error { PackageID: &uploadOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string @@ -287,7 +288,6 @@ func uploadRun(cmd *cobra.Command, args []string) error { ReleaseID: &release.ID, Metadata: metadata, } - if err := artifact.Create(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/cmd/yank.go b/cmd/yank.go index 2c6c595..7373c0e 100644 --- a/cmd/yank.go +++ b/cmd/yank.go @@ -113,6 +113,7 @@ func yankRun(cmd *cobra.Command, args []string) error { PackageID: &yankOpts.Package, } + // get actual release id w/ filters e.g. package if err := release.Get(); err != nil { if e, ok := err.(*keygenext.Error); ok { var code string diff --git a/internal/keygenext/package.go b/internal/keygenext/package.go new file mode 100644 index 0000000..acd2a5a --- /dev/null +++ b/internal/keygenext/package.go @@ -0,0 +1,77 @@ +package keygenext + +import ( + "github.com/keygen-sh/jsonapi-go" + "github.com/keygen-sh/keygen-go/v2" +) + +type Package struct { + ID string `json:"-"` + Type string `json:"-"` + Name *string `json:"name,omitempty"` + Key *string `json:"key,omitempty"` + Metadata map[string]interface{} `json:"metadata,omitempty"` + ProductID string `json:"-"` +} + +func (p *Package) SetID(id string) error { + p.ID = id + return nil +} + +func (p *Package) SetType(t string) error { + p.Type = t + return nil +} + +func (p *Package) SetData(to func(target interface{}) error) error { + return to(p) +} + +func (p Package) GetID() string { + return p.ID +} + +func (p Package) GetType() string { + return "packages" +} + +func (p Package) GetData() interface{} { + return p +} + +func (p Package) GetRelationships() map[string]interface{} { + relationships := make(map[string]interface{}) + + if p.ProductID != "" { + relationships["product"] = jsonapi.ResourceObjectIdentifier{ + Type: "products", + ID: p.ProductID, + } + } + + if len(relationships) == 0 { + return nil + } + + return relationships +} + +func (p *Package) Get() error { + client := keygen.NewClientWithOptions( + &keygen.ClientOptions{Account: Account, Environment: Environment, Token: Token, PublicKey: PublicKey, UserAgent: UserAgent, APIURL: APIURL}, + ) + + res, err := client.Get("packages/"+p.ID, nil, p) + if err != nil { + if res != nil && len(res.Document.Errors) > 0 { + e := res.Document.Errors[0] + + return &Error{Title: e.Title, Detail: e.Detail, Source: e.Source.Pointer, Code: e.Code, Err: err} + } + + return err + } + + return nil +}