diff --git a/go.mod b/go.mod index 9428d3f..c82cd30 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/go-git/go-git/v5 v5.11.0 github.com/open-feature/go-sdk v1.9.0 github.com/open-feature/go-sdk-contrib/providers/flagsmith v0.1.4 + github.com/open-feature/go-sdk-contrib/providers/from-env v0.1.4 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.2 diff --git a/go.sum b/go.sum index c5f8b52..27350aa 100644 --- a/go.sum +++ b/go.sum @@ -91,6 +91,8 @@ github.com/open-feature/go-sdk v1.9.0 h1:1Nyj+XNHfL0rRGZgGCbZ29CHDD57PQJL7Q/2ZbW github.com/open-feature/go-sdk v1.9.0/go.mod h1:n5BM4DfvIiKaWWquZnL/yVihcGM5aLsz7rNYE3BkXAM= github.com/open-feature/go-sdk-contrib/providers/flagsmith v0.1.4 h1:YfKBV2j43WtlgjFZfL0tizHD6MiL/wgcv2rC3HwRDh4= github.com/open-feature/go-sdk-contrib/providers/flagsmith v0.1.4/go.mod h1:m/VoKIYDWaFuPqEW1A/9z/ecps+J8/LZXYpZ6z1yfB8= +github.com/open-feature/go-sdk-contrib/providers/from-env v0.1.4 h1:zB2nWO6lwSEIeLBQSwjVFA4tnBtRjni+Ylfj/Mjz5Ew= +github.com/open-feature/go-sdk-contrib/providers/from-env v0.1.4/go.mod h1:bgnc2nFZKNiGRBeQ86MyA5kbiSLYykWtH9AYhT/Y8QY= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= diff --git a/lib/config/models.go b/lib/config/models.go index d349866..5987662 100644 --- a/lib/config/models.go +++ b/lib/config/models.go @@ -4,6 +4,7 @@ type ProviderType string const ( Flagsmith ProviderType = "flagsmith" + FromEnv ProviderType = "env" ) type DestinationType string diff --git a/lib/provider/provider.go b/lib/provider/provider.go index d46ad60..f56d9d4 100644 --- a/lib/provider/provider.go +++ b/lib/provider/provider.go @@ -8,11 +8,13 @@ import ( "github.com/go-logr/logr" "github.com/graytonio/flagops/lib/config" flagsmith "github.com/open-feature/go-sdk-contrib/providers/flagsmith/pkg" + fromEnv "github.com/open-feature/go-sdk-contrib/providers/from-env/pkg" "github.com/open-feature/go-sdk/openfeature" ) var providerConfigMap = map[config.ProviderType]providerConfig{ config.Flagsmith: configureFlagsmithProvider, + config.FromEnv: configureFromEnvProvider, } func ConfigureProviders(envs map[string]config.Environment) (map[string]*openfeature.Client, error) { @@ -38,4 +40,9 @@ func configureFlagsmithProvider(name string, env config.Environment) (*openfeatu provider := flagsmith.NewProvider(client, flagsmith.WithUsingBooleanConfigValue()) openfeature.SetNamedProvider(fmt.Sprintf("%s-%s", name, env.Provider), provider) return openfeature.NewClient(fmt.Sprintf("%s-%s", name, env.Provider)).WithLogger(logr.Discard()), nil -} \ No newline at end of file +} + +func configureFromEnvProvider(name string, env config.Environment) (*openfeature.Client, error) { + openfeature.SetNamedProvider(fmt.Sprintf("%s-%s", name, env.Provider), &fromEnv.FromEnvProvider{}) + return openfeature.NewClient(fmt.Sprintf("%s-%s", name, env.Provider)).WithLogger(logr.Discard()), nil +} diff --git a/tests/.flagops.yaml b/tests/.flagops.yaml index a7c44a5..c78165a 100644 --- a/tests/.flagops.yaml +++ b/tests/.flagops.yaml @@ -1,16 +1,23 @@ envs: - production: + flagsmith: provider: flagsmith apiKey: h8jqBWsXuGqtW4EKY945Cm + env: + provider: env paths: - path: basic/test.txt - env: production + env: flagsmith dest: type: file path: basic/output.txt - path: conditional/test.txt - env: production + env: flagsmith dest: type: file - path: conditional/output.txt \ No newline at end of file + path: conditional/output.txt + - path: env/test.txt + env: env + dest: + type: file + path: env/output.txt \ No newline at end of file diff --git a/tests/env/expected.txt b/tests/env/expected.txt new file mode 100644 index 0000000..0a33007 --- /dev/null +++ b/tests/env/expected.txt @@ -0,0 +1,3 @@ +test string +3 +true \ No newline at end of file diff --git a/tests/env/test.txt b/tests/env/test.txt new file mode 100644 index 0000000..4196993 --- /dev/null +++ b/tests/env/test.txt @@ -0,0 +1,3 @@ +[{ env "string_feature" }] +[{ env "integer_feature" }] +[{ env "bool_feature_enabled" }] \ No newline at end of file diff --git a/tests/flagops b/tests/flagops index 80a55e3..14dddfa 100755 Binary files a/tests/flagops and b/tests/flagops differ diff --git a/tests/makefile b/tests/makefile index 499466f..13fde8c 100644 --- a/tests/makefile +++ b/tests/makefile @@ -1,6 +1,10 @@ SUBDIRS := $(wildcard */) +export string_feature = {"defaultVariant":"string","variants":[{"name":"string","targetingKey":"","criteria":[],"value":"test string"}]} +export integer_feature = {"defaultVariant":"int","variants":[{"name":"int","targetingKey":"","criteria":[],"value":3}]} +export bool_feature = {"defaultVariant":"bool","variants":[{"name":"bool","targetingKey":"","criteria":[],"value":true}]} + .PHONY: test test: ${SUBDIRS} @./flagops