Skip to content

Commit a726609

Browse files
committed
Bind package to application command
1 parent 51809c0 commit a726609

File tree

8 files changed

+161
-15
lines changed

8 files changed

+161
-15
lines changed

apptrust/app/context.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,31 @@ package app
22

33
import (
44
"github.com/jfrog/jfrog-cli-application/apptrust/service/applications"
5+
"github.com/jfrog/jfrog-cli-application/apptrust/service/packages"
56
"github.com/jfrog/jfrog-cli-application/apptrust/service/systems"
67
"github.com/jfrog/jfrog-cli-application/apptrust/service/versions"
78
)
89

910
type Context interface {
1011
GetApplicationService() applications.ApplicationService
1112
GetVersionService() versions.VersionService
13+
GetPackageService() packages.PackageService
1214
GetSystemService() systems.SystemService
1315
GetConfig() interface{}
1416
}
1517

1618
type context struct {
1719
applicationService applications.ApplicationService
1820
versionService versions.VersionService
21+
packageService packages.PackageService
1922
systemService systems.SystemService
2023
}
2124

2225
func NewAppContext() Context {
2326
return &context{
2427
applicationService: applications.NewApplicationService(),
2528
versionService: versions.NewVersionService(),
29+
packageService: packages.NewPackageService(),
2630
systemService: systems.NewSystemService(),
2731
}
2832
}
@@ -35,6 +39,10 @@ func (c *context) GetVersionService() versions.VersionService {
3539
return c.versionService
3640
}
3741

42+
func (c *context) GetPackageService() packages.PackageService {
43+
return c.packageService
44+
}
45+
3846
func (c *context) GetSystemService() systems.SystemService {
3947
return c.systemService
4048
}

apptrust/commands/flags.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const (
1212
CreateAppVersion = "version-create"
1313
PromoteAppVersion = "version-promote"
1414
DeleteAppVersion = "version-delete"
15+
PackageBind = "package-bind"
1516
CreateApp = "app-create"
1617
UpdateApp = "app-update"
1718
DeleteApp = "app-delete"
@@ -98,6 +99,13 @@ var commandFlags = map[string][]string{
9899
serverId,
99100
},
100101

102+
PackageBind: {
103+
url,
104+
user,
105+
accessToken,
106+
serverId,
107+
},
108+
101109
Ping: {
102110
url,
103111
user,
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package packagecmds
2+
3+
import (
4+
"github.com/jfrog/jfrog-cli-application/apptrust/app"
5+
"github.com/jfrog/jfrog-cli-application/apptrust/commands"
6+
"github.com/jfrog/jfrog-cli-application/apptrust/commands/utils"
7+
"github.com/jfrog/jfrog-cli-application/apptrust/model"
8+
"github.com/jfrog/jfrog-cli-application/apptrust/service"
9+
"github.com/jfrog/jfrog-cli-application/apptrust/service/packages"
10+
commonCLiCommands "github.com/jfrog/jfrog-cli-core/v2/common/commands"
11+
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
12+
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
13+
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
14+
)
15+
16+
type bindPackageCommand struct {
17+
packageService packages.PackageService
18+
serverDetails *coreConfig.ServerDetails
19+
requestPayload *model.BindPackageRequest
20+
}
21+
22+
func (bp *bindPackageCommand) Run() error {
23+
ctx, err := service.NewContext(*bp.serverDetails)
24+
if err != nil {
25+
return err
26+
}
27+
return bp.packageService.BindPackage(ctx, bp.requestPayload)
28+
}
29+
30+
func (bp *bindPackageCommand) ServerDetails() (*coreConfig.ServerDetails, error) {
31+
return bp.serverDetails, nil
32+
}
33+
34+
func (bp *bindPackageCommand) CommandName() string {
35+
return commands.PackageBind
36+
}
37+
38+
func (bp *bindPackageCommand) prepareAndRunCommand(ctx *components.Context) error {
39+
if len(ctx.Arguments) != 4 {
40+
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
41+
}
42+
43+
var err error
44+
bp.serverDetails, err = utils.ServerDetailsByFlags(ctx)
45+
if err != nil {
46+
return err
47+
}
48+
bp.requestPayload, err = bp.buildRequestPayload(ctx)
49+
if err != nil {
50+
return err
51+
}
52+
53+
return commonCLiCommands.Exec(bp)
54+
}
55+
56+
func (bp *bindPackageCommand) buildRequestPayload(ctx *components.Context) (*model.BindPackageRequest, error) {
57+
applicationKey := ctx.Arguments[0]
58+
packageType := ctx.Arguments[1]
59+
packageName := ctx.Arguments[2]
60+
packageVersion := ctx.Arguments[3]
61+
62+
return &model.BindPackageRequest{
63+
ApplicationKey: applicationKey,
64+
Type: packageType,
65+
Name: packageName,
66+
Version: packageVersion,
67+
}, nil
68+
}
69+
70+
func GetBindPackageCommand(appContext app.Context) components.Command {
71+
cmd := &bindPackageCommand{packageService: appContext.GetPackageService()}
72+
return components.Command{
73+
Name: commands.PackageBind,
74+
Description: "Bind packages to an application version.",
75+
Aliases: []string{"pb"},
76+
Arguments: []components.Argument{
77+
{
78+
Name: "application-key",
79+
Description: "The key of the application to bind the package to.",
80+
},
81+
{
82+
Name: "package-type",
83+
Description: "Package type (e.g., npm, docker, maven, generic).",
84+
},
85+
{
86+
Name: "package-name",
87+
Description: "Package name.",
88+
},
89+
{
90+
Name: "package-version",
91+
Description: "Package version.",
92+
},
93+
},
94+
Flags: commands.GetCommandFlags(commands.PackageBind),
95+
Action: cmd.prepareAndRunCommand,
96+
}
97+
}

apptrust/commands/version/create_app_version_cmd.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,9 +110,6 @@ func loadPackagesFromSpec(ctx *components.Context, packages *[]model.CreateVersi
110110
}
111111

112112
func validateCreateAppVersionContext(ctx *components.Context) error {
113-
if show, err := pluginsCommon.ShowCmdHelpIfNeeded(ctx, ctx.Arguments); show || err != nil {
114-
return err
115-
}
116113
if len(ctx.Arguments) != 1 {
117114
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
118115
}

apptrust/commands/version/promote_app_version_cmd.go

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ func (pv *promoteAppVersionCommand) CommandName() string {
4141
}
4242

4343
func (pv *promoteAppVersionCommand) prepareAndRunCommand(ctx *components.Context) error {
44-
if err := validatePromoteAppVersionContext(ctx); err != nil {
45-
return err
44+
if len(ctx.Arguments) != 1 {
45+
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
4646
}
4747
serverDetails, err := utils.ServerDetailsByFlags(ctx)
4848
if err != nil {
@@ -56,16 +56,6 @@ func (pv *promoteAppVersionCommand) prepareAndRunCommand(ctx *components.Context
5656
return commonCLiCommands.Exec(pv)
5757
}
5858

59-
func validatePromoteAppVersionContext(ctx *components.Context) error {
60-
if show, err := pluginsCommon.ShowCmdHelpIfNeeded(ctx, ctx.Arguments); show || err != nil {
61-
return err
62-
}
63-
if len(ctx.Arguments) != 1 {
64-
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
65-
}
66-
return nil
67-
}
68-
6959
func (pv *promoteAppVersionCommand) buildRequestPayload(ctx *components.Context) (*model.PromoteAppVersionRequest, error) {
7060
return &model.PromoteAppVersionRequest{
7161
ApplicationKey: ctx.GetStringFlagValue(commands.ApplicationKeyFlag),
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package model
2+
3+
type BindPackageRequest struct {
4+
ApplicationKey string `json:"application_key"`
5+
Type string `json:"type"`
6+
Name string `json:"name"`
7+
Version string `json:"version"`
8+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package packages
2+
3+
//go:generate ${PROJECT_DIR}/scripts/mockgen.sh ${GOFILE}
4+
5+
import (
6+
"fmt"
7+
"net/http"
8+
9+
"github.com/jfrog/jfrog-cli-application/apptrust/model"
10+
"github.com/jfrog/jfrog-cli-application/apptrust/service"
11+
)
12+
13+
type PackageService interface {
14+
BindPackage(ctx service.Context, request *model.BindPackageRequest) error
15+
}
16+
17+
type packageService struct{}
18+
19+
func NewPackageService() PackageService {
20+
return &packageService{}
21+
}
22+
23+
func (ps *packageService) BindPackage(ctx service.Context, request *model.BindPackageRequest) error {
24+
endpoint := "/v1/package"
25+
response, responseBody, err := ctx.GetHttpClient().Post(endpoint, request)
26+
if err != nil {
27+
return err
28+
}
29+
30+
if response.StatusCode != http.StatusCreated {
31+
return fmt.Errorf("failed to bind package. Status code: %d. \n%s",
32+
response.StatusCode, responseBody)
33+
}
34+
35+
return nil
36+
}

cli/cli.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cli
33
import (
44
"github.com/jfrog/jfrog-cli-application/apptrust/app"
55
"github.com/jfrog/jfrog-cli-application/apptrust/commands/application"
6+
packagecmds "github.com/jfrog/jfrog-cli-application/apptrust/commands/package"
67
"github.com/jfrog/jfrog-cli-application/apptrust/commands/system"
78
"github.com/jfrog/jfrog-cli-application/apptrust/commands/version"
89
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
@@ -41,6 +42,7 @@ func GetJfrogCliApptrustApp() components.App {
4142
version.GetCreateAppVersionCommand(appContext),
4243
version.GetPromoteAppVersionCommand(appContext),
4344
version.GetDeleteAppVersionCommand(appContext),
45+
packagecmds.GetBindPackageCommand(appContext),
4446
application.GetCreateAppCommand(appContext),
4547
application.GetUpdateAppCommand(appContext),
4648
application.GetDeleteAppCommand(appContext),

0 commit comments

Comments
 (0)