From 5860f81aa205921914824c9911f539cd917c1acb Mon Sep 17 00:00:00 2001 From: "Urko." Date: Mon, 29 Apr 2024 21:50:16 +0200 Subject: [PATCH] refactor: change configruation to yml --- .env.example | 4 -- app.example.yml | 3 ++ configs/app.yml | 3 ++ go.mod | 3 +- go.sum | 6 +-- internal/watcher/testdata/config.yml | 3 ++ .../watcher/testdata/test-script.sh | 0 internal/watcher/watcher_test.go | 20 ++++++--- kit/cfg/config.go | 45 ------------------- kit/config/config.go | 27 +++++++++++ main.go | 7 ++- pkg/testdata/test-script.sh | 2 + pkg/watcher_test.go | 5 +-- 13 files changed, 63 insertions(+), 65 deletions(-) delete mode 100644 .env.example create mode 100644 app.example.yml create mode 100644 configs/app.yml create mode 100644 internal/watcher/testdata/config.yml rename test-script.sh => internal/watcher/testdata/test-script.sh (100%) delete mode 100644 kit/cfg/config.go create mode 100644 kit/config/config.go create mode 100644 pkg/testdata/test-script.sh diff --git a/.env.example b/.env.example deleted file mode 100644 index 3b3884f..0000000 --- a/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -SCRIPT_BINARY_PATH= -WEBHOOK_SCRIPT_PATH= -FILE_TO_WATCH_PATH= -TEST_FILE_TO_WATCH_PATH= \ No newline at end of file diff --git a/app.example.yml b/app.example.yml new file mode 100644 index 0000000..7f72dbb --- /dev/null +++ b/app.example.yml @@ -0,0 +1,3 @@ +script_binary_path: "/bin/bash" +webhook_script_path: "./test-script.sh" +file_to_watch_path: "./test_monitor.txt" \ No newline at end of file diff --git a/configs/app.yml b/configs/app.yml new file mode 100644 index 0000000..7f72dbb --- /dev/null +++ b/configs/app.yml @@ -0,0 +1,3 @@ +script_binary_path: "/bin/bash" +webhook_script_path: "./test-script.sh" +file_to_watch_path: "./test_monitor.txt" \ No newline at end of file diff --git a/go.mod b/go.mod index f09097b..4cc991e 100644 --- a/go.mod +++ b/go.mod @@ -4,9 +4,8 @@ go 1.22 require ( github.com/fsnotify/fsnotify v1.7.0 - github.com/joho/godotenv v1.5.1 - github.com/kelseyhightower/envconfig v1.4.0 github.com/stretchr/testify v1.8.2 + gopkg.in/yaml.v2 v2.4.0 ) require ( diff --git a/go.sum b/go.sum index 3358739..89a6ab7 100644 --- a/go.sum +++ b/go.sum @@ -3,10 +3,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= -github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8= -github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= 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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -20,6 +16,8 @@ golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/watcher/testdata/config.yml b/internal/watcher/testdata/config.yml new file mode 100644 index 0000000..6a23021 --- /dev/null +++ b/internal/watcher/testdata/config.yml @@ -0,0 +1,3 @@ +script_binary_path: "/bin/bash" +webhook_script_path: "testdata/test-script.sh" +file_to_watch_path: "testdata/test_monitor.txt" \ No newline at end of file diff --git a/test-script.sh b/internal/watcher/testdata/test-script.sh similarity index 100% rename from test-script.sh rename to internal/watcher/testdata/test-script.sh diff --git a/internal/watcher/watcher_test.go b/internal/watcher/watcher_test.go index 825d954..4772b94 100644 --- a/internal/watcher/watcher_test.go +++ b/internal/watcher/watcher_test.go @@ -3,10 +3,11 @@ package watcher import ( "context" "errors" + "fmt" "testing" "time" - "gitea.urkob.com/urko/git-webhook-ci/kit/cfg" + "gitea.urkob.com/urko/git-webhook-ci/kit/config" "gitea.urkob.com/urko/git-webhook-ci/pkg" "github.com/fsnotify/fsnotify" "github.com/stretchr/testify/require" @@ -32,7 +33,7 @@ var ( binaryPath = "" scriptPath = "" executionMaxTimeout = time.Second * 2 - config *cfg.Config + cfg *config.Config events = []fsnotify.Event{ { Name: "test event", @@ -45,7 +46,7 @@ var ( } ) -func init() { +func TestMain(t *testing.M) { mockDeploy = func(binaryPath, scriptPath string) error { return nil } @@ -53,8 +54,16 @@ func init() { mockErrorDeploy = func(binaryPath, scriptPath string) error { return errIntentional } +} + +func LoadConfig(t *testing.T) { + t.Helper() + cf, err := config.LoadConfig("testdata/config.yaml") + if err != nil { + panic(fmt.Errorf("Error loading config: %w", err)) + } + cfg = cf - config = cfg.NewConfig("../../.env") } func sendTestEvents(w *watcher) { @@ -76,6 +85,7 @@ func newWatcherWithCtorError() *watcher { } func Test_NewNotifier(t *testing.T) { + LoadConfig(t) require.NotNil(t, NewNotifier()) } @@ -97,7 +107,7 @@ func Test_Close(t *testing.T) { func Test_Monitor(t *testing.T) { w := newWatcher() - err := w.Monitor(config.TestFileToWatchPath) + err := w.Monitor(cfg.FileToWatchPath) require.NoError(t, err) } diff --git a/kit/cfg/config.go b/kit/cfg/config.go deleted file mode 100644 index 92a910a..0000000 --- a/kit/cfg/config.go +++ /dev/null @@ -1,45 +0,0 @@ -package cfg - -import ( - "log" - "os/exec" - "strings" - - "github.com/joho/godotenv" - "github.com/kelseyhightower/envconfig" -) - -type Config struct { - ScriptBinaryPath string `required:"true" split_words:"true"` - WebhookScriptPath string `required:"true" split_words:"true"` - FileToWatchPath string `required:"true" split_words:"true"` - TestFileToWatchPath string `required:"false" split_words:"true"` -} - -func RootDir() string { - cmdOut, err := exec.Command("git", "rev-parse", "--show-toplevel").Output() - if err != nil { - log.Fatalf("exec.Command: %s", err) - return "" - } - - rootDir := strings.TrimSpace(string(cmdOut)) - return rootDir -} - -func NewConfig(envFilePath string) *Config { - if envFilePath != "" { - err := godotenv.Load(envFilePath) - if err != nil { - log.Fatalf("environment variable ENV is empty and an error occurred while loading the .env file\n") - } - } - - cfg := &Config{} - err := envconfig.Process("", cfg) - if err != nil { - log.Fatalf("envconfig.Process: %s\n", err) - } - - return cfg -} diff --git a/kit/config/config.go b/kit/config/config.go new file mode 100644 index 0000000..1f1a365 --- /dev/null +++ b/kit/config/config.go @@ -0,0 +1,27 @@ +package config + +import ( + "os" + + "gopkg.in/yaml.v2" +) + +type Config struct { + ScriptBinaryPath string `yaml:"script_binary_path"` + WebhookScriptPath string `yaml:"webhook_script_path"` + FileToWatchPath string `yaml:"file_to_watch_path"` +} + +func LoadConfig(path string) (*Config, error) { + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + var config Config + if err := yaml.Unmarshal(data, &config); err != nil { + return nil, err + } + + return &config, nil +} diff --git a/main.go b/main.go index e1a22f5..c997877 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,7 @@ import ( "syscall" "gitea.urkob.com/urko/git-webhook-ci/internal/watcher" - "gitea.urkob.com/urko/git-webhook-ci/kit/cfg" + "gitea.urkob.com/urko/git-webhook-ci/kit/config" "gitea.urkob.com/urko/git-webhook-ci/pkg" ) @@ -24,7 +24,10 @@ func main() { flag.Parse() } - config := cfg.NewConfig(envFilePath) + config, err := config.LoadConfig(envFilePath) + if err != nil { + panic(err) + } notifierIface = watcher.NewNotifier() watcherIface = watcher.NewWatcher(notifierIface, pkg.Deploy) diff --git a/pkg/testdata/test-script.sh b/pkg/testdata/test-script.sh new file mode 100644 index 0000000..b4110f4 --- /dev/null +++ b/pkg/testdata/test-script.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo "deploy script has been called" \ No newline at end of file diff --git a/pkg/watcher_test.go b/pkg/watcher_test.go index a695b19..69f895d 100644 --- a/pkg/watcher_test.go +++ b/pkg/watcher_test.go @@ -3,13 +3,12 @@ package pkg import ( "testing" - "gitea.urkob.com/urko/git-webhook-ci/kit/cfg" "github.com/stretchr/testify/require" ) -var ( +const ( binaryPath = "/bin/bash" - scriptPath = cfg.RootDir() + "/test-script.sh" + scriptPath = "testdata/test-script.sh" ) func TestDeploy(t *testing.T) {