From a42c14e6404eadbb14a76923a3404950f8b6e391 Mon Sep 17 00:00:00 2001 From: mugioka Date: Mon, 3 Oct 2022 14:21:44 +0900 Subject: [PATCH 1/2] imprv: convert hyphen included in repo name to underbar with gatherOCIUsernamePassword. Most shells do not support hyphens in environment variables. However, there are cases where you may want to include hyphens in the repository name. Therefore, I have included a process in `gatherOCIUsernamePassword` to replace hyphens with underbar. Signed-off-by: mugioka --- docs/index.md | 14 ++++++++++++++ pkg/state/state.go | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 887cd839..4fba3cf2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1498,6 +1498,20 @@ export MYOCIREGISTRY_USERNAME=spongebob export MYOCIREGISTRY_PASSWORD=squarepants ``` +If `` contains hyphens, the environment variable to be read is the hyphen replaced by an underscore., e.g. + +```yaml +repositories: + - name: my-oci-registry + url: myregistry.azurecr.io + oci: true +``` + +```shell +export MY_OCI_REGISTRY_USERNAME=spongebob +export MY_OCI_REGISTRY_PASSWORD=squarepants +``` + ## Attribution We use: diff --git a/pkg/state/state.go b/pkg/state/state.go index 97d921ae..69ffd0dc 100644 --- a/pkg/state/state.go +++ b/pkg/state/state.go @@ -455,15 +455,16 @@ func (st *HelmState) SyncRepos(helm RepoUpdater, shouldSkip map[string]bool) ([] func gatherOCIUsernamePassword(repoName string, username string, password string) (string, string) { var user, pass string + replacedRepoName := strings.ToUpper(strings.Replace(repoName, "-", "_", -1)) if username != "" { user = username - } else if u := os.Getenv(fmt.Sprintf("%s_USERNAME", strings.ToUpper(repoName))); u != "" { + } else if u := os.Getenv(fmt.Sprintf("%s_USERNAME", replacedRepoName)); u != "" { user = u } if password != "" { pass = password - } else if p := os.Getenv(fmt.Sprintf("%s_PASSWORD", strings.ToUpper(repoName))); p != "" { + } else if p := os.Getenv(fmt.Sprintf("%s_PASSWORD", replacedRepoName)); p != "" { pass = p } From 68728ef352c338a54274a689f91aa6c769c3bf20 Mon Sep 17 00:00:00 2001 From: mugioka Date: Mon, 3 Oct 2022 15:45:23 +0900 Subject: [PATCH 2/2] chore: add test for gatherOCIUsernamePassword. Signed-off-by: mugioka --- pkg/state/state_test.go | 69 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/pkg/state/state_test.go b/pkg/state/state_test.go index 0a53092a..bfecd9cf 100644 --- a/pkg/state/state_test.go +++ b/pkg/state/state_test.go @@ -2420,3 +2420,72 @@ func TestReverse(t *testing.T) { } } } + +func Test_gatherOCIUsernamePassword(t *testing.T) { + type args struct { + repoName string + username string + password string + } + tests := []struct { + name string + args args + envUsernameKey string + envUsernameValue string + envPasswordKey string + envPasswordValue string + wantUsername string + wantPassword string + }{ + { + name: "pass username/password from args", + args: args{ + repoName: "myOCIRegistry", + username: "username1", + password: "password1", + }, + wantUsername: "username1", + wantPassword: "password1", + }, + { + name: "repoName does not contain hyphen, read username/password from environment variables", + args: args{ + repoName: "myOCIRegistry", + }, + envUsernameKey: "MYOCIREGISTRY_USERNAME", + envUsernameValue: "username2", + envPasswordKey: "MYOCIREGISTRY_PASSWORD", + envPasswordValue: "password2", + wantUsername: "username2", + wantPassword: "password2", + }, + { + name: "repoName contain hyphen, read username/password from environment variables", + args: args{ + repoName: "my-oci-registry", + }, + envUsernameKey: "MY_OCI_REGISTRY_USERNAME", + envUsernameValue: "username3", + envPasswordKey: "MY_OCI_REGISTRY_PASSWORD", + envPasswordValue: "password3", + wantUsername: "username3", + wantPassword: "password3", + }, + } + for i := range tests { + tt := tests[i] + t.Run(tt.name, func(t *testing.T) { + if tt.envUsernameKey != "" && tt.envUsernameValue != "" { + t.Setenv(tt.envUsernameKey, tt.envUsernameValue) + } + if tt.envPasswordKey != "" && tt.envPasswordValue != "" { + t.Setenv(tt.envPasswordKey, tt.envPasswordValue) + } + + gotUsername, gotPassword := gatherOCIUsernamePassword(tt.args.repoName, tt.args.username, tt.args.password) + if gotUsername != tt.wantUsername || gotPassword != tt.wantPassword { + t.Errorf("gatherOCIUsernamePassword() = got username/password %v/%v, want username/password %v/%v", gotUsername, gotPassword, tt.wantUsername, tt.wantPassword) + } + }) + } +}