From d5a59590a129514340007bc06214ad297949e895 Mon Sep 17 00:00:00 2001 From: Erin Call Date: Fri, 27 Dec 2019 16:18:10 -0800 Subject: [PATCH] Shim bare numbers into duration strings [#39] Helm2's --timeout took a number of seconds, rather than the ParseDuration-compatible string that helm3 uses. For backward- compatibility, update a bare number into a duration string. --- docs/parameter_reference.md | 1 + internal/helm/config.go | 7 +++++++ internal/helm/config_test.go | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/docs/parameter_reference.md b/docs/parameter_reference.md index 07d8107..c11aac5 100644 --- a/docs/parameter_reference.md +++ b/docs/parameter_reference.md @@ -67,6 +67,7 @@ Any setting (with the exception of `prefix`; [see below](#user-content-using-the * Booleans can be yaml's `true` and `false` literals or the strings `"true"` and `"false"`. * Durations are strings formatted with the syntax accepted by [golang's ParseDuration function](https://golang.org/pkg/time/#ParseDuration) (e.g. 5m30s) + * For backward-compatibility with drone-helm, a duration can also be an integer, in which case it will be interpreted to mean seconds. * List\s can be a yaml sequence or a comma-separated string. All of the following are equivalent: diff --git a/internal/helm/config.go b/internal/helm/config.go index 987b6de..cf351ae 100644 --- a/internal/helm/config.go +++ b/internal/helm/config.go @@ -4,8 +4,11 @@ import ( "fmt" "github.com/kelseyhightower/envconfig" "io" + "regexp" ) +var justNumbers = regexp.MustCompile(`^\d+$`) + // The Config struct captures the `settings` and `environment` blocks in the application's drone // config. Configuration in drone's `settings` block arrives as uppercase env vars matching the // config key, prefixed with `PLUGIN_`. Config from the `environment` block is uppercased, but does @@ -62,6 +65,10 @@ func NewConfig(stdout, stderr io.Writer) (*Config, error) { } } + if justNumbers.MatchString(cfg.Timeout) { + cfg.Timeout = fmt.Sprintf("%ss", cfg.Timeout) + } + if cfg.Debug && cfg.Stderr != nil { cfg.logDebug() } diff --git a/internal/helm/config_test.go b/internal/helm/config_test.go index 3ca2f91..f39dd0c 100644 --- a/internal/helm/config_test.go +++ b/internal/helm/config_test.go @@ -106,6 +106,13 @@ func (suite *ConfigTestSuite) TestNewConfigWithConflictingVariables() { suite.Equal("2m30s", cfg.Timeout) } +func (suite *ConfigTestSuite) TestNewConfigInfersNumbersAreSeconds() { + suite.setenv("PLUGIN_TIMEOUT", "42") + cfg, err := NewConfig(&strings.Builder{}, &strings.Builder{}) + suite.Require().NoError(err) + suite.Equal("42s", cfg.Timeout) +} + func (suite *ConfigTestSuite) TestNewConfigSetsWriters() { stdout := &strings.Builder{} stderr := &strings.Builder{}