diff --git a/docs/parameter_reference.md b/docs/parameter_reference.md index 3073f06..82cf58a 100644 --- a/docs/parameter_reference.md +++ b/docs/parameter_reference.md @@ -95,7 +95,7 @@ values_files: [ "./over_9,000.yml" ] values_files: [ "./over_9", "000.yml" ] ``` -### Interpolating secrets into the `values` and `string_values` settings +### Interpolating secrets into the `values`, `string_values` and `add_repos` settings If you want to send secrets to your charts, you can use syntax similar to shell variable interpolation--either `$VARNAME` or `$${VARNAME}`. The double dollar-sign is necessary when using curly brackets; using curly brackets with a single dollar-sign will trigger Drone's string substitution (which can't use arbitrary environment variables). If an environment variable is not set, it will be treated as if it were set to the empty string. diff --git a/internal/env/config.go b/internal/env/config.go index 68e49f3..ab338b5 100644 --- a/internal/env/config.go +++ b/internal/env/config.go @@ -2,11 +2,12 @@ package env import ( "fmt" - "github.com/kelseyhightower/envconfig" "io" "os" "regexp" "strings" + + "github.com/kelseyhightower/envconfig" ) var ( @@ -119,6 +120,10 @@ func (cfg *Config) loadValuesSecrets() { cfg.Values = findVar.ReplaceAllStringFunc(cfg.Values, replacer) cfg.StringValues = findVar.ReplaceAllStringFunc(cfg.StringValues, replacer) + + for i := 0; i < len(cfg.AddRepos); i++ { + cfg.AddRepos[i] = findVar.ReplaceAllStringFunc(cfg.AddRepos[i], replacer) + } } func (cfg Config) logDebug() { diff --git a/internal/env/config_test.go b/internal/env/config_test.go index 15510e0..10f87ff 100644 --- a/internal/env/config_test.go +++ b/internal/env/config_test.go @@ -2,10 +2,11 @@ package env import ( "fmt" - "github.com/stretchr/testify/suite" "os" "strings" "testing" + + "github.com/stretchr/testify/suite" ) type ConfigTestSuite struct { @@ -191,12 +192,14 @@ func (suite *ConfigTestSuite) TestNewConfigWithValuesSecrets() { suite.setenv("SECRET_RINGS", "1") suite.setenv("PLUGIN_VALUES", "fire=$SECRET_FIRE,water=${SECRET_WATER}") suite.setenv("PLUGIN_STRING_VALUES", "rings=${SECRET_RINGS}") + suite.setenv("PLUGIN_ADD_REPOS", "testrepo=https://user:${SECRET_FIRE}@testrepo.test") cfg, err := NewConfig(&strings.Builder{}, &strings.Builder{}) suite.Require().NoError(err) suite.Equal("fire=Eru_Ilúvatar,water=", cfg.Values) suite.Equal("rings=1", cfg.StringValues) + suite.Equal(fmt.Sprintf("testrepo=https://user:%s@testrepo.test", os.Getenv("SECRET_FIRE")), cfg.AddRepos[0]) } func (suite *ConfigTestSuite) TestValuesSecretsWithDebugLogging() {