Compare commits
2 Commits
master
...
4b820d5424
| Author | SHA1 | Date | |
|---|---|---|---|
| 4b820d5424 | |||
| a02b701a11 |
@@ -154,12 +154,12 @@ steps:
|
|||||||
- name: test
|
- name: test
|
||||||
image: golang
|
image: golang
|
||||||
commands:
|
commands:
|
||||||
- cd definition
|
- cd provider/definition
|
||||||
- go test ./...
|
- go test ./...
|
||||||
|
|
||||||
- name: golangci-lint
|
- name: golangci-lint
|
||||||
image: golangci/golangci-lint:v1.55
|
image: golangci/golangci-lint:v1.55
|
||||||
commands:
|
commands:
|
||||||
- cd definition
|
- cd provider/definition
|
||||||
- golangci-lint run
|
- golangci-lint run
|
||||||
|
|
||||||
|
|||||||
@@ -1,174 +0,0 @@
|
|||||||
package config_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"gitoa.ru/go-4devs/config"
|
|
||||||
"gitoa.ru/go-4devs/config/provider/arg"
|
|
||||||
"gitoa.ru/go-4devs/config/provider/env"
|
|
||||||
"gitoa.ru/go-4devs/config/provider/watcher"
|
|
||||||
"gitoa.ru/go-4devs/config/test"
|
|
||||||
)
|
|
||||||
|
|
||||||
func ExampleClient_Value() {
|
|
||||||
ctx := context.Background()
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_LISTEN", "8080")
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_HOST", "localhost")
|
|
||||||
|
|
||||||
args := os.Args
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
os.Args = args
|
|
||||||
}()
|
|
||||||
|
|
||||||
os.Args = []string{"main.go", "--host=gitoa.ru"}
|
|
||||||
|
|
||||||
// read json config
|
|
||||||
|
|
||||||
config, err := config.New(
|
|
||||||
arg.New(),
|
|
||||||
env.New(test.Namespace, test.AppName),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
port, err := config.Value(ctx, "listen")
|
|
||||||
if err != nil {
|
|
||||||
log.Print("listen", err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
hostValue, err := config.Value(ctx, "host")
|
|
||||||
if err != nil {
|
|
||||||
log.Print("host ", err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("listen from env: %d\n", port.Int())
|
|
||||||
fmt.Printf("replace env host by args: %v\n", hostValue.String())
|
|
||||||
// Output:
|
|
||||||
// listen from env: 8080
|
|
||||||
// replace env host by args: gitoa.ru
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExampleClient_Watch() {
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_EXAMPLE_ENABLE", "true")
|
|
||||||
|
|
||||||
watcher, err := config.New(
|
|
||||||
watcher.New(time.Microsecond, env.New(test.Namespace, test.AppName)),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
wg := sync.WaitGroup{}
|
|
||||||
wg.Add(1)
|
|
||||||
|
|
||||||
err = watcher.Watch(ctx, func(ctx context.Context, oldVar, newVar config.Value) error {
|
|
||||||
fmt.Println("update example_enable old: ", oldVar.Bool(), " new:", newVar.Bool())
|
|
||||||
wg.Done()
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}, "example_enable")
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_EXAMPLE_ENABLE", "false")
|
|
||||||
|
|
||||||
err = watcher.Watch(ctx, func(ctx context.Context, oldVar, newVar config.Value) error {
|
|
||||||
fmt.Println("update example_db_dsn old: ", oldVar.String(), " new:", newVar.String())
|
|
||||||
wg.Done()
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}, "example_db_dsn")
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
wg.Wait()
|
|
||||||
|
|
||||||
// Output:
|
|
||||||
// update example_enable old: true new: false
|
|
||||||
}
|
|
||||||
|
|
||||||
func ExampleClient_Value_factory() {
|
|
||||||
ctx := context.Background()
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_LISTEN", "8080")
|
|
||||||
_ = os.Setenv("FDEVS_CONFIG_HOST", "localhost")
|
|
||||||
_ = os.Setenv("FDEVS_GOLANG_HOST", "go.dev")
|
|
||||||
|
|
||||||
args := os.Args
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
os.Args = args
|
|
||||||
}()
|
|
||||||
|
|
||||||
os.Args = []string{"main.go", "--env=golang"}
|
|
||||||
|
|
||||||
config, err := config.New(
|
|
||||||
arg.New(),
|
|
||||||
config.Factory(func(ctx context.Context, cfg config.Provider) (config.Provider, error) {
|
|
||||||
val, err := cfg.Value(ctx, "env")
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed read config file:%w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return env.New(test.Namespace, val.String()), nil
|
|
||||||
}),
|
|
||||||
env.New(test.Namespace, test.AppName),
|
|
||||||
)
|
|
||||||
if err != nil {
|
|
||||||
log.Print(err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
envName, err := config.Value(ctx, "env")
|
|
||||||
if err != nil {
|
|
||||||
log.Print("env ", err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
host, err := config.Value(ctx, "host")
|
|
||||||
if err != nil {
|
|
||||||
log.Print("host ", err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
listen, err := config.Value(ctx, "listen")
|
|
||||||
if err != nil {
|
|
||||||
log.Print("listen", err)
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("envName from env: %s\n", envName.String())
|
|
||||||
fmt.Printf("host from env with app name golang: %s\n", host.String())
|
|
||||||
fmt.Printf("listen from env with default app name: %s\n", listen.String())
|
|
||||||
// Output:
|
|
||||||
// envName from env: golang
|
|
||||||
// host from env with app name golang: go.dev
|
|
||||||
// listen from env with default app name: 8080
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
module gitoa.ru/go-4devs/config/definition
|
module gitoa.ru/go-4devs/config/definition
|
||||||
|
|
||||||
go 1.21
|
go 1.21.5
|
||||||
|
|
||||||
require github.com/iancoleman/strcase v0.3.0
|
require github.com/iancoleman/strcase v0.3.0
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
package definition
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
|
||||||
"gitoa.ru/go-4devs/config/definition"
|
|
||||||
"gitoa.ru/go-4devs/config/definition/group"
|
|
||||||
"gitoa.ru/go-4devs/config/definition/option"
|
|
||||||
"gitoa.ru/go-4devs/config/definition/proto"
|
|
||||||
"gitoa.ru/go-4devs/log/level"
|
|
||||||
)
|
|
||||||
|
|
||||||
func Configure(ctx context.Context, def *definition.Definition) error {
|
|
||||||
def.Add(
|
|
||||||
option.String("test", "test description", option.Default("defult")),
|
|
||||||
option.Int("int", "test int description", option.Default(2)),
|
|
||||||
group.New("group", "group description", option.String("test", "test description")),
|
|
||||||
option.Time("start", "start at", option.Default(time.Now())),
|
|
||||||
option.Duration("timer", "timer", option.Default(time.Hour)),
|
|
||||||
group.New("log", "logger",
|
|
||||||
option.New("level", "log level", level.Level(0), option.Default(level.Debug)),
|
|
||||||
option.New("logrus", "logrus level", logrus.Level(0), option.Default(logrus.DebugLevel)),
|
|
||||||
proto.New("sevice", "cutom service log", option.New("level", "log level", level.Level(0), option.Default(level.Debug))),
|
|
||||||
),
|
|
||||||
option.New("erors", "skiped errors", []string{}),
|
|
||||||
proto.New("proto_errors", "proto errors", option.New("erors", "skiped errors", []string{})),
|
|
||||||
)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
//go:build ignore
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"go/format"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"gitoa.ru/go-4devs/config/definition"
|
|
||||||
"gitoa.ru/go-4devs/config/definition/generate"
|
|
||||||
"gitoa.ru/go-4devs/config/eample"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
if err := run(); err != nil {
|
|
||||||
fmt.Fprintln(os.Stdout, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func run() error {
|
|
||||||
ctx := context.Background()
|
|
||||||
def := definition.New()
|
|
||||||
if err := eample.Configure(ctx, &def); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
f, err := os.Create("eample/defenition_input.go")
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
gerr := generate.Run(f, "eample", def, generate.ViewOption{
|
|
||||||
Struct: "Configure",
|
|
||||||
Suffix: "Input",
|
|
||||||
Errors: generate.ViewErrors{
|
|
||||||
Default: []string{
|
|
||||||
"gitoa.ru/go-4devs/config.ErrVariableNotFound",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
if gerr != nil {
|
|
||||||
return gerr
|
|
||||||
}
|
|
||||||
|
|
||||||
in, err := os.ReadFile(f.Name())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
out, err := format.Source(in)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return os.WriteFile(f.Name(), out, 0644)
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
module gitoa.ru/go-4devs/config/example
|
|
||||||
|
|
||||||
go 1.21.5
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/sirupsen/logrus v1.9.3
|
|
||||||
gitoa.ru/go-4devs/config/definition v0.0.0-20240125203435-5586adc4e3d8
|
|
||||||
gitoa.ru/go-4devs/log v0.5.3
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
|
||||||
github.com/iancoleman/strcase v0.3.0 // indirect
|
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
|
|
||||||
)
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
|
||||||
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/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
|
|
||||||
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
|
||||||
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/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
|
|
||||||
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
|
||||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
|
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
|
||||||
gitoa.ru/go-4devs/config/definition v0.0.0-20240125203435-5586adc4e3d8 h1:PZ4SE0gq719+lXorGaRPfGSSO2JpfxTWCWOSsna+7Yw=
|
|
||||||
gitoa.ru/go-4devs/config/definition v0.0.0-20240125203435-5586adc4e3d8/go.mod h1:jV6jF0PsK4ffNC8hrBxMx33PVJtnW5O6S/sGNJDqrd4=
|
|
||||||
gitoa.ru/go-4devs/log v0.5.3 h1:o/4DcypxbgQ9GEfUWrZ3FVrVfttuJgLs2ptMVPj47sE=
|
|
||||||
gitoa.ru/go-4devs/log v0.5.3/go.mod h1:tREtjEH2cTHl0p3uCVcH9g5tlqtsVNI/tDQVfq53Ty4=
|
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
|
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
|
||||||
Reference in New Issue
Block a user