From 5ca3240865abce6e6af0d0fd59bf38b74447064d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Oct 2026 09:08:00 +0000 Subject: [PATCH 1/3] chore(deps): bump github.com/stackitcloud/stackit-sdk-go/services/iaas Bumps [github.com/stackitcloud/stackit-sdk-go/services/iaas](https://github.com/stackitcloud/stackit-sdk-go) from 1.14.1 to 1.14.5. - [Release notes](https://github.com/stackitcloud/stackit-sdk-go/releases) - [Changelog](https://github.com/stackitcloud/stackit-sdk-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/stackitcloud/stackit-sdk-go/compare/services/cdn/v1.14.1...services/iaas/v1.14.5) --- updated-dependencies: - dependency-name: github.com/stackitcloud/stackit-sdk-go/services/iaas dependency-version: 1.14.5 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index acc55cbb5..5994ee430 100644 --- a/go.mod +++ b/go.mod @@ -24,13 +24,13 @@ require ( github.com/stackitcloud/stackit-sdk-go/services/dns v0.23.1 github.com/stackitcloud/stackit-sdk-go/services/edge v0.13.2 github.com/stackitcloud/stackit-sdk-go/services/git v0.14.1 - github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.1 + github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.5 github.com/stackitcloud/stackit-sdk-go/services/intake v0.11.2 github.com/stackitcloud/stackit-sdk-go/services/logs v0.10.2 github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.12.2 github.com/stackitcloud/stackit-sdk-go/services/opensearch v1.3.1 github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.15.0 - github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.24.2 + github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.26.0 github.com/stackitcloud/stackit-sdk-go/services/runcommand v1.10.2 github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.19.1 github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.7.1 diff --git a/go.sum b/go.sum index 704aeb9ac..ec490b0de 100644 --- a/go.sum +++ b/go.sum @@ -626,8 +626,8 @@ github.com/stackitcloud/stackit-sdk-go/services/edge v0.13.2 h1:UDkXmgOAlP3y/u7F github.com/stackitcloud/stackit-sdk-go/services/edge v0.13.2/go.mod h1:hlUcPvOgH/CzZqH7u4SwV81qiismCVAtvw5pTAf6si4= github.com/stackitcloud/stackit-sdk-go/services/git v0.14.1 h1:7R5peSRer3Y83mfB6wcdCP0vhEjsq4myUdVhl24q6to= github.com/stackitcloud/stackit-sdk-go/services/git v0.14.1/go.mod h1:kz2pl17t9MNQx0+fNXg10ZAVfjmvOtsHB7VlAzu/Io8= -github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.1 h1:P8XhOi8TLA7NbLHhxU8dCJjgQpha/65agos3pI59+vw= -github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.1/go.mod h1:/QpOsaCOQjwGgQqG8y9xXqryp25AfkorPjInX9xIeOU= +github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.5 h1:CVRo4/hCy6vLlh6LQjQikTDnh/0KF43nRhKsiicxyXc= +github.com/stackitcloud/stackit-sdk-go/services/iaas v1.14.5/go.mod h1:oJmNZY04vvjrQI+y91ZZWOQiCAREcCldkh6cib+YtP0= github.com/stackitcloud/stackit-sdk-go/services/intake v0.11.2 h1:wC0J5fHffmbPLzsqjQ08P9Jb10/BbJUm45TSNfAm8jc= github.com/stackitcloud/stackit-sdk-go/services/intake v0.11.2/go.mod h1:WIgF8d0xz2dIf95k1lMIGCBoyDhr2/AFJFEdnWB8tTo= github.com/stackitcloud/stackit-sdk-go/services/kms v1.13.1 h1:iEPerniBpji6dGiB31p1WAUxgBf9VBIL9gKocfbBqW8= @@ -654,8 +654,8 @@ github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v1.3.1 h1:6t+EJTR9HOFZG github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v1.3.1/go.mod h1:oGcpMIs2H/ldTQlTkYJUY4ZaVNi3MMRSMz0XpLDSKcU= github.com/stackitcloud/stackit-sdk-go/services/redis v1.4.1 h1:s3mXo6FGNEeMWqVPq7yaDgcOakEejRP7X9l7OaK7PEE= github.com/stackitcloud/stackit-sdk-go/services/redis v1.4.1/go.mod h1:6ihYZA22kityLgM0Pp7qROOomcZeUV0OsayOrd5vVe4= -github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.24.2 h1:4UxxJmCSCwV8q4bT4G+D1JH8F9Gm6BKaLGixX5DVcvI= -github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.24.2/go.mod h1:NEz3f+GV5G++BE9/MmZCsXJyCih7jtg0pZuSyG2sLEs= +github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.26.0 h1:TzmBTja200jx6An39UPYBZPvZvLFgk3g1S0XZ1vDeBI= +github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.26.0/go.mod h1:Y5EM8b9qe/+AKI2LJoFvI0PzkyHO5RiW8nQuQaaNaFA= github.com/stackitcloud/stackit-sdk-go/services/runcommand v1.10.2 h1:YpTj2lU0sKe7a1mBH9LW30wUijxZZ1z246a7V40zHDc= github.com/stackitcloud/stackit-sdk-go/services/runcommand v1.10.2/go.mod h1:KQLunYwad9IhSbnXuhkKAldVG9LNxCzIYHR8vMJlKQI= github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.19.1 h1:Mym5vqa3YaF42LbqlVXDFYf/evsNU76l0wpUPGEu+0U= From 5177e5d01cfb6e642783633c3459c4a0a26fc936 Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 8 Oct 2026 13:38:57 +0200 Subject: [PATCH 2/3] fix(iaas): adapt to new sdk labels type --- internal/cmd/project/update/update.go | 8 ++--- internal/cmd/project/update/update_test.go | 12 +++---- internal/pkg/flags/flag_to_value.go | 20 ++++++++++++ internal/pkg/flags/flag_to_value_test.go | 37 ++++++++++++++++++++++ 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/internal/cmd/project/update/update.go b/internal/cmd/project/update/update.go index 3c139b03c..c32de0494 100644 --- a/internal/cmd/project/update/update.go +++ b/internal/cmd/project/update/update.go @@ -34,7 +34,7 @@ type inputModel struct { *globalflags.GlobalFlagModel ParentId *string Name *string - Labels *map[string]string + Labels *map[string]*string } func NewCmd(params *types.CmdParams) *cobra.Command { @@ -107,7 +107,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, return nil, &errors.ProjectIdError{} } - labels := flags.FlagToStringToStringPointer(p, cmd, labelFlag) + labels := flags.FlagToStringToStringPointerPointer(p, cmd, labelFlag) parentId := flags.FlagToStringPointer(p, cmd, parentIdFlag) name := flags.FlagToStringPointer(p, cmd, nameFlag) @@ -126,10 +126,10 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, } } - if !labelValueRegex.MatchString(value) { + if value == nil || !labelValueRegex.MatchString(*value) { return nil, &errors.FlagValidationError{ Flag: labelFlag, - Details: fmt.Sprintf("label value %s for key %s didn't match the required regex expression %s", value, key, labelValueRegex), + Details: fmt.Sprintf("label value %v for key %s didn't match the required regex expression %s", value, key, labelValueRegex), } } } diff --git a/internal/cmd/project/update/update_test.go b/internal/cmd/project/update/update_test.go index 04338e8d8..eef856f84 100644 --- a/internal/cmd/project/update/update_test.go +++ b/internal/cmd/project/update/update_test.go @@ -101,9 +101,9 @@ func TestParseInput(t *testing.T) { labelValues: []string{"key=value", "foo=bar"}, expectedModel: fixtureInputModel( func(model *inputModel) { - model.Labels = &map[string]string{ - "key": "value", - "foo": "bar", + model.Labels = &map[string]*string{ + "key": utils.Ptr("value"), + "foo": utils.Ptr("bar"), } }), isValid: true, @@ -114,9 +114,9 @@ func TestParseInput(t *testing.T) { labelValues: []string{"key=value,foo=bar"}, expectedModel: fixtureInputModel( func(model *inputModel) { - model.Labels = &map[string]string{ - "key": "value", - "foo": "bar", + model.Labels = &map[string]*string{ + "key": utils.Ptr("value"), + "foo": utils.Ptr("bar"), } }), isValid: true, diff --git a/internal/pkg/flags/flag_to_value.go b/internal/pkg/flags/flag_to_value.go index c53aa751e..09a6ba9b8 100644 --- a/internal/pkg/flags/flag_to_value.go +++ b/internal/pkg/flags/flag_to_value.go @@ -76,6 +76,26 @@ func FlagToStringToStringPointer(p *print.Printer, cmd *cobra.Command, flag stri return nil } +// FlagToStringToStringPointerPointer returns a pointer to the flag's value as a map of string pointers. +// Returns nil if the flag is not set, cannot be converted, or does not exist. +func FlagToStringToStringPointerPointer(p *print.Printer, cmd *cobra.Command, flag string) *map[string]*string { //nolint:gocritic //convenient for setting the SDK payload + value, err := cmd.Flags().GetStringToString(flag) + if err != nil { + p.Debug(print.ErrorLevel, "convert flag to string to string pointer pointer: %v", err) + return nil + } + if !cmd.Flag(flag).Changed { + return nil + } + + pointerValue := make(map[string]*string, len(value)) + for key, item := range value { + item := item + pointerValue[key] = &item + } + return &pointerValue +} + func FlagToStringToAny(p *print.Printer, cmd *cobra.Command, flag string) map[string]any { value, err := cmd.Flags().GetStringToString(flag) r := make(map[string]any, len(value)) diff --git a/internal/pkg/flags/flag_to_value_test.go b/internal/pkg/flags/flag_to_value_test.go index 2ce5889ec..d79bb1907 100644 --- a/internal/pkg/flags/flag_to_value_test.go +++ b/internal/pkg/flags/flag_to_value_test.go @@ -73,6 +73,43 @@ func TestFlagToStringToStringPointer(t *testing.T) { } } +func TestFlagToStringToStringPointerPointer(t *testing.T) { + const flagName = "labels" + + tests := []struct { + name string + flagValue *string + want *map[string]*string + }{ + {name: "flag unset"}, + { + name: "flag set", + flagValue: utils.Ptr("foo=bar,label1=value1"), + want: &map[string]*string{ + "foo": utils.Ptr("bar"), + "label1": utils.Ptr("value1"), + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + params := testparams.NewTestParams() + cmd := &cobra.Command{Use: "test"} + cmd.Flags().StringToString(flagName, nil, "Labels") + if tt.flagValue != nil { + if err := cmd.Flags().Set(flagName, *tt.flagValue); err != nil { + t.Fatal(err) + } + } + + if got := FlagToStringToStringPointerPointer(params.Printer, cmd, flagName); !reflect.DeepEqual(got, tt.want) { + t.Errorf("FlagToStringToStringPointerPointer() = %v, want %v", got, tt.want) + } + }) + } +} + func TestFlagToStringArrayValue(t *testing.T) { const flagName = "geofencing" tests := []struct { From 8da7fbdd76a10448b0f4967dc0c0725c9a868988 Mon Sep 17 00:00:00 2001 From: Carlo Goetz Date: Thu, 8 Oct 2026 16:25:37 +0200 Subject: [PATCH 3/3] fix(iaas): use new() instead of utils.Ptr --- internal/cmd/project/update/update_test.go | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/internal/cmd/project/update/update_test.go b/internal/cmd/project/update/update_test.go index eef856f84..380db5e2e 100644 --- a/internal/cmd/project/update/update_test.go +++ b/internal/cmd/project/update/update_test.go @@ -6,7 +6,6 @@ import ( "github.com/stackitcloud/stackit-cli/internal/pkg/globalflags" "github.com/stackitcloud/stackit-cli/internal/pkg/testutils" - "github.com/stackitcloud/stackit-cli/internal/pkg/utils" "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" @@ -41,8 +40,8 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { ProjectId: testProjectId, Verbosity: globalflags.VerbosityDefault, }, - ParentId: utils.Ptr(testParentId), - Name: utils.Ptr(nameFlag), + ParentId: new(testParentId), + Name: new(nameFlag), } for _, mod := range mods { mod(model) @@ -53,8 +52,8 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel { func fixtureRequest(mods ...func(request *resourcemanager.ApiPartialUpdateProjectRequest)) resourcemanager.ApiPartialUpdateProjectRequest { request := testClient.DefaultAPI.PartialUpdateProject(testCtx, testProjectId) request = request.PartialUpdateProjectPayload(resourcemanager.PartialUpdateProjectPayload{ - ContainerParentId: utils.Ptr(testParentId), - Name: utils.Ptr(nameFlag), + ContainerParentId: new(testParentId), + Name: new(nameFlag), }) for _, mod := range mods { mod(&request) @@ -102,8 +101,8 @@ func TestParseInput(t *testing.T) { expectedModel: fixtureInputModel( func(model *inputModel) { model.Labels = &map[string]*string{ - "key": utils.Ptr("value"), - "foo": utils.Ptr("bar"), + "key": new("value"), + "foo": new("bar"), } }), isValid: true, @@ -115,8 +114,8 @@ func TestParseInput(t *testing.T) { expectedModel: fixtureInputModel( func(model *inputModel) { model.Labels = &map[string]*string{ - "key": utils.Ptr("value"), - "foo": utils.Ptr("bar"), + "key": new("value"), + "foo": new("bar"), } }), isValid: true,