Skip to content

Commit 97566ea

Browse files
committed
Delete application version command
1 parent 2571da8 commit 97566ea

File tree

5 files changed

+164
-0
lines changed

5 files changed

+164
-0
lines changed

apptrust/commands/flags.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const (
1111
Ping = "ping"
1212
CreateAppVersion = "create-app-version"
1313
PromoteAppVersion = "promote-app-version"
14+
DeleteAppVersion = "delete-app-version"
1415
CreateApp = "create-app"
1516
UpdateApp = "update-app"
1617
DeleteApp = "delete-app"
@@ -90,6 +91,12 @@ var commandFlags = map[string][]string{
9091
ApplicationKeyFlag,
9192
StageVarsFlag,
9293
},
94+
DeleteAppVersion: {
95+
url,
96+
user,
97+
accessToken,
98+
serverId,
99+
},
93100

94101
Ping: {
95102
url,
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package version
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/common"
8+
"github.com/jfrog/jfrog-cli-application/apptrust/service"
9+
"github.com/jfrog/jfrog-cli-application/apptrust/service/versions"
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 deleteAppVersionCommand struct {
17+
versionService versions.VersionService
18+
serverDetails *coreConfig.ServerDetails
19+
applicationKey string
20+
version string
21+
}
22+
23+
func (dv *deleteAppVersionCommand) Run() error {
24+
ctx, err := service.NewContext(*dv.serverDetails)
25+
if err != nil {
26+
return err
27+
}
28+
29+
return dv.versionService.DeleteAppVersion(ctx, dv.applicationKey, dv.version)
30+
}
31+
32+
func (dv *deleteAppVersionCommand) ServerDetails() (*coreConfig.ServerDetails, error) {
33+
return dv.serverDetails, nil
34+
}
35+
36+
func (dv *deleteAppVersionCommand) CommandName() string {
37+
return commands.DeleteAppVersion
38+
}
39+
40+
func (dv *deleteAppVersionCommand) prepareAndRunCommand(ctx *components.Context) error {
41+
if len(ctx.Arguments) != 2 {
42+
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
43+
}
44+
45+
dv.applicationKey = ctx.Arguments[0]
46+
dv.version = ctx.Arguments[1]
47+
48+
var err error
49+
dv.serverDetails, err = utils.ServerDetailsByFlags(ctx)
50+
if err != nil {
51+
return err
52+
}
53+
54+
return commonCLiCommands.Exec(dv)
55+
}
56+
57+
func GetDeleteAppVersionCommand(appContext app.Context) components.Command {
58+
cmd := &deleteAppVersionCommand{
59+
versionService: appContext.GetVersionService(),
60+
}
61+
// TODO: app version commands are planned to be re-organized
62+
return components.Command{
63+
Name: commands.DeleteAppVersion,
64+
Description: "Delete application version",
65+
Category: common.CategoryVersion,
66+
Aliases: []string{"dav"},
67+
Arguments: []components.Argument{
68+
{
69+
Name: "application-key",
70+
Description: "The application key",
71+
Optional: false,
72+
},
73+
{
74+
Name: "version",
75+
Description: "The name of the version to delete",
76+
Optional: false,
77+
},
78+
},
79+
Flags: commands.GetCommandFlags(commands.DeleteAppVersion),
80+
Action: cmd.prepareAndRunCommand,
81+
}
82+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package version
2+
3+
import (
4+
"errors"
5+
"testing"
6+
7+
mockversions "github.com/jfrog/jfrog-cli-application/apptrust/service/versions/mocks"
8+
"github.com/jfrog/jfrog-cli-core/v2/utils/config"
9+
"github.com/stretchr/testify/assert"
10+
"go.uber.org/mock/gomock"
11+
)
12+
13+
func TestDeleteAppVersionCommand_Run(t *testing.T) {
14+
ctrl := gomock.NewController(t)
15+
defer ctrl.Finish()
16+
17+
serverDetails := &config.ServerDetails{Url: "https://example.com"}
18+
applicationKey := "app-key"
19+
version := "1.0.0"
20+
21+
mockVersionService := mockversions.NewMockVersionService(ctrl)
22+
mockVersionService.EXPECT().DeleteAppVersion(gomock.Any(), applicationKey, version).
23+
Return(nil).Times(1)
24+
25+
cmd := &deleteAppVersionCommand{
26+
versionService: mockVersionService,
27+
serverDetails: serverDetails,
28+
applicationKey: applicationKey,
29+
version: version,
30+
}
31+
32+
err := cmd.Run()
33+
assert.NoError(t, err)
34+
}
35+
36+
func TestDeleteAppVersionCommand_Run_Error(t *testing.T) {
37+
ctrl := gomock.NewController(t)
38+
defer ctrl.Finish()
39+
40+
serverDetails := &config.ServerDetails{Url: "https://example.com"}
41+
applicationKey := "app-key"
42+
version := "1.0.0"
43+
44+
mockVersionService := mockversions.NewMockVersionService(ctrl)
45+
mockVersionService.EXPECT().DeleteAppVersion(gomock.Any(), applicationKey, version).
46+
Return(errors.New("delete error")).Times(1)
47+
48+
cmd := &deleteAppVersionCommand{
49+
versionService: mockVersionService,
50+
serverDetails: serverDetails,
51+
applicationKey: applicationKey,
52+
version: version,
53+
}
54+
55+
err := cmd.Run()
56+
assert.Error(t, err)
57+
assert.Equal(t, "delete error", err.Error())
58+
}

apptrust/service/versions/version_service.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
type VersionService interface {
1414
CreateAppVersion(ctx service.Context, request *model.CreateAppVersionRequest) error
1515
PromoteAppVersion(ctx service.Context, payload *model.PromoteAppVersionRequest) error
16+
DeleteAppVersion(ctx service.Context, applicationKey string, version string) error
1617
}
1718

1819
type versionService struct{}
@@ -48,3 +49,18 @@ func (vs *versionService) PromoteAppVersion(ctx service.Context, payload *model.
4849

4950
return nil
5051
}
52+
53+
func (vs *versionService) DeleteAppVersion(ctx service.Context, applicationKey string, version string) error {
54+
url := fmt.Sprintf("/v1/applications/%s/versions/%s", applicationKey, version)
55+
response, responseBody, err := ctx.GetHttpClient().Delete(url)
56+
if err != nil {
57+
return err
58+
}
59+
60+
if response.StatusCode != 204 {
61+
return fmt.Errorf("failed to delete app version. Status code: %d.\n%s",
62+
response.StatusCode, responseBody)
63+
}
64+
65+
return nil
66+
}

cli/cli.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ func GetJfrogCliApptrustApp() components.App {
4040
system.GetPingCommand(appContext),
4141
version.GetCreateAppVersionCommand(appContext),
4242
version.GetPromoteAppVersionCommand(appContext),
43+
version.GetDeleteAppVersionCommand(appContext),
4344
application.GetCreateAppCommand(appContext),
4445
application.GetUpdateAppCommand(appContext),
4546
application.GetDeleteAppCommand(appContext),

0 commit comments

Comments
 (0)