diff --git a/apptrust/commands/flags.go b/apptrust/commands/flags.go index 49d6a86..27c7788 100644 --- a/apptrust/commands/flags.go +++ b/apptrust/commands/flags.go @@ -50,7 +50,7 @@ const ( SourceTypeReleaseBundlesFlag = "source-type-release-bundles" SourceTypeApplicationVersionsFlag = "source-type-application-versions" PropertiesFlag = "properties" - DeletePropertyFlag = "delete-property" + DeletePropertiesFlag = "delete-properties" ) // Flag keys mapped to their corresponding components.Flag definition. @@ -83,7 +83,7 @@ var flagsMap = map[string]components.Flag{ SourceTypeReleaseBundlesFlag: components.NewStringFlag(SourceTypeReleaseBundlesFlag, "List of semicolon-separated (;) release bundles in the form of 'name=releaseBundleName1, version=version1; name=releaseBundleName2, version=version2' to be included in the new version.", func(f *components.StringFlag) { f.Mandatory = false }), SourceTypeApplicationVersionsFlag: components.NewStringFlag(SourceTypeApplicationVersionsFlag, "List of semicolon-separated (;) application versions in the form of 'application-key=app1, version=version1; application-key=app2, version=version2' to be included in the new version.", func(f *components.StringFlag) { f.Mandatory = false }), PropertiesFlag: components.NewStringFlag(PropertiesFlag, "Sets or updates custom properties for the application version in format 'key1=value1[,value2,...];key2=value3[,value4,...]'", func(f *components.StringFlag) { f.Mandatory = false }), - DeletePropertyFlag: components.NewStringFlag(DeletePropertyFlag, "Remove a property key and all its values", func(f *components.StringFlag) { f.Mandatory = false }), + DeletePropertiesFlag: components.NewStringFlag(DeletePropertiesFlag, "Remove a property key and all its values", func(f *components.StringFlag) { f.Mandatory = false }), } var commandFlags = map[string][]string{ @@ -142,7 +142,7 @@ var commandFlags = map[string][]string{ serverId, TagFlag, PropertiesFlag, - DeletePropertyFlag, + DeletePropertiesFlag, }, PackageBind: { diff --git a/apptrust/commands/version/update_app_version_cmd.go b/apptrust/commands/version/update_app_version_cmd.go index abebb18..d612443 100644 --- a/apptrust/commands/version/update_app_version_cmd.go +++ b/apptrust/commands/version/update_app_version_cmd.go @@ -101,8 +101,8 @@ func (uv *updateAppVersionCommand) buildRequestPayload(ctx *components.Context) } // Handle delete properties - if ctx.IsFlagSet(commands.DeletePropertyFlag) { - deleteProps := utils.ParseSliceFlag(ctx.GetStringFlagValue(commands.DeletePropertyFlag)) + if ctx.IsFlagSet(commands.DeletePropertiesFlag) { + deleteProps := utils.ParseSliceFlag(ctx.GetStringFlagValue(commands.DeletePropertiesFlag)) request.DeleteProperties = deleteProps } diff --git a/apptrust/commands/version/update_app_version_cmd_test.go b/apptrust/commands/version/update_app_version_cmd_test.go index 948cd26..63e8657 100644 --- a/apptrust/commands/version/update_app_version_cmd_test.go +++ b/apptrust/commands/version/update_app_version_cmd_test.go @@ -132,7 +132,7 @@ func TestUpdateAppVersionCommand_FlagsSuite(t *testing.T) { name: "delete properties only", ctxSetup: func(ctx *components.Context) { ctx.Arguments = []string{"app-key", "1.0.0"} - ctx.AddStringFlag(commands.DeletePropertyFlag, "legacy_param;toBeDeleted") + ctx.AddStringFlag(commands.DeletePropertiesFlag, "legacy_param;toBeDeleted") }, expectsPayload: &model.UpdateAppVersionRequest{ DeleteProperties: []string{"legacy_param", "toBeDeleted"}, @@ -156,7 +156,7 @@ func TestUpdateAppVersionCommand_FlagsSuite(t *testing.T) { ctx.Arguments = []string{"app-key", "1.0.0"} ctx.AddStringFlag(commands.TagFlag, "release/1.2.3") ctx.AddStringFlag(commands.PropertiesFlag, "status=rc,validated") - ctx.AddStringFlag(commands.DeletePropertyFlag, "old_param") + ctx.AddStringFlag(commands.DeletePropertiesFlag, "old_param") }, expectsPayload: &model.UpdateAppVersionRequest{ Tag: "release/1.2.3", diff --git a/apptrust/commands/version/version_utils.go b/apptrust/commands/version/version_utils.go index a14c2b0..27c4c8b 100644 --- a/apptrust/commands/version/version_utils.go +++ b/apptrust/commands/version/version_utils.go @@ -39,13 +39,21 @@ func BuildPromotionParams(ctx *components.Context) (string, []string, []string, } // ParseArtifactProps extracts artifact properties from command context -func ParseArtifactProps(ctx *components.Context) (map[string]string, error) { +func ParseArtifactProps(ctx *components.Context) ([]model.ArtifactProperty, error) { if propsStr := ctx.GetStringFlagValue(commands.PropsFlag); propsStr != "" { - props, err := utils.ParseMapFlag(propsStr) + props, err := utils.ParseListPropertiesFlag(propsStr) if err != nil { return nil, errorutils.CheckErrorf("failed to parse properties: %s", err.Error()) } - return props, nil + + var artifactProps []model.ArtifactProperty + for key, values := range props { + artifactProps = append(artifactProps, model.ArtifactProperty{ + Key: key, + Values: values, + }) + } + return artifactProps, nil } return nil, nil } diff --git a/apptrust/model/promote_app_version_request.go b/apptrust/model/promote_app_version_request.go index 4fe8aba..934f48a 100644 --- a/apptrust/model/promote_app_version_request.go +++ b/apptrust/model/promote_app_version_request.go @@ -15,10 +15,15 @@ var PromotionTypeValues = []string{ } type CommonPromoteAppVersion struct { - PromotionType string `json:"promotion_type,omitempty"` - IncludedRepositoryKeys []string `json:"included_repository_keys,omitempty"` - ExcludedRepositoryKeys []string `json:"excluded_repository_keys,omitempty"` - ArtifactAdditionalProperties map[string]string `json:"artifact_additional_properties,omitempty"` + PromotionType string `json:"promotion_type,omitempty"` + IncludedRepositoryKeys []string `json:"included_repository_keys,omitempty"` + ExcludedRepositoryKeys []string `json:"excluded_repository_keys,omitempty"` + ArtifactAdditionalProperties []ArtifactProperty `json:"artifact_additional_properties,omitempty"` +} + +type ArtifactProperty struct { + Key string `json:"key"` + Values []string `json:"values"` } type PromoteAppVersionRequest struct { diff --git a/apptrust/model/release_app_version_request.go b/apptrust/model/release_app_version_request.go index f0887f2..2547f0b 100644 --- a/apptrust/model/release_app_version_request.go +++ b/apptrust/model/release_app_version_request.go @@ -13,7 +13,7 @@ func NewReleaseAppVersionRequest( promotionType string, includedRepositoryKeys []string, excludedRepositoryKeys []string, - artifactProperties map[string]string, + artifactProperties []ArtifactProperty, ) *ReleaseAppVersionRequest { return &ReleaseAppVersionRequest{ CommonPromoteAppVersion: CommonPromoteAppVersion{ diff --git a/apptrust/service/versions/version_service_test.go b/apptrust/service/versions/version_service_test.go index 7ff2221..82ad9db 100644 --- a/apptrust/service/versions/version_service_test.go +++ b/apptrust/service/versions/version_service_test.go @@ -212,7 +212,7 @@ func TestReleaseAppVersion(t *testing.T) { model.PromotionTypeCopy, []string{"repo1", "repo2"}, []string{"repo3"}, - map[string]string{"key1": "value1"}, + []model.ArtifactProperty{{Key: "key1", Values: []string{"value1"}}}, ), sync: true, expectedEndpoint: "/v1/applications/test-app/versions/1.0.0/release", @@ -229,7 +229,7 @@ func TestReleaseAppVersion(t *testing.T) { model.PromotionTypeCopy, []string{"repo1", "repo2"}, []string{"repo3"}, - map[string]string{"key1": "value1"}, + []model.ArtifactProperty{{Key: "key1", Values: []string{"value1"}}}, ), sync: false, expectedEndpoint: "/v1/applications/test-app/versions/1.0.0/release",