Skip to content

Commit c34418b

Browse files
committed
Added promote application version command
1 parent a51ca06 commit c34418b

File tree

13 files changed

+265
-155
lines changed

13 files changed

+265
-155
lines changed

CONTRIBUTING.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,8 @@ Finally, execute `go mod tidy` to update the Go module files. Please note that G
117117
### Before submitting the pull request, ensure:
118118

119119
- Your changes are covered by `unit` and `integration` tests. If not, please add new tests.
120-
- The code compiles, by running `go vet ./...`.
121-
- To format the code, by running `go fmt ./...`.
122120
- The documentation covers the changes, if not please add and make changes at [The documentation repository](https://github.com/jfrog/documentation)
121+
- Run the go linter with --fix flag `golangci-lint run --fix`
123122

124123
### When creating the pull request, ensure:
125124

Makefile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ prereq::
4949
GOBIN=${TOOLS_DIR} $(GOCMD) install go.uber.org/mock/[email protected]
5050

5151
build::
52-
go env GOOS GOARCH
53-
go build -ldflags="${LINKERFLAGS}" -gcflags ${COMPILERFLAGS} -o ${BINARY_CLI}/application-cli-plugin main.go
52+
$(GOCMD) env GOOS GOARCH
53+
$(GOCMD) build -ldflags="${LINKERFLAGS}" -gcflags ${COMPILERFLAGS} -o ${BINARY_CLI}/application-cli-plugin main.go
5454

5555

5656
build-install:: build

application/cli/cli.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import (
77
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
88
)
99

10-
const category = "Application Lifecycle"
11-
10+
//const category = "Application Lifecycle"
11+
//
1212
//
1313
//func GetJfrogApplicationCli() components.App {
1414
// appContext := app.NewAppContext()
@@ -32,11 +32,12 @@ func GetJfrogApplicationCli() components.App {
3232
appContext := app.NewAppContext()
3333
appEntity := components.CreateApp(
3434
"app",
35-
"1.0.0",
35+
"1.0.2",
3636
"JFrog Application CLI",
3737
[]components.Command{
3838
system.GetPingCommand(appContext),
3939
version.GetCreateAppVersionCommand(appContext),
40+
version.GetPromoteAppVersionCommand(appContext),
4041
},
4142
)
4243
return appEntity

application/commands/flags.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package commands
22

3-
import pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
4-
import "github.com/jfrog/jfrog-cli-core/v2/plugins/components"
3+
import (
4+
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
5+
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
6+
)
57

68
const (
7-
Ping = "ping"
8-
CreateAppVersion = "create-app-version"
9+
Ping = "ping"
10+
CreateAppVersion = "create-app-version"
11+
PromoteAppVersion = "promote-app-version"
912
)
1013

1114
const (
@@ -22,6 +25,7 @@ const (
2225
PackageRepositoryFlag = "package-repository"
2326
SpecFlag = "spec"
2427
SpecVarsFlag = "spec-vars"
28+
EnvironmentVarsFlag = "env"
2529
)
2630

2731
// Flag keys mapped to their corresponding components.Flag definition.
@@ -40,6 +44,7 @@ var flagsMap = map[string]components.Flag{
4044
PackageRepositoryFlag: components.NewStringFlag(PackageRepositoryFlag, "Package storing repository.", func(f *components.StringFlag) { f.Mandatory = false }),
4145
SpecFlag: components.NewStringFlag(SpecFlag, "A path to the specification file.", func(f *components.StringFlag) { f.Mandatory = false }),
4246
SpecVarsFlag: components.NewStringFlag(SpecVarsFlag, "List of semicolon-separated(;) variables in the form of \"key1=value1;key2=value2;...\" (wrapped by quotes) to be replaced in the File Spec. In the File Spec, the variables should be used as follows: ${key1}.` `", func(f *components.StringFlag) { f.Mandatory = false }),
47+
EnvironmentVarsFlag: components.NewStringFlag(EnvironmentVarsFlag, "Environment.", func(f *components.StringFlag) { f.Mandatory = true }),
4348
}
4449

4550
var commandFlags = map[string][]string{
@@ -57,6 +62,15 @@ var commandFlags = map[string][]string{
5762
SpecFlag,
5863
SpecVarsFlag,
5964
},
65+
PromoteAppVersion: {
66+
url,
67+
user,
68+
accessToken,
69+
ServerId,
70+
ProjectFlag,
71+
ApplicationKeyFlag,
72+
EnvironmentVarsFlag,
73+
},
6074

6175
Ping: {
6276
url,

application/commands/utils/utils.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package utils
22

33
import (
44
"fmt"
5+
56
commonCliUtils "github.com/jfrog/jfrog-cli-core/v2/common/cliutils"
67
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
78
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
89
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
9-
"github.com/jfrog/jfrog-client-go/utils"
1010
"github.com/jfrog/jfrog-client-go/utils/errorutils"
1111
)
1212

@@ -17,12 +17,6 @@ func AssertValueProvided(c *components.Context, fieldName string) error {
1717
return nil
1818
}
1919

20-
func PlatformToApplicationUrls(details *coreConfig.ServerDetails) {
21-
details.ArtifactoryUrl = utils.AddTrailingSlashIfNeeded(details.Url) + "artifactory/"
22-
details.EvidenceUrl = utils.AddTrailingSlashIfNeeded(details.Url) + "evidence/"
23-
details.MetadataUrl = utils.AddTrailingSlashIfNeeded(details.Url) + "metadata/"
24-
}
25-
2620
func ServerDetailsByFlags(ctx *components.Context) (*coreConfig.ServerDetails, error) {
2721
serverDetails, err := pluginsCommon.CreateServerDetailsWithConfigOffer(ctx, true, commonCliUtils.Platform)
2822
if err != nil {

application/commands/version/create_app_version_cmd.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package version
22

33
import (
44
"encoding/json"
5+
56
"github.com/jfrog/jfrog-cli-application/application/app"
67
"github.com/jfrog/jfrog-cli-application/application/commands"
78
"github.com/jfrog/jfrog-cli-application/application/commands/utils"
@@ -98,9 +99,7 @@ func loadPackagesFromSpec(ctx *components.Context, packages *[]model.CreateVersi
9899
}
99100

100101
// add spec packages to the packages list
101-
for _, pkg := range spec.Packages {
102-
*packages = append(*packages, pkg)
103-
}
102+
*packages = append(*packages, spec.Packages...)
104103
return nil
105104
}
106105

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
package version
2+
3+
import (
4+
"github.com/jfrog/jfrog-cli-application/application/app"
5+
"github.com/jfrog/jfrog-cli-application/application/commands"
6+
"github.com/jfrog/jfrog-cli-application/application/commands/utils"
7+
"github.com/jfrog/jfrog-cli-application/application/common"
8+
"github.com/jfrog/jfrog-cli-application/application/model"
9+
"github.com/jfrog/jfrog-cli-application/application/service"
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+
"github.com/jfrog/jfrog-client-go/utils/errorutils"
15+
)
16+
17+
type promoteAppVersionCommand struct {
18+
versionService service.VersionService
19+
serverDetails *coreConfig.ServerDetails
20+
requestPayload *model.PromoteAppVersionRequest
21+
}
22+
23+
func (pv *promoteAppVersionCommand) Run() error {
24+
ctx := &service.Context{ServerDetails: pv.serverDetails}
25+
return pv.versionService.PromoteAppVersion(ctx, pv.requestPayload)
26+
}
27+
28+
func (pv *promoteAppVersionCommand) ServerDetails() (*coreConfig.ServerDetails, error) {
29+
return pv.serverDetails, nil
30+
}
31+
32+
func (pv *promoteAppVersionCommand) CommandName() string {
33+
return commands.PromoteAppVersion
34+
}
35+
36+
func (pv *promoteAppVersionCommand) prepareAndRunCommand(ctx *components.Context) error {
37+
if err := validatePromoteAppVersionContext(ctx); err != nil {
38+
return err
39+
}
40+
serverDetails, err := utils.ServerDetailsByFlags(ctx)
41+
if err != nil {
42+
return err
43+
}
44+
pv.serverDetails = serverDetails
45+
pv.requestPayload, err = pv.buildRequestPayload(ctx)
46+
if errorutils.CheckError(err) != nil {
47+
return err
48+
}
49+
return commonCLiCommands.Exec(pv)
50+
}
51+
52+
func validatePromoteAppVersionContext(ctx *components.Context) error {
53+
if show, err := pluginsCommon.ShowCmdHelpIfNeeded(ctx, ctx.Arguments); show || err != nil {
54+
return err
55+
}
56+
if len(ctx.Arguments) != 1 {
57+
return pluginsCommon.WrongNumberOfArgumentsHandler(ctx)
58+
}
59+
return nil
60+
}
61+
62+
func (pv *promoteAppVersionCommand) buildRequestPayload(ctx *components.Context) (*model.PromoteAppVersionRequest, error) {
63+
return &model.PromoteAppVersionRequest{
64+
ApplicationKey: ctx.GetStringFlagValue(commands.ApplicationKeyFlag),
65+
Version: ctx.Arguments[0],
66+
Environment: ctx.GetStringFlagValue(commands.EnvironmentVarsFlag),
67+
}, nil
68+
}
69+
70+
func GetPromoteAppVersionCommand(appContext app.Context) components.Command {
71+
cmd := &promoteAppVersionCommand{versionService: appContext.GetVersionService()}
72+
return components.Command{
73+
Name: commands.PromoteAppVersion,
74+
Description: "Promote application version",
75+
Category: common.CategoryVersion,
76+
Aliases: []string{"pav"},
77+
Arguments: []components.Argument{
78+
{
79+
Name: "version-name",
80+
Description: "The name of the version",
81+
Optional: false,
82+
},
83+
},
84+
Flags: commands.GetCommandFlags(commands.PromoteAppVersion),
85+
Action: cmd.prepareAndRunCommand,
86+
}
87+
}

application/http/http_client.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package http
33
import (
44
"encoding/json"
55
"fmt"
6+
"net/http"
7+
68
commonCliConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
79
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
810
"github.com/jfrog/jfrog-client-go/auth"
@@ -11,7 +13,6 @@ import (
1113
"github.com/jfrog/jfrog-client-go/utils"
1214
"github.com/jfrog/jfrog-client-go/utils/errorutils"
1315
"github.com/jfrog/jfrog-client-go/utils/io/httputils"
14-
"net/http"
1516
)
1617

1718
const applicationApiPath = "application/api"
@@ -61,7 +62,6 @@ func NewAppHttpClient(serverDetails *commonCliConfig.ServerDetails) (AppHttpClie
6162
SetRetries(serviceConfig.GetHttpRetries()).
6263
SetRetryWaitMilliSecs(serviceConfig.GetHttpRetryWaitMilliSecs()).
6364
Build()
64-
6565
if err != nil {
6666
return nil, err
6767
}
@@ -117,8 +117,7 @@ func (c *appHttpClient) toJsonBytes(payload interface{}) ([]byte, error) {
117117
}
118118

119119
func (c *appHttpClient) getJsonHttpClientDetails() *httputils.HttpClientDetails {
120-
var httpClientDetails httputils.HttpClientDetails
121-
httpClientDetails = c.authDetails.CreateHttpClientDetails()
120+
httpClientDetails := c.authDetails.CreateHttpClientDetails()
122121
httpClientDetails.SetContentTypeApplicationJson()
123122
return &httpClientDetails
124123
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package model
2+
3+
type PromoteAppVersionRequest struct {
4+
ApplicationKey string `json:"application_key"`
5+
Version string `json:"version"`
6+
Environment string `json:"environment"`
7+
}

application/service/system_service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ package service
22

33
import (
44
"fmt"
5+
56
"github.com/jfrog/jfrog-cli-application/application/http"
67
)
78

89
type SystemService interface {
910
Ping(ctx *Context) error
1011
}
1112

12-
type systemService struct {
13-
}
13+
type systemService struct{}
1414

1515
func NewSystemService() SystemService {
1616
return &systemService{}

0 commit comments

Comments
 (0)