From eb4135780a8ebf3dd7528662454460a91b192fc2 Mon Sep 17 00:00:00 2001 From: dnitsch Date: Tue, 13 May 2025 10:59:16 +0100 Subject: [PATCH 1/4] fix: move log to internal --- cmd/configmanager/configmanager.go | 2 +- cmd/configmanager/configmanager_test.go | 2 +- cmd/main.go | 2 +- internal/cmdutils/cmdutils.go | 2 +- internal/cmdutils/cmdutils_test.go | 2 +- internal/cmdutils/postprocessor.go | 4 +- internal/config/config.go | 2 +- {pkg => internal}/log/log.go | 0 {pkg => internal}/log/log_test.go | 2 +- internal/store/azappconf.go | 2 +- internal/store/azappconf_test.go | 2 +- internal/store/azkeyvault.go | 2 +- internal/store/azkeyvault_test.go | 2 +- internal/store/aztablestorage.go | 2 +- internal/store/aztablestorage_test.go | 2 +- internal/store/gcpsecrets.go | 2 +- internal/store/gcpsecrets_test.go | 2 +- internal/store/hashivault.go | 2 +- internal/store/hashivault_test.go | 2 +- internal/store/paramstore.go | 2 +- internal/store/paramstore_test.go | 2 +- internal/store/secretsmanager.go | 2 +- internal/store/secretsmanager_test.go | 2 +- internal/strategy/strategy.go | 2 +- internal/strategy/strategy_test.go | 86 ++++++++++++------------- pkg/generator/generator.go | 8 +-- pkg/generator/generator_test.go | 4 +- 27 files changed, 73 insertions(+), 73 deletions(-) rename {pkg => internal}/log/log.go (100%) rename {pkg => internal}/log/log_test.go (96%) diff --git a/cmd/configmanager/configmanager.go b/cmd/configmanager/configmanager.go index 3f1fee2..01af646 100644 --- a/cmd/configmanager/configmanager.go +++ b/cmd/configmanager/configmanager.go @@ -8,8 +8,8 @@ import ( "github.com/DevLabFoundry/configmanager/v2" "github.com/DevLabFoundry/configmanager/v2/internal/cmdutils" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/pkg/generator" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/spf13/cobra" ) diff --git a/cmd/configmanager/configmanager_test.go b/cmd/configmanager/configmanager_test.go index fbe89e7..fce284a 100644 --- a/cmd/configmanager/configmanager_test.go +++ b/cmd/configmanager/configmanager_test.go @@ -9,7 +9,7 @@ import ( "testing" cmd "github.com/DevLabFoundry/configmanager/v2/cmd/configmanager" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" ) type cmdTestInput struct { diff --git a/cmd/main.go b/cmd/main.go index 6aa3437..ee4999a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -5,7 +5,7 @@ import ( "os" cfgmgr "github.com/DevLabFoundry/configmanager/v2/cmd/configmanager" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" ) func main() { diff --git a/internal/cmdutils/cmdutils.go b/internal/cmdutils/cmdutils.go index d461cfe..f1f71dc 100644 --- a/internal/cmdutils/cmdutils.go +++ b/internal/cmdutils/cmdutils.go @@ -12,8 +12,8 @@ import ( "strings" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/pkg/generator" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/spf13/cobra" ) diff --git a/internal/cmdutils/cmdutils_test.go b/internal/cmdutils/cmdutils_test.go index 3e7dfb6..f8fad0f 100644 --- a/internal/cmdutils/cmdutils_test.go +++ b/internal/cmdutils/cmdutils_test.go @@ -10,9 +10,9 @@ import ( "github.com/DevLabFoundry/configmanager/v2/internal/cmdutils" "github.com/DevLabFoundry/configmanager/v2/internal/config" + log "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" "github.com/DevLabFoundry/configmanager/v2/pkg/generator" - log "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/spf13/cobra" ) diff --git a/internal/cmdutils/postprocessor.go b/internal/cmdutils/postprocessor.go index 7941147..8419cc7 100644 --- a/internal/cmdutils/postprocessor.go +++ b/internal/cmdutils/postprocessor.go @@ -24,8 +24,8 @@ func (p *PostProcessor) ConvertToExportVar() []string { for k, v := range p.ProcessedMap { rawKeyToken := strings.Split(k, "/") // assumes a path like token was used topLevelKey := rawKeyToken[len(rawKeyToken)-1] - trm := make(generator.ParsedMap) - if parsedOk := generator.IsParsed(v, &trm); parsedOk { + trm := generator.ParsedMap{} + if parsedOk := generator.IsParsed(v, trm); parsedOk { // if is a map // try look up on key if separator defined normMap := p.envVarNormalize(trm) diff --git a/internal/config/config.go b/internal/config/config.go index 61f3cf5..53f3ef8 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -171,7 +171,7 @@ func (t *ParsedTokenConfig) ParseMetadata(typ any) error { // extracted from the token there is little chance panic would occur here // WATCH THIS SPACE "¯\_(ツ)_/¯" metaMap := []string{} - for _, keyVal := range strings.Split(t.metadataStr, ",") { + for keyVal := range strings.SplitSeq(t.metadataStr, ",") { mapKeyVal := strings.Split(keyVal, "=") if len(mapKeyVal) == 2 { metaMap = append(metaMap, fmt.Sprintf(`"%s":"%s"`, mapKeyVal[0], mapKeyVal[1])) diff --git a/pkg/log/log.go b/internal/log/log.go similarity index 100% rename from pkg/log/log.go rename to internal/log/log.go diff --git a/pkg/log/log_test.go b/internal/log/log_test.go similarity index 96% rename from pkg/log/log_test.go rename to internal/log/log_test.go index 6eb6ac9..be24a28 100644 --- a/pkg/log/log_test.go +++ b/internal/log/log_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) func Test_LogInfo(t *testing.T) { diff --git a/internal/store/azappconf.go b/internal/store/azappconf.go index dde66dc..db067a3 100644 --- a/internal/store/azappconf.go +++ b/internal/store/azappconf.go @@ -12,7 +12,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" ) // appConfApi diff --git a/internal/store/azappconf_test.go b/internal/store/azappconf_test.go index 4cfc2e3..82ed7e9 100644 --- a/internal/store/azappconf_test.go +++ b/internal/store/azappconf_test.go @@ -9,8 +9,8 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig" "github.com/DevLabFoundry/configmanager/v2/internal/config" + logger "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - logger "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) func azAppConfCommonChecker(t *testing.T, key string, expectedKey string, expectLabel string, opts *azappconfig.GetSettingOptions) { diff --git a/internal/store/azkeyvault.go b/internal/store/azkeyvault.go index 293a88c..a609f6d 100644 --- a/internal/store/azkeyvault.go +++ b/internal/store/azkeyvault.go @@ -9,7 +9,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" ) type kvApi interface { diff --git a/internal/store/azkeyvault_test.go b/internal/store/azkeyvault_test.go index 94ccb98..98ccda8 100644 --- a/internal/store/azkeyvault_test.go +++ b/internal/store/azkeyvault_test.go @@ -9,8 +9,8 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) func Test_azSplitToken(t *testing.T) { diff --git a/internal/store/aztablestorage.go b/internal/store/aztablestorage.go index 3d0d2c6..37ca8d9 100644 --- a/internal/store/aztablestorage.go +++ b/internal/store/aztablestorage.go @@ -13,7 +13,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/data/aztables" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" ) var ErrIncorrectlyStructuredToken = errors.New("incorrectly structured token") diff --git a/internal/store/aztablestorage_test.go b/internal/store/aztablestorage_test.go index 44150c4..54006cc 100644 --- a/internal/store/aztablestorage_test.go +++ b/internal/store/aztablestorage_test.go @@ -10,8 +10,8 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/data/aztables" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) func azTableStoreCommonChecker(t *testing.T, partitionKey, rowKey, expectedPartitionKey, expectedRowKey string) { diff --git a/internal/store/gcpsecrets.go b/internal/store/gcpsecrets.go index f83ddb2..e473b95 100644 --- a/internal/store/gcpsecrets.go +++ b/internal/store/gcpsecrets.go @@ -7,7 +7,7 @@ import ( gcpsecrets "cloud.google.com/go/secretmanager/apiv1" gcpsecretspb "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/googleapis/gax-go/v2" ) diff --git a/internal/store/gcpsecrets_test.go b/internal/store/gcpsecrets_test.go index f4d0421..54bdf7b 100644 --- a/internal/store/gcpsecrets_test.go +++ b/internal/store/gcpsecrets_test.go @@ -10,8 +10,8 @@ import ( gcpsecretspb "cloud.google.com/go/secretmanager/apiv1/secretmanagerpb" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/googleapis/gax-go/v2" ) diff --git a/internal/store/hashivault.go b/internal/store/hashivault.go index 5f880df..d979310 100644 --- a/internal/store/hashivault.go +++ b/internal/store/hashivault.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" vault "github.com/hashicorp/vault/api" auth "github.com/hashicorp/vault/api/auth/aws" diff --git a/internal/store/hashivault_test.go b/internal/store/hashivault_test.go index 8829aa2..71d010a 100644 --- a/internal/store/hashivault_test.go +++ b/internal/store/hashivault_test.go @@ -11,8 +11,8 @@ import ( "testing" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" vault "github.com/hashicorp/vault/api" ) diff --git a/internal/store/paramstore.go b/internal/store/paramstore.go index f322d50..b20a98e 100644 --- a/internal/store/paramstore.go +++ b/internal/store/paramstore.go @@ -4,7 +4,7 @@ import ( "context" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/aws/aws-sdk-go-v2/aws" awsConf "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/ssm" diff --git a/internal/store/paramstore_test.go b/internal/store/paramstore_test.go index 506a0ea..19c027a 100644 --- a/internal/store/paramstore_test.go +++ b/internal/store/paramstore_test.go @@ -8,8 +8,8 @@ import ( "testing" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/aws/aws-sdk-go-v2/service/ssm" "github.com/aws/aws-sdk-go-v2/service/ssm/types" ) diff --git a/internal/store/secretsmanager.go b/internal/store/secretsmanager.go index f984481..704ebb9 100644 --- a/internal/store/secretsmanager.go +++ b/internal/store/secretsmanager.go @@ -4,7 +4,7 @@ import ( "context" "github.com/DevLabFoundry/configmanager/v2/internal/config" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/aws/aws-sdk-go-v2/aws" awsConf "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/secretsmanager" diff --git a/internal/store/secretsmanager_test.go b/internal/store/secretsmanager_test.go index 41cf960..3b29dd2 100644 --- a/internal/store/secretsmanager_test.go +++ b/internal/store/secretsmanager_test.go @@ -8,8 +8,8 @@ import ( "testing" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/aws/aws-sdk-go-v2/service/secretsmanager" ) diff --git a/internal/strategy/strategy.go b/internal/strategy/strategy.go index ecda13b..d051389 100644 --- a/internal/strategy/strategy.go +++ b/internal/strategy/strategy.go @@ -6,8 +6,8 @@ import ( "fmt" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/store" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) var ErrTokenInvalid = errors.New("invalid token - cannot get prefix") diff --git a/internal/strategy/strategy_test.go b/internal/strategy/strategy_test.go index bd36da3..0fbc9a5 100644 --- a/internal/strategy/strategy_test.go +++ b/internal/strategy/strategy_test.go @@ -8,10 +8,10 @@ import ( "testing" "github.com/DevLabFoundry/configmanager/v2/internal/config" + log "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/store" "github.com/DevLabFoundry/configmanager/v2/internal/strategy" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" - log "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/go-test/deep" ) @@ -125,48 +125,48 @@ func Test_SelectImpl_With(t *testing.T) { expect func() store.Strategy expErr error }{ - "unknown": { - func() func() { - return func() { - } - }, - "UNKNOWN#foo/bar", - config.NewConfig().WithTokenSeparator("#"), - func() store.Strategy { return nil }, - fmt.Errorf("implementation not found for input string: UNKNOWN#foo/bar"), - }, - "success AZTABLESTORE": { - func() func() { - os.Setenv("AZURE_stuff", "foo") - return func() { - os.Clearenv() - } - }, - "AZTABLESTORE#foo/bar1", - config.NewConfig().WithTokenSeparator("#"), - func() store.Strategy { - token, _ := config.NewParsedTokenConfig("AZTABLESTORE#foo/bar1", *config.NewConfig().WithTokenSeparator("#")) - s, _ := store.NewAzTableStore(context.TODO(), token, log.New(io.Discard)) - return s - }, - nil, - }, - "success AWSPARAMSTR": { - func() func() { - os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA") - os.Setenv("AWS_SECRET_ACCESS_KEY", "00000000000000000000111111111") - return func() { - os.Clearenv() - } - }, - "AWSPARAMSTR#foo/bar1", - config.NewConfig().WithTokenSeparator("#"), - func() store.Strategy { - s, _ := store.NewParamStore(context.TODO(), log.New(io.Discard)) - return s - }, - nil, - }, + // "unknown": { + // func() func() { + // return func() { + // } + // }, + // "UNKNOWN#foo/bar", + // config.NewConfig().WithTokenSeparator("#"), + // func() store.Strategy { return nil }, + // fmt.Errorf("implementation not found for input string: UNKNOWN#foo/bar"), + // }, + // "success AZTABLESTORE": { + // func() func() { + // os.Setenv("AZURE_stuff", "foo") + // return func() { + // os.Clearenv() + // } + // }, + // "AZTABLESTORE#foo/bar1", + // config.NewConfig().WithTokenSeparator("#"), + // func() store.Strategy { + // token, _ := config.NewParsedTokenConfig("AZTABLESTORE#foo/bar1", *config.NewConfig().WithTokenSeparator("#")) + // s, _ := store.NewAzTableStore(context.TODO(), token, log.New(io.Discard)) + // return s + // }, + // nil, + // }, + // "success AWSPARAMSTR": { + // func() func() { + // os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA") + // os.Setenv("AWS_SECRET_ACCESS_KEY", "00000000000000000000111111111") + // return func() { + // os.Clearenv() + // } + // }, + // "AWSPARAMSTR#foo/bar1", + // config.NewConfig().WithTokenSeparator("#"), + // func() store.Strategy { + // s, _ := store.NewParamStore(context.TODO(), log.New(io.Discard)) + // return s + // }, + // nil, + // }, "success AWSSECRETS": { func() func() { os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA") diff --git a/pkg/generator/generator.go b/pkg/generator/generator.go index 8307a08..e8b48cd 100644 --- a/pkg/generator/generator.go +++ b/pkg/generator/generator.go @@ -9,9 +9,9 @@ import ( "sync" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/store" "github.com/DevLabFoundry/configmanager/v2/internal/strategy" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" "github.com/spyzhov/ajson" ) @@ -55,7 +55,7 @@ func newGenVars(ctx context.Context, opts ...Opts) *GenVars { Logger: log.New(io.Discard), rawMap: tokenMapSafe{ tokenMap: m, - mu: sync.RWMutex{}, + mu: &sync.Mutex{}, }, ctx: ctx, // return using default config @@ -112,7 +112,7 @@ func (pm ParsedMap) MapKeys() (keys []string) { } type tokenMapSafe struct { - mu sync.RWMutex + mu *sync.Mutex tokenMap ParsedMap } @@ -217,7 +217,7 @@ func (c *GenVars) generate(rawMap rawTokenMap) error { // map[string]string // If found it will convert that to a map with all keys uppercased // and any characters -func IsParsed(v any, trm *ParsedMap) bool { +func IsParsed(v any, trm ParsedMap) bool { str := fmt.Sprint(v) err := json.Unmarshal([]byte(str), &trm) return err == nil diff --git a/pkg/generator/generator_test.go b/pkg/generator/generator_test.go index 0e253f2..bfb91b9 100644 --- a/pkg/generator/generator_test.go +++ b/pkg/generator/generator_test.go @@ -7,11 +7,11 @@ import ( "testing" "github.com/DevLabFoundry/configmanager/v2/internal/config" + "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/DevLabFoundry/configmanager/v2/internal/store" "github.com/DevLabFoundry/configmanager/v2/internal/strategy" "github.com/DevLabFoundry/configmanager/v2/internal/testutils" "github.com/DevLabFoundry/configmanager/v2/pkg/generator" - "github.com/DevLabFoundry/configmanager/v2/pkg/log" ) type mockGenerate struct { @@ -162,7 +162,7 @@ func Test_IsParsed(t *testing.T) { } for name, tt := range ttests { t.Run(name, func(t *testing.T) { - typ := &generator.ParsedMap{} + typ := generator.ParsedMap{} got := generator.IsParsed(tt.val, typ) if got != tt.isParsed { t.Errorf(testutils.TestPhraseWithContext, "unexpected IsParsed", got, tt.isParsed) From a2c2c202b82e2f53d22848f057fb5c0a3f8d5a99 Mon Sep 17 00:00:00 2001 From: dnitsch Date: Tue, 13 May 2025 12:49:40 +0100 Subject: [PATCH 2/4] fix: slight change to generator and lock maps --- .gitignore | 3 +- go.mod | 56 +++++++------- go.sum | 126 +++++++++++++++---------------- internal/config/config.go | 5 +- internal/store/secretsmanager.go | 10 ++- pkg/generator/generator.go | 92 ++++++++++++---------- taskfile.yml | 2 +- 7 files changed, 155 insertions(+), 139 deletions(-) diff --git a/.gitignore b/.gitignore index d8cd35a..c61e9df 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ dist # tests .coverage -.ignore* \ No newline at end of file +# local testers and +local/ \ No newline at end of file diff --git a/go.mod b/go.mod index 98b6d6b..4499a69 100644 --- a/go.mod +++ b/go.mod @@ -5,50 +5,50 @@ go 1.24 toolchain go1.24.2 require ( - cloud.google.com/go/secretmanager v1.14.6 - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 + cloud.google.com/go/secretmanager v1.14.7 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v1.1.0 github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 github.com/aws/aws-sdk-go-v2 v1.36.3 - github.com/aws/aws-sdk-go-v2/config v1.29.12 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 - github.com/aws/aws-sdk-go-v2/service/ssm v1.58.0 + github.com/aws/aws-sdk-go-v2/config v1.29.14 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 + github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0 github.com/go-test/deep v1.1.1 github.com/googleapis/gax-go/v2 v2.14.1 github.com/hashicorp/vault/api v1.16.0 github.com/hashicorp/vault/api/auth/aws v0.9.0 - github.com/spf13/cobra v1.8.1 + github.com/spf13/cobra v1.9.1 github.com/spyzhov/ajson v0.9.6 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go/auth v0.15.0 // indirect + cloud.google.com/go/auth v0.16.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.6.0 // indirect - cloud.google.com/go/iam v1.5.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect github.com/a8m/envsubst v1.4.3 - github.com/aws/aws-sdk-go v1.55.6 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.65 // indirect + github.com/aws/aws-sdk-go v1.55.7 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.67 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect github.com/aws/smithy-go v1.22.3 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-jose/go-jose/v4 v4.0.5 // indirect + github.com/go-jose/go-jose/v4 v4.1.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/golang-jwt/jwt/v5 v5.2.2 // indirect @@ -77,24 +77,24 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/spf13/pflag v1.0.5 // indirect + github.com/spf13/pflag v1.0.6 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/net v0.38.0 // indirect - golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect golang.org/x/time v0.11.0 // indirect - google.golang.org/api v0.228.0 // indirect - google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 // indirect - google.golang.org/grpc v1.71.1 // indirect + google.golang.org/api v0.231.0 // indirect + google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/grpc v1.72.0 // indirect google.golang.org/protobuf v1.36.6 // indirect ) diff --git a/go.sum b/go.sum index c8ef55b..e9b8b6a 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,27 @@ -cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= -cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= -cloud.google.com/go/auth v0.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps= -cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= +cloud.google.com/go v0.120.1 h1:Z+5V7yd383+9617XDCyszmK5E4wJRJL+tquMfDj9hLM= +cloud.google.com/go v0.120.1/go.mod h1:56Vs7sf/i2jYM6ZL9NYlC82r04PThNcPS5YgFmb0rp8= +cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.5.0 h1:QlLcVMhbLGOjRcGe6VTGGTyQib8dRLK2B/kYNV0+2xs= -cloud.google.com/go/iam v1.5.0/go.mod h1:U+DOtKQltF/LxPEtcDLoobcsZMilSRwR7mgNL7knOpo= -cloud.google.com/go/secretmanager v1.14.6 h1:/ooktIMSORaWk9gm3vf8+Mg+zSrUplJFKBztP993oL0= -cloud.google.com/go/secretmanager v1.14.6/go.mod h1:0OWeM3qpJ2n71MGgNfKsgjC/9LfVTcUqXFUlGxo5PzY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/secretmanager v1.14.7 h1:VkscIRzj7GcmZyO4z9y1EH7Xf81PcoiAo7MtlD+0O80= +cloud.google.com/go/secretmanager v1.14.7/go.mod h1:uRuB4F6NTFbg0vLQ6HsT7PSsfbY7FqHbtJP1J94qxGc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v1.1.0 h1:AdaGDU3FgoUC2tsd3vsd9JblRrpFLUsS38yh1eLYfwM= github.com/Azure/azure-sdk-for-go/sdk/data/azappconfig v1.1.0/go.mod h1:6tpINME7dnF7bLlb8Ubj6FtM9CFZrCn7aT02pcYrklM= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.3.0 h1:NnE8y/opvxowwNcSNHubQUiSSEhfk3dmooLGAOmPuKs= github.com/Azure/azure-sdk-for-go/sdk/data/aztables v1.3.0/go.mod h1:GhHzPHiiHxZloo6WvKu9X7krmSAKTyGoIwoKMbrKTTA= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 h1:mrkDCdkMsD4l9wjFGhofFHFrV43Y3c53RSLKOCJ5+Ow= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1/go.mod h1:hPv41DbqMmnxcGralanA/kVlfdH5jv3T4LxGku2E1BY= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI= @@ -33,14 +33,14 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83 github.com/a8m/envsubst v1.4.3 h1:kDF7paGK8QACWYaQo6KtyYBozY2jhQrTuNNuUxQkhJY= github.com/a8m/envsubst v1.4.3/go.mod h1:4jjHWQlZoaXPoLQUb7H2qT4iLkZDdmEQiOUogdUmqVU= github.com/aws/aws-sdk-go v1.34.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= -github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= +github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= -github.com/aws/aws-sdk-go-v2/config v1.29.12 h1:Y/2a+jLPrPbHpFkpAAYkVEtJmxORlXoo5k2g1fa2sUo= -github.com/aws/aws-sdk-go-v2/config v1.29.12/go.mod h1:xse1YTjmORlb/6fhkWi8qJh3cvZi4JoVNhc+NbJt4kI= -github.com/aws/aws-sdk-go-v2/credentials v1.17.65 h1:q+nV2yYegofO/SUXruT+pn4KxkxmaQ++1B/QedcKBFM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.65/go.mod h1:4zyjAuGOdikpNYiSGpsGz8hLGmUzlY8pc8r9QQ/RXYQ= +github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= +github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= @@ -53,23 +53,23 @@ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 h1:vlYXbindmagyVA3RS2SPd47eKZ00GZZQcr+etTviHtc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= -github.com/aws/aws-sdk-go-v2/service/ssm v1.58.0 h1:zQz6Q5uaC8s9734DV9UDAm2q1TEEfOvEejDBSulOapI= -github.com/aws/aws-sdk-go-v2/service/ssm v1.58.0/go.mod h1:PUWUl5MDiYNQkUHN9Pyd9kgtA/YhbxnSnHP+yQqzrM8= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 h1:pdgODsAhGo4dvzC3JAG5Ce0PX8kWXrTZGx+jxADD+5E= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.2/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 h1:90uX0veLKcdHVfvxhkWUQSCi5VabtwMLFutYiRke4oo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 h1:EKXYJ8kgz4fiqef8xApu7eH0eae2SrVG+oHCLFybMRI= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= +github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0 h1:KWArCwA/WkuHWKfygkNz0B6YS6OvdgoJUaJHX0Qby1s= +github.com/aws/aws-sdk-go-v2/service/ssm v1.59.0/go.mod h1:PUWUl5MDiYNQkUHN9Pyd9kgtA/YhbxnSnHP+yQqzrM8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= @@ -81,8 +81,8 @@ github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= -github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= +github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY= +github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -142,8 +142,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= -github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw= +github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= +github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -172,18 +172,18 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= -github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= +github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= +github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spyzhov/ajson v0.9.6 h1:iJRDaLa+GjhCDAt1yFtU/LKMtLtsNVKkxqlpvrHHlpQ= github.com/spyzhov/ajson v0.9.6/go.mod h1:a6oSw0MMb7Z5aD2tPoPO+jq11ETKgXUr2XktHdT8Wt8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -213,15 +213,15 @@ go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstF go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= +golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -230,23 +230,23 @@ golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= -google.golang.org/api v0.228.0 h1:X2DJ/uoWGnY5obVjewbp8icSL5U4FzuCfy9OjbLSnLs= -google.golang.org/api v0.228.0/go.mod h1:wNvRS1Pbe8r4+IfBIniV8fwCpGwTrYa+kMUDiC5z5a4= -google.golang.org/genproto v0.0.0-20250324211829-b45e905df463 h1:qEFnJI6AnfZk0NNe8YTyXQh5i//Zxi4gBHwRgp76qpw= -google.golang.org/genproto v0.0.0-20250324211829-b45e905df463/go.mod h1:SqIx1NV9hcvqdLHo7uNZDS5lrUJybQ3evo3+z/WBfA0= -google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463 h1:hE3bRWtU6uceqlh4fhrSnUyjKHMKB9KrTLLG+bc0ddM= -google.golang.org/genproto/googleapis/api v0.0.0-20250324211829-b45e905df463/go.mod h1:U90ffi8eUL9MwPcrJylN5+Mk2v3vuPDptd5yyNUiRR8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463 h1:e0AIkUUhxyBKh6ssZNrAMeqhA7RKUj42346d1y02i2g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250324211829-b45e905df463/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= -google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q= +google.golang.org/api v0.231.0/go.mod h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A= +google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34 h1:oklGWmm0ZiCw4efmdYZo5MF9t6nRvGzM5+0klSjOmGM= +google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34/go.mod h1:hiH/EqX5GBdTyIpkqMqDGUHDiBniln8b4FCw+NzPxQY= +google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 h1:0PeQib/pH3nB/5pEmFeVQJotzGohV0dq4Vcp09H5yhE= +google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34/go.mod h1:0awUlEkap+Pb1UMeJwJQQAdJQrt3moU7J2moTy69irI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 h1:h6p3mQqrmT1XkHVTfzLdNz1u7IhINeZkz67/xTbOuWs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/internal/config/config.go b/internal/config/config.go index 53f3ef8..356eb63 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -165,7 +165,7 @@ func (ptc *ParsedTokenConfig) new() *ParsedTokenConfig { return ptc } -func (t *ParsedTokenConfig) ParseMetadata(typ any) error { +func (t *ParsedTokenConfig) ParseMetadata(metadataTyp any) error { // crude json like builder from key/val tags // since we are only ever dealing with a string input // extracted from the token there is little chance panic would occur here @@ -180,8 +180,7 @@ func (t *ParsedTokenConfig) ParseMetadata(typ any) error { // empty map will be parsed as `{}` still resulting in a valid json // and successful unmarshalling but default value pointer struct - b := []byte(fmt.Sprintf(`{%s}`, strings.Join(metaMap, ","))) - if err := json.Unmarshal(b, typ); err != nil { + if err := json.Unmarshal(fmt.Appendf(nil, `{%s}`, strings.Join(metaMap, ",")), metadataTyp); err != nil { // It would very hard to test this since // we are forcing the key and value to be strings // return non-filled pointer diff --git a/internal/store/secretsmanager.go b/internal/store/secretsmanager.go index 704ebb9..6b0f7a2 100644 --- a/internal/store/secretsmanager.go +++ b/internal/store/secretsmanager.go @@ -6,7 +6,7 @@ import ( "github.com/DevLabFoundry/configmanager/v2/internal/config" "github.com/DevLabFoundry/configmanager/v2/internal/log" "github.com/aws/aws-sdk-go-v2/aws" - awsConf "github.com/aws/aws-sdk-go-v2/config" + awsconf "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/secretsmanager" ) @@ -27,7 +27,7 @@ type SecretsMgrConfig struct { } func NewSecretsMgr(ctx context.Context, logger log.ILogger) (*SecretsMgr, error) { - cfg, err := awsConf.LoadDefaultConfig(ctx) + cfg, err := awsconf.LoadDefaultConfig(ctx) if err != nil { logger.Error("unable to load SDK config, %v\n%w", err, ErrClientInitialization) return nil, err @@ -44,14 +44,16 @@ func NewSecretsMgr(ctx context.Context, logger log.ILogger) (*SecretsMgr, error) func (imp *SecretsMgr) SetToken(token *config.ParsedTokenConfig) { storeConf := &SecretsMgrConfig{} - token.ParseMetadata(storeConf) + if err := token.ParseMetadata(storeConf); err != nil { + imp.logger.Error("parse token error %v", err) + } imp.token = token imp.config = storeConf } func (imp *SecretsMgr) Token() (string, error) { imp.logger.Info("Concrete implementation SecretsManager") - imp.logger.Info("SecretsManager Token: %s", imp.token.String()) + imp.logger.Debug("SecretsManager Token: %s", imp.token.String()) version := "AWSCURRENT" if imp.config.Version != "" { diff --git a/pkg/generator/generator.go b/pkg/generator/generator.go index e8b48cd..4912e21 100644 --- a/pkg/generator/generator.go +++ b/pkg/generator/generator.go @@ -131,26 +131,45 @@ func (tms *tokenMapSafe) addKeyVal(key *config.ParsedTokenConfig, val string) { tms.tokenMap[key.String()] = keySeparatorLookup(key, val) } -type rawTokenMap map[string]*config.ParsedTokenConfig +type rawTokenMap struct { + mu sync.Mutex + tokenMap map[string]*config.ParsedTokenConfig +} + +func newRawTokenMap() *rawTokenMap { + return &rawTokenMap{mu: sync.Mutex{}, tokenMap: map[string]*config.ParsedTokenConfig{}} +} + +func (rtm *rawTokenMap) addToken(name string, parsedToken *config.ParsedTokenConfig) { + rtm.mu.Lock() + defer rtm.mu.Unlock() + rtm.tokenMap[name] = parsedToken +} + +func (rtm *rawTokenMap) mapOfToken() map[string]*config.ParsedTokenConfig { + rtm.mu.Lock() + defer rtm.mu.Unlock() + return rtm.tokenMap +} // Generate generates a k/v map of the tokens with their corresponding secret/paramstore values // the standard pattern of a token should follow a path like string func (c *GenVars) Generate(tokens []string) (ParsedMap, error) { - parsedTokenMap := make(rawTokenMap) + rtm := newRawTokenMap() for _, token := range tokens { // TODO: normalize tokens here potentially // merge any tokens that only differ in keys lookup inside the object parsedToken, err := config.NewParsedTokenConfig(token, c.config) - if err == nil { - parsedTokenMap[token] = parsedToken + if err != nil { + c.Logger.Info(err.Error()) continue } - c.Logger.Info(err.Error()) + rtm.addToken(token, parsedToken) } // pass in default initialised retrieveStrategy // input should be - if err := c.generate(parsedTokenMap); err != nil { + if err := c.generate(rtm); err != nil { return nil, err } return c.rawMap.getTokenMap(), nil @@ -160,55 +179,50 @@ func (c *GenVars) Generate(tokens []string) (ParsedMap, error) { // initiates groutines with fixed size channel map // to capture responses and errors // generates ParsedMap which includes -func (c *GenVars) generate(rawMap rawTokenMap) error { - if len(rawMap) < 1 { - c.Logger.Debug("no replaceable tokens found in input strings") +func (c *GenVars) generate(rawMap *rawTokenMap) error { + rtm := rawMap.mapOfToken() + if len(rtm) < 1 { + c.Logger.Debug("no replaceable tokens found in input") return nil } - var errors []error - // build an exact size channel - var wg sync.WaitGroup - initChanLen := len(rawMap) - outCh := make(chan *strategy.TokenResponse, initChanLen) + tokenCount := len(rtm) + outCh := make(chan *strategy.TokenResponse, tokenCount) - wg.Add(initChanLen) // TODO: initialise the singleton serviceContainer // pass into each goroutine - for _, parsedToken := range rawMap { + for _, parsedToken := range rtm { + token := parsedToken // safe closure capture // take value from config allocation on a per iteration basis - go func(token *config.ParsedTokenConfig) { - defer wg.Done() + go func() { storeStrategy, err := c.strategy.SelectImplementation(c.ctx, token) if err != nil { outCh <- &strategy.TokenResponse{Err: err} return } outCh <- c.strategy.RetrieveByToken(c.ctx, storeStrategy, token) - }(parsedToken) + }() } - go func() { - wg.Wait() - close(outCh) - }() - - for cro := range outCh { - cr := cro - c.Logger.Debug("cro: %+v", cr) - if cr.Err != nil { - c.Logger.Debug("cr.err %v, for token: %s", cr.Err, cr.Key()) - errors = append(errors, cr.Err) - // Skip adding not found key to the RawMap - continue + // Fan-in: receive results with pure select + received := 0 + for received < tokenCount { + select { + case cr := <-outCh: + if cr == nil { + continue // defensive (shouldn't happen) + } + c.Logger.Debug("cro: %+v", cr) + if cr.Err != nil { + c.Logger.Debug("cr.err %v, for token: %s", cr.Err, cr.Key()) + } else { + c.rawMap.addKeyVal(cr.Key(), cr.Value()) + } + received++ + case <-c.ctx.Done(): + c.Logger.Debug("context done: %v", c.ctx.Err()) + return c.ctx.Err() // propagate context error (cancel/timeout) } - c.rawMap.addKeyVal(cr.Key(), cr.Value()) - } - - if len(errors) > 0 { - // crude ... - c.Logger.Debug("found: %d errors", len(errors)) - // return outMap, fmt.Errorf("%v", errors) } return nil } diff --git a/taskfile.yml b/taskfile.yml index 7bb3f81..6a2c9e1 100644 --- a/taskfile.yml +++ b/taskfile.yml @@ -67,8 +67,8 @@ tasks: summary: | Already filters the packages to this one and enables internal/private package documentation +# go install golang.org/x/tools/cmd/godoc@latest cmd: | - go install golang.org/x/tools/cmd/godoc@latest open http://localhost:6060/pkg/github.com/DevLabFoundry/configmanager/v2/?m=all godoc -notes "BUG|TODO" -play -http=:6060 From 513d7a0961f5ec2a33ee9f434083c02a77c7695a Mon Sep 17 00:00:00 2001 From: dnitsch Date: Tue, 13 May 2025 12:52:37 +0100 Subject: [PATCH 3/4] fix: add specific peg to Go version --- go.mod | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4499a69..92a5b0f 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,6 @@ module github.com/DevLabFoundry/configmanager/v2 -go 1.24 - -toolchain go1.24.2 +go 1.24.3 require ( cloud.google.com/go/secretmanager v1.14.7 From f3f4a5bcfa7011b0643cc22107451edcd157bfc5 Mon Sep 17 00:00:00 2001 From: dnitsch Date: Tue, 13 May 2025 13:50:31 +0100 Subject: [PATCH 4/4] fix: uncomment test --- .gitignore | 2 +- internal/strategy/strategy_test.go | 84 +++++++++++++++--------------- 2 files changed, 43 insertions(+), 43 deletions(-) diff --git a/.gitignore b/.gitignore index c61e9df..13774f5 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,4 @@ dist .coverage # local testers and -local/ \ No newline at end of file +local/ diff --git a/internal/strategy/strategy_test.go b/internal/strategy/strategy_test.go index 0fbc9a5..2ebf86b 100644 --- a/internal/strategy/strategy_test.go +++ b/internal/strategy/strategy_test.go @@ -125,48 +125,48 @@ func Test_SelectImpl_With(t *testing.T) { expect func() store.Strategy expErr error }{ - // "unknown": { - // func() func() { - // return func() { - // } - // }, - // "UNKNOWN#foo/bar", - // config.NewConfig().WithTokenSeparator("#"), - // func() store.Strategy { return nil }, - // fmt.Errorf("implementation not found for input string: UNKNOWN#foo/bar"), - // }, - // "success AZTABLESTORE": { - // func() func() { - // os.Setenv("AZURE_stuff", "foo") - // return func() { - // os.Clearenv() - // } - // }, - // "AZTABLESTORE#foo/bar1", - // config.NewConfig().WithTokenSeparator("#"), - // func() store.Strategy { - // token, _ := config.NewParsedTokenConfig("AZTABLESTORE#foo/bar1", *config.NewConfig().WithTokenSeparator("#")) - // s, _ := store.NewAzTableStore(context.TODO(), token, log.New(io.Discard)) - // return s - // }, - // nil, - // }, - // "success AWSPARAMSTR": { - // func() func() { - // os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA") - // os.Setenv("AWS_SECRET_ACCESS_KEY", "00000000000000000000111111111") - // return func() { - // os.Clearenv() - // } - // }, - // "AWSPARAMSTR#foo/bar1", - // config.NewConfig().WithTokenSeparator("#"), - // func() store.Strategy { - // s, _ := store.NewParamStore(context.TODO(), log.New(io.Discard)) - // return s - // }, - // nil, - // }, + "unknown": { + func() func() { + return func() { + } + }, + "UNKNOWN#foo/bar", + config.NewConfig().WithTokenSeparator("#"), + func() store.Strategy { return nil }, + fmt.Errorf("implementation not found for input string: UNKNOWN#foo/bar"), + }, + "success AZTABLESTORE": { + func() func() { + os.Setenv("AZURE_stuff", "foo") + return func() { + os.Clearenv() + } + }, + "AZTABLESTORE#foo/bar1", + config.NewConfig().WithTokenSeparator("#"), + func() store.Strategy { + token, _ := config.NewParsedTokenConfig("AZTABLESTORE#foo/bar1", *config.NewConfig().WithTokenSeparator("#")) + s, _ := store.NewAzTableStore(context.TODO(), token, log.New(io.Discard)) + return s + }, + nil, + }, + "success AWSPARAMSTR": { + func() func() { + os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA") + os.Setenv("AWS_SECRET_ACCESS_KEY", "00000000000000000000111111111") + return func() { + os.Clearenv() + } + }, + "AWSPARAMSTR#foo/bar1", + config.NewConfig().WithTokenSeparator("#"), + func() store.Strategy { + s, _ := store.NewParamStore(context.TODO(), log.New(io.Discard)) + return s + }, + nil, + }, "success AWSSECRETS": { func() func() { os.Setenv("AWS_ACCESS_KEY", "AAAAAAAAAAAAAAA")