diff --git a/cenv.go b/cenv.go index c574ab8..1ef4808 100644 --- a/cenv.go +++ b/cenv.go @@ -1,6 +1,6 @@ package cenv -import "github.com/echo-webkom/cenv/cenv" +import "github.com/echo-webkom/cenv/internal" const ( defaultEnvPath = ".env" @@ -14,9 +14,14 @@ const ( // The default path for both .env and cenv.schema.json are used, which are // both in the project root directory. To specify path use LoadEx() func Load() error { - return cenv.LoadAndCheck(defaultEnvPath, defaultSchemaPath) + return internal.LoadAndCheck(defaultEnvPath, defaultSchemaPath, false) } func LoadEx(envPath string, schemaPath string) error { - return cenv.LoadAndCheck(envPath, schemaPath) + return internal.LoadAndCheck(envPath, schemaPath, false) +} + +// Verify that the values in the loaded environment mathces the schema. +func Verify() error { + return internal.LoadAndCheck(defaultEnvPath, defaultSchemaPath, true) } diff --git a/cmd/cmd.go b/cmd/cmd.go index 311c663..ef9b1d6 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -5,7 +5,7 @@ import ( "os" "os/exec" - "github.com/echo-webkom/cenv/cenv" + "github.com/echo-webkom/cenv/internal" "github.com/fatih/color" ) @@ -15,8 +15,12 @@ func showHelp() { fmt.Println("Commands:") fmt.Println(" check Check if .env matches schema") fmt.Println(" update Generate schema based on .env") - fmt.Println(" fix Automatically fix issues with the .env") - fmt.Println(" Tries to reuse previous env values") + fmt.Println(" fix Fix will") + fmt.Println(" create .env if one does not exist") + fmt.Println(" fill in default/public values for empty fields") + fmt.Println(" automatically fix issues with the .env if any") + fmt.Println(" always reuse values already in the .env") + fmt.Println(" tags Show list of available tags and their uses") fmt.Println(" help Show this help message") fmt.Println(" version Show version") fmt.Println(" upgrade Upgrade to latest version") @@ -29,6 +33,22 @@ func showHelp() { fmt.Println() } +func showTags() { + fmt.Println("List of tags") + fmt.Println() + fmt.Println(" required Field has to have a non-empty value") + fmt.Println(" public Field is static and shown in schema") + fmt.Println(" default Field will be set to given default value if empty") + fmt.Println(" length Field must have given length") + fmt.Println(" format Field must have given format (gokenizer pattern)") + fmt.Println(" See github.com/jesperkha/gokenizer") + fmt.Println(" enum Field must be one of the given values") + fmt.Println(" Values are separated by a |") + fmt.Println(" Example: @enum user | admin | guest") + fmt.Println() + +} + func errorExitS(message string) { color.RGB(237, 93, 83).Println(fmt.Sprintf("cenv: %s", message)) os.Exit(1) @@ -78,6 +98,11 @@ func Run() { return } + if command == "tags" { + showTags() + return + } + if command == "version" || command == "--version" || command == "-v" { if Version == "" { fmt.Println("you are running a development version") @@ -101,21 +126,21 @@ func Run() { } if command == "fix" { - if err := cenv.Fix(envPath, schemaPath); err != nil { + if err := internal.Fix(envPath, schemaPath); err != nil { errorExit(err) } return } if command == "check" { - if err := cenv.Check(envPath, schemaPath); err != nil { + if err := internal.Check(envPath, schemaPath); err != nil { errorExit(err) } return } if command == "update" { - if err := cenv.Update(envPath, schemaPath); err != nil { + if err := internal.Update(envPath, schemaPath); err != nil { errorExit(err) } return diff --git a/cenv/cenv.go b/internal/cenv.go similarity index 99% rename from cenv/cenv.go rename to internal/cenv.go index 4e5ebfa..9867a33 100644 --- a/cenv/cenv.go +++ b/internal/cenv.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "fmt" diff --git a/cenv/cenv_test.go b/internal/cenv_test.go similarity index 94% rename from cenv/cenv_test.go rename to internal/cenv_test.go index 16213c1..85619e6 100644 --- a/cenv/cenv_test.go +++ b/internal/cenv_test.go @@ -1,4 +1,4 @@ -package cenv_test +package internal_test import ( "os" @@ -6,7 +6,7 @@ import ( "strings" "testing" - "github.com/echo-webkom/cenv/cenv" + "github.com/echo-webkom/cenv/internal" ) func TestUpdate(t *testing.T) { @@ -45,7 +45,7 @@ func TestUpdate(t *testing.T) { t.Fatalf("failed to write cenv.schema.json file: %v", err) } - err := cenv.Update(envPath, schemaPath) + err := internal.Update(envPath, schemaPath) if (err != nil) && !test.expectError { t.Fatalf("Update failed: %v", err) } @@ -103,7 +103,7 @@ FOO=bar`, t.Fatalf("failed to write cenv.schema.json file: %v", err) } - err := cenv.Check(envPath, schemaPath) + err := internal.Check(envPath, schemaPath) if (err != nil) && !test.expectError { t.Fatalf("Check failed: %v", err) } @@ -139,7 +139,7 @@ func TestFix(t *testing.T) { t.Fatalf("failed to write cenv.schema.json file: %v", err) } - if err := cenv.Fix(envPath, schemaPath); err != nil { + if err := internal.Fix(envPath, schemaPath); err != nil { t.Fatalf("Fix failed: %v", err) } diff --git a/cenv/error.go b/internal/error.go similarity index 95% rename from cenv/error.go rename to internal/error.go index 5771062..31c286c 100644 --- a/cenv/error.go +++ b/internal/error.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "errors" diff --git a/cenv/parser.go b/internal/parser.go similarity index 99% rename from cenv/parser.go rename to internal/parser.go index 5a48202..b7c5be2 100644 --- a/cenv/parser.go +++ b/internal/parser.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "fmt" diff --git a/cenv/parser_test.go b/internal/parser_test.go similarity index 99% rename from cenv/parser_test.go rename to internal/parser_test.go index 122f42f..4466181 100644 --- a/cenv/parser_test.go +++ b/internal/parser_test.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "os" diff --git a/cenv/pkg.go b/internal/pkg.go similarity index 70% rename from cenv/pkg.go rename to internal/pkg.go index 532e918..933dc7b 100644 --- a/cenv/pkg.go +++ b/internal/pkg.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "os" @@ -6,13 +6,13 @@ import ( "github.com/joho/godotenv" ) -func LoadAndCheck(envPath, schemaPath string) error { +func LoadAndCheck(envPath, schemaPath string, ignoreEnv bool) error { env, err := ReadSchema(schemaPath) if err != nil { return err } - if err := godotenv.Load(envPath); err != nil { + if err := godotenv.Load(envPath); !ignoreEnv && err != nil { return err } diff --git a/cenv/schema.go b/internal/schema.go similarity index 99% rename from cenv/schema.go rename to internal/schema.go index ba39c69..02694e2 100644 --- a/cenv/schema.go +++ b/internal/schema.go @@ -1,4 +1,4 @@ -package cenv +package internal import ( "encoding/json"