From b4ab12ceea1504928e91021cdb52ba861c95b304 Mon Sep 17 00:00:00 2001 From: ismael FALL Date: Thu, 15 Sep 2022 14:22:02 +0200 Subject: [PATCH 1/5] fix: upgrade ffcli version v2->v3 Signed-off-by: ismael FALL --- go.mod | 2 +- go.sum | 2 ++ go/cmd/yolo/main.go | 4 ++-- go/cmd/yolo/server.go | 4 ++-- go/cmd/yolo/store.go | 4 ++-- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 4e6fd0fb..1c85e415 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/oklog/run v1.1.0 github.com/patrickmn/go-cache v2.1.0+incompatible github.com/peterbourgon/diskv v2.0.1+incompatible - github.com/peterbourgon/ff/v2 v2.0.1 + github.com/peterbourgon/ff/v3 v3.3.0 github.com/rs/cors v1.8.2 github.com/stretchr/signature v0.0.0-20160104132143-168b2a1e1b56 github.com/stretchr/testify v1.8.0 diff --git a/go.sum b/go.sum index ae2e351b..4e023679 100644 --- a/go.sum +++ b/go.sum @@ -305,6 +305,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR github.com/peterbourgon/ff/v2 v2.0.1 h1:yee3393t1CZXgy/9osDb0kdhmOaFhG8vH194/QSs/Eg= github.com/peterbourgon/ff/v2 v2.0.1/go.mod h1:wa7ROgc8n/Zgf6Cfua2Oho6T4XbuqYVxCMMlXjGDxEA= github.com/peterbourgon/ff/v3 v3.0.0/go.mod h1:UILIFjRH5a/ar8TjXYLTkIvSvekZqPm5Eb/qbGk6CT0= +github.com/peterbourgon/ff/v3 v3.3.0 h1:PaKe7GW8orVFh8Unb5jNHS+JZBwWUMa2se0HM6/BI24= +github.com/peterbourgon/ff/v3 v3.3.0/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyXE/eKY9RztQ= github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= diff --git a/go/cmd/yolo/main.go b/go/cmd/yolo/main.go index 6f802726..cf48eb35 100644 --- a/go/cmd/yolo/main.go +++ b/go/cmd/yolo/main.go @@ -25,8 +25,8 @@ import ( _ "github.com/jinzhu/gorm/dialects/sqlite" circleci "github.com/jszwedko/go-circleci" "github.com/peterbourgon/diskv" - ff "github.com/peterbourgon/ff/v2" - "github.com/peterbourgon/ff/v2/ffcli" + ff "github.com/peterbourgon/ff/v3" + "github.com/peterbourgon/ff/v3/ffcli" ) var ( diff --git a/go/cmd/yolo/server.go b/go/cmd/yolo/server.go index ae9f8678..98e60479 100644 --- a/go/cmd/yolo/server.go +++ b/go/cmd/yolo/server.go @@ -14,8 +14,8 @@ import ( "github.com/buildkite/go-buildkite/buildkite" "github.com/jszwedko/go-circleci" "github.com/oklog/run" - "github.com/peterbourgon/ff/v2" - "github.com/peterbourgon/ff/v2/ffcli" + "github.com/peterbourgon/ff/v3" + "github.com/peterbourgon/ff/v3/ffcli" "github.com/tevino/abool" ) diff --git a/go/cmd/yolo/store.go b/go/cmd/yolo/store.go index e84d149a..58b27f18 100644 --- a/go/cmd/yolo/store.go +++ b/go/cmd/yolo/store.go @@ -9,8 +9,8 @@ import ( "berty.tech/yolo/v2/go/pkg/yolosvc" "moul.io/godev" - "github.com/peterbourgon/ff/v2" - "github.com/peterbourgon/ff/v2/ffcli" + "github.com/peterbourgon/ff/v3" + "github.com/peterbourgon/ff/v3/ffcli" ) func storeFlagSet() *flag.FlagSet { From a82b0840bf40a11dd4d4914492095b90899ac10c Mon Sep 17 00:00:00 2001 From: ismael FALL Date: Thu, 15 Sep 2022 15:47:42 +0200 Subject: [PATCH 2/5] fix: upgrade moul/u version Signed-off-by: ismael FALL --- go.mod | 3 ++- go.sum | 4 ++++ go/pkg/yolosvc/service.go | 9 +++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 1c85e415..507762f9 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( moul.io/godev v1.7.0 moul.io/hcfilters v1.3.1 moul.io/pkgman v1.4.3 - moul.io/u v1.24.1-0.20210613090436-cb608187834e + moul.io/u v1.25.1 moul.io/zapconfig v1.4.0 moul.io/zapgorm v1.1.5 ) @@ -69,4 +69,5 @@ require ( google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + moul.io/climan v1.0.0 // indirect ) diff --git a/go.sum b/go.sum index 4e023679..13038e37 100644 --- a/go.sum +++ b/go.sum @@ -786,6 +786,8 @@ howett.net/plist v1.0.0 h1:7CrbWYbPPO/PyNy38b2EB/+gYbjCe2DXBxgtOOZbSQM= howett.net/plist v1.0.0/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g= moul.io/chizap v1.0.3 h1:mliXvvuS5HVo3QP8qPXczWtRM5dQ9UmK3bBVIkZo6ek= moul.io/chizap v1.0.3/go.mod h1:pq4R9kGLwz4XjBc4hodQYuoE7Yc9RUabLBFyyi2uErk= +moul.io/climan v1.0.0 h1:Xc9xnUrLVPK69lnCfVJnCvVtMm4v6Lt2743fnadvpWc= +moul.io/climan v1.0.0/go.mod h1:iT29NKBU5U7cAYxmpt9XXfv3PV1OW+5OKvze553VTwc= moul.io/godev v1.7.0 h1:PgnL7BsCQPPjKwu9V0oxIVm2MyZAHAN2sl0S3+E37U0= moul.io/godev v1.7.0/go.mod h1:5lgSpI1oH7xWpLl2Ew/Nsgk8DiNM6FzN9WV9+lgW8RQ= moul.io/hcfilters v1.3.1 h1:5+/qXU5+uf2f+s9fpwAQC850/3JJ6aLl+ztQAFkLdZ0= @@ -796,6 +798,8 @@ moul.io/u v1.21.0/go.mod h1:4Si+MVxJDNFfkqCOtLS6viqkvfeDGYTwykt2iyQ4MoY= moul.io/u v1.23.0/go.mod h1:ytlQ/zt+Sdk+PFGEx+fpTivoa0ieA5yMo6itRswIWNQ= moul.io/u v1.24.1-0.20210613090436-cb608187834e h1:f/asKkdU5LtgZ13hE6sJdz8oWnZTzvhVmJ+k9ompCBQ= moul.io/u v1.24.1-0.20210613090436-cb608187834e/go.mod h1:ytlQ/zt+Sdk+PFGEx+fpTivoa0ieA5yMo6itRswIWNQ= +moul.io/u v1.25.1 h1:yNbB11OGz2HbBxOPh7lFo2fMgw+j8Af1CbRdacr/+vQ= +moul.io/u v1.25.1/go.mod h1:ggYDXxUjoHpfDsMPD3STqkUZTyA741PZiQhSd+7kRnA= moul.io/zapconfig v1.4.0 h1:J3ND5J3e/qQ++jlpqdSR1EtDNV+iujtvXgLsjy1uyq8= moul.io/zapconfig v1.4.0/go.mod h1:bYTa5j7r82yPmSR6i5CcrPSVoWEbdpN7o9IgndSVby8= moul.io/zapgorm v1.1.5 h1:i7TQYlB5blb8H1NPv3Er3xQgs0lRSIDQW0/dkiIbAa8= diff --git a/go/pkg/yolosvc/service.go b/go/pkg/yolosvc/service.go index 39838485..5b8fb9da 100644 --- a/go/pkg/yolosvc/service.go +++ b/go/pkg/yolosvc/service.go @@ -9,13 +9,14 @@ import ( "berty.tech/yolo/v2/go/pkg/bintray" "berty.tech/yolo/v2/go/pkg/yolopb" "berty.tech/yolo/v2/go/pkg/yolostore" + "go.uber.org/zap" + "moul.io/u" + "github.com/buildkite/go-buildkite/buildkite" "github.com/google/go-github/v32/github" "github.com/jinzhu/gorm" "github.com/jszwedko/go-circleci" "github.com/tevino/abool" - "go.uber.org/zap" - "moul.io/u" ) type Service interface { @@ -86,8 +87,8 @@ func NewService(db *gorm.DB, opts ServiceOpts) (Service, error) { devMode: opts.DevMode, clearCache: opts.ClearCache, artifactsCachePath: opts.ArtifactsCachePath, - iosPrivkeyPath: u.MustExpandUser(opts.IOSPrivkeyPath), - iosProvPath: u.MustExpandUser(opts.IOSProvPath), + iosPrivkeyPath: u.MustExpandPath(opts.IOSPrivkeyPath), + iosProvPath: u.MustExpandPath(opts.IOSProvPath), iosPrivkeyPass: opts.IOSPrivkeyPass, artifactsCacheMapMutex: map[string]*sync.Mutex{}, }, nil From 42eb92346c08e2ede42544f8d3498eda7c1a9c2e Mon Sep 17 00:00:00 2001 From: ismael FALL Date: Thu, 15 Sep 2022 16:40:54 +0200 Subject: [PATCH 3/5] feat: implement moul/climan Signed-off-by: ismael FALL --- go/cmd/yolo/main.go | 56 ++++++++----- go/cmd/yolo/server.go | 190 +++++++++++++++++++++--------------------- go/cmd/yolo/store.go | 54 +++++------- 3 files changed, 153 insertions(+), 147 deletions(-) diff --git a/go/cmd/yolo/main.go b/go/cmd/yolo/main.go index cf48eb35..3a68ca13 100644 --- a/go/cmd/yolo/main.go +++ b/go/cmd/yolo/main.go @@ -3,6 +3,7 @@ package main import ( "context" "flag" + "fmt" "log" "math/rand" "net/http" @@ -13,6 +14,7 @@ import ( "berty.tech/yolo/v2/go/pkg/bintray" "go.uber.org/zap" "golang.org/x/oauth2" + "moul.io/climan" "moul.io/hcfilters" "moul.io/zapconfig" @@ -26,18 +28,22 @@ import ( circleci "github.com/jszwedko/go-circleci" "github.com/peterbourgon/diskv" ff "github.com/peterbourgon/ff/v3" - "github.com/peterbourgon/ff/v3/ffcli" ) -var ( - verbose bool - logFormat string - dbStorePath string - withPreloading bool -) +type flagsBuilder func(fs *flag.FlagSet) + +type GlobalOptions struct { + verbose bool + logFormat string + dbStorePath string + + server server +} + +var optsGlobal = &GlobalOptions{} func main() { - err := yolo(os.Args) + err := yolo(os.Args[1:]) if err != nil { log.Fatalf("err: %+v", err) os.Exit(1) @@ -49,25 +55,33 @@ func yolo(args []string) error { rootFlagSet := flag.NewFlagSet("yolo", flag.ExitOnError) rand.Seed(time.Now().UnixNano()) rootFlagSet.SetOutput(os.Stderr) - rootFlagSet.BoolVar(&verbose, "v", false, "increase log verbosity") - rootFlagSet.StringVar(&logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", ")) - - root := &ffcli.Command{ - ShortUsage: `server [flags] `, - FlagSet: rootFlagSet, - Subcommands: []*ffcli.Command{ - serverCommand(), - dumpObjectsCommand(), - infoCommand(), - treeCommand(), + + commonFlagsBuilder := func(fs *flag.FlagSet) { + fs.BoolVar(&optsGlobal.verbose, "v", false, "increase log verbosity") + fs.StringVar(&optsGlobal.logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", ")) + fs.StringVar(&optsGlobal.dbStorePath, "db-path", ":memory:", "DB Store path") + } + + root := &climan.Command{ + ShortUsage: `server [flags] `, + FlagSetBuilder: commonFlagsBuilder, + Subcommands: []*climan.Command{ + serverCommand(commonFlagsBuilder), + dumpObjectsCommand(commonFlagsBuilder), + infoCommand(commonFlagsBuilder), + treeCommand(commonFlagsBuilder), }, - Options: []ff.Option{ff.WithEnvVarNoPrefix()}, + FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { return flag.ErrHelp }, } - return root.ParseAndRun(context.Background(), os.Args[1:]) + if err := root.Parse(args); err != nil { + return fmt.Errorf("parse error: %w", err) + } + + return root.Run(context.Background()) } func bintrayClientFromArgs(username, token string, logger *zap.Logger) (*bintray.Client, error) { diff --git a/go/cmd/yolo/server.go b/go/cmd/yolo/server.go index 98e60479..c095d99c 100644 --- a/go/cmd/yolo/server.go +++ b/go/cmd/yolo/server.go @@ -10,87 +10,89 @@ import ( "berty.tech/yolo/v2/go/pkg/bintray" "berty.tech/yolo/v2/go/pkg/yolosvc" + "moul.io/climan" "github.com/buildkite/go-buildkite/buildkite" "github.com/jszwedko/go-circleci" "github.com/oklog/run" "github.com/peterbourgon/ff/v3" - "github.com/peterbourgon/ff/v3/ffcli" "github.com/tevino/abool" ) -func serverCommand() *ffcli.Command { - fs := flag.NewFlagSet("server", flag.ExitOnError) - - var ( - devMode bool - withCache bool - maxBuilds int - buildkiteToken string - githubToken string - githubRepos string - bintrayUsername string - bintrayToken string - artifactsCachePath string - circleciToken string - grpcBind string - httpBind string - corsAllowedOrigins string - requestTimeout time.Duration - shutdownTimeout time.Duration - basicAuth string - authSalt string - httpCachePath string - realm string - once bool - iosPrivkeyPath string - iosProvPath string - iosPrivkeyPass string - ) - - fs.BoolVar(&devMode, "dev-mode", false, "enable insecure helpers") - fs.BoolVar(&withCache, "with-cache", false, "enable API caching") - fs.StringVar(&buildkiteToken, "buildkite-token", "", "BuildKite API Token") - fs.StringVar(&bintrayUsername, "bintray-username", "", "Bintray username") - fs.StringVar(&bintrayToken, "bintray-token", "", "Bintray API Token") - fs.StringVar(&circleciToken, "circleci-token", "", "CircleCI API Token") - fs.StringVar(&githubToken, "github-token", "", "GitHub API Token") - fs.StringVar(&githubRepos, "github-repos", "berty/berty", "GitHub repositories to watch") - fs.StringVar(&dbStorePath, "db-path", ":memory:", "DB Store path") - fs.StringVar(&artifactsCachePath, "artifacts-cache-path", "", "Artifacts caching path") - fs.IntVar(&maxBuilds, "max-builds", 100, "maximum builds to fetch from external services (pagination)") - fs.StringVar(&httpBind, "http-bind", ":8000", "HTTP bind address") - fs.StringVar(&grpcBind, "grpc-bind", ":9000", "gRPC bind address") - fs.StringVar(&corsAllowedOrigins, "cors-allowed-origins", "", "CORS allowed origins (*.domain.tld)") - fs.DurationVar(&requestTimeout, "request-timeout", 5*time.Second, "request timeout") - fs.DurationVar(&shutdownTimeout, "shutdown-timeout", 6*time.Second, "server shutdown timeout") - fs.StringVar(&basicAuth, "basic-auth-password", "", "if set, enables basic authentication") - fs.StringVar(&realm, "realm", "Yolo", "authentication Realm") - fs.StringVar(&authSalt, "auth-salt", "", "salt used to generate authentication tokens at the end of the URLs") - fs.StringVar(&httpCachePath, "http-cache-path", "", "if set, will cache http client requests") - fs.BoolVar(&once, "once", false, "just run workers once") - fs.StringVar(&iosPrivkeyPath, "ios-privkey", "", "iOS signing: path to private key or p12 file (PEM or DER format)") - fs.StringVar(&iosProvPath, "ios-prov", "", "iOS signing: path to mobile provisioning profile") - fs.StringVar(&iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file") - - return &ffcli.Command{ +type server struct { + devMode bool + withCache bool + maxBuilds int + buildkiteToken string + githubToken string + githubRepos string + bintrayUsername string + bintrayToken string + artifactsCachePath string + circleciToken string + grpcBind string + httpBind string + corsAllowedOrigins string + requestTimeout time.Duration + shutdownTimeout time.Duration + basicAuth string + authSalt string + httpCachePath string + realm string + once bool + iosPrivkeyPath string + iosProvPath string + iosPrivkeyPass string +} + +func (s server) parse(fs *flag.FlagSet) { + fs.BoolVar(&optsGlobal.server.devMode, "dev-mode", false, "enable insecure helpers") + fs.BoolVar(&optsGlobal.server.withCache, "with-cache", false, "enable API caching") + fs.StringVar(&optsGlobal.server.buildkiteToken, "buildkite-token", "", "BuildKite API Token") + fs.StringVar(&optsGlobal.server.bintrayUsername, "bintray-username", "", "Bintray username") + fs.StringVar(&optsGlobal.server.bintrayToken, "bintray-token", "", "Bintray API Token") + fs.StringVar(&optsGlobal.server.circleciToken, "circleci-token", "", "CircleCI API Token") + fs.StringVar(&optsGlobal.server.githubToken, "github-token", "", "GitHub API Token") + fs.StringVar(&optsGlobal.server.githubRepos, "github-repos", "berty/berty", "GitHub repositories to watch") + fs.StringVar(&optsGlobal.server.artifactsCachePath, "artifacts-cache-path", "", "Artifacts caching path") + fs.IntVar(&optsGlobal.server.maxBuilds, "max-builds", 100, "maximum builds to fetch from external services (pagination)") + fs.StringVar(&optsGlobal.server.httpBind, "http-bind", ":8000", "HTTP bind address") + fs.StringVar(&optsGlobal.server.grpcBind, "grpc-bind", ":9000", "gRPC bind address") + fs.StringVar(&optsGlobal.server.corsAllowedOrigins, "cors-allowed-origins", "", "CORS allowed origins (*.domain.tld)") + fs.DurationVar(&optsGlobal.server.requestTimeout, "request-timeout", 5*time.Second, "request timeout") + fs.DurationVar(&optsGlobal.server.shutdownTimeout, "shutdown-timeout", 6*time.Second, "server shutdown timeout") + fs.StringVar(&optsGlobal.server.basicAuth, "basic-auth-password", "", "if set, enables basic authentication") + fs.StringVar(&optsGlobal.server.realm, "realm", "Yolo", "authentication realm") + fs.StringVar(&optsGlobal.server.authSalt, "auth-salt", "", "salt used to generate authentication tokens at the end of the URLs") + fs.StringVar(&optsGlobal.server.httpCachePath, "http-cache-path", "", "if set, will cache http client requests") + fs.BoolVar(&optsGlobal.server.once, "once", false, "just run workers once") + fs.StringVar(&optsGlobal.server.iosPrivkeyPath, "ios-privkey", "", "iOS signing: path to private key or p12 file (PEM or DER format)") + fs.StringVar(&optsGlobal.server.iosProvPath, "ios-prov", "", "iOS signing: path to mobile provisioning profile") + fs.StringVar(&optsGlobal.server.iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file") +} + +func serverCommand(commonFlagsBuilder flagsBuilder) *climan.Command { + return &climan.Command{ Name: `server`, ShortHelp: `Start a Yolo Server`, - FlagSet: fs, - Options: []ff.Option{ff.WithEnvVarNoPrefix()}, + FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, + FlagSetBuilder: func(fs *flag.FlagSet) { + commonFlagsBuilder(fs) + optsGlobal.server.parse(fs) + }, Exec: func(ctx context.Context, _ []string) error { - logger, err := loggerFromArgs(verbose, logFormat) + logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) if err != nil { return err } ctx, cancel := context.WithCancel(ctx) defer cancel() - roundTripper, rtCloser := roundTripperFromArgs(ctx, httpCachePath, logger) + roundTripper, rtCloser := roundTripperFromArgs(ctx, optsGlobal.server.httpCachePath, logger) defer rtCloser() http.DefaultTransport = roundTripper - db, err := dbFromArgs(dbStorePath, logger) + db, err := dbFromArgs(optsGlobal.dbStorePath, logger) if err != nil { return err } @@ -103,37 +105,37 @@ func serverCommand() *ffcli.Command { // service conns var bkc *buildkite.Client - if buildkiteToken != "" { - bkc, err = buildkiteClientFromArgs(buildkiteToken) + if optsGlobal.server.buildkiteToken != "" { + bkc, err = buildkiteClientFromArgs(optsGlobal.server.buildkiteToken) if err != nil { return err } } var ccc *circleci.Client - if circleciToken != "" { - ccc, err = circleciClientFromArgs(circleciToken) + if optsGlobal.server.circleciToken != "" { + ccc, err = circleciClientFromArgs(optsGlobal.server.circleciToken) if err != nil { return err } } var btc *bintray.Client - if bintrayToken != "" && bintrayUsername != "" { - btc, err = bintrayClientFromArgs(bintrayUsername, bintrayToken, logger) + if optsGlobal.server.bintrayToken != "" && optsGlobal.server.bintrayUsername != "" { + btc, err = bintrayClientFromArgs(optsGlobal.server.bintrayUsername, optsGlobal.server.bintrayToken, logger) if err != nil { return err } } - ghc, err := githubClientFromArgs(githubToken) + ghc, err := githubClientFromArgs(optsGlobal.server.githubToken) if err != nil { return err } - if devMode { + if optsGlobal.server.devMode { logger.Warn("--dev-mode: insecure helpers are enabled") } - if artifactsCachePath != "" { - if err := os.MkdirAll(artifactsCachePath, 0o755); err != nil { + if optsGlobal.server.artifactsCachePath != "" { + if err := os.MkdirAll(optsGlobal.server.artifactsCachePath, 0o755); err != nil { return err } } @@ -145,12 +147,12 @@ func serverCommand() *ffcli.Command { CircleciClient: ccc, BintrayClient: btc, GithubClient: ghc, - AuthSalt: authSalt, - DevMode: devMode, - ArtifactsCachePath: artifactsCachePath, - IOSPrivkeyPath: iosPrivkeyPath, - IOSProvPath: iosProvPath, - IOSPrivkeyPass: iosPrivkeyPass, + AuthSalt: optsGlobal.server.authSalt, + DevMode: optsGlobal.server.devMode, + ArtifactsCachePath: optsGlobal.server.artifactsCachePath, + IOSPrivkeyPath: optsGlobal.server.iosPrivkeyPath, + IOSProvPath: optsGlobal.server.iosProvPath, + IOSPrivkeyPass: optsGlobal.server.iosPrivkeyPass, }) if err != nil { return err @@ -158,39 +160,39 @@ func serverCommand() *ffcli.Command { // service workers if bkc != nil { - opts := yolosvc.BuildkiteWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once} + opts := yolosvc.BuildkiteWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once} gr.Add(func() error { return svc.BuildkiteWorker(ctx, opts) }, func(_ error) { cancel() }) } if ccc != nil { - opts := yolosvc.CircleciWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once} + opts := yolosvc.CircleciWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once} gr.Add(func() error { return svc.CircleciWorker(ctx, opts) }, func(_ error) { cancel() }) } if btc != nil { - opts := yolosvc.BintrayWorkerOpts{Logger: logger, ClearCache: cc, Once: once} + opts := yolosvc.BintrayWorkerOpts{Logger: logger, ClearCache: cc, Once: optsGlobal.server.once} gr.Add(func() error { return svc.BintrayWorker(ctx, opts) }, func(_ error) { cancel() }) } - if !once { // disable pkgman when running with --once - opts := yolosvc.PkgmanWorkerOpts{Logger: logger, ClearCache: cc, Once: once} + if !optsGlobal.server.once { // disable pkgman when running with --once + opts := yolosvc.PkgmanWorkerOpts{Logger: logger, ClearCache: cc, Once: optsGlobal.server.once} gr.Add(func() error { return svc.PkgmanWorker(ctx, opts) }, func(_ error) { cancel() }) } - if githubToken != "" { - opts := yolosvc.GithubWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once, ReposFilter: githubRepos, Token: githubToken} + if optsGlobal.server.githubToken != "" { + opts := yolosvc.GithubWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once, ReposFilter: optsGlobal.server.githubRepos, Token: optsGlobal.server.githubToken} gr.Add(func() error { return svc.GitHubWorker(ctx, opts) }, func(_ error) { cancel() }) } // server/API server, err := yolosvc.NewServer(ctx, svc, yolosvc.ServerOpts{ Logger: logger, - GRPCBind: grpcBind, - HTTPBind: httpBind, - RequestTimeout: requestTimeout, - ShutdownTimeout: shutdownTimeout, - CORSAllowedOrigins: corsAllowedOrigins, - BasicAuth: basicAuth, - Realm: realm, - AuthSalt: authSalt, - DevMode: devMode, - WithCache: withCache, + GRPCBind: optsGlobal.server.grpcBind, + HTTPBind: optsGlobal.server.httpBind, + RequestTimeout: optsGlobal.server.requestTimeout, + ShutdownTimeout: optsGlobal.server.shutdownTimeout, + CORSAllowedOrigins: optsGlobal.server.corsAllowedOrigins, + BasicAuth: optsGlobal.server.basicAuth, + Realm: optsGlobal.server.realm, + AuthSalt: optsGlobal.server.authSalt, + DevMode: optsGlobal.server.devMode, + WithCache: optsGlobal.server.withCache, ClearCache: cc, }) if err != nil { diff --git a/go/cmd/yolo/store.go b/go/cmd/yolo/store.go index 58b27f18..49b3c46f 100644 --- a/go/cmd/yolo/store.go +++ b/go/cmd/yolo/store.go @@ -2,37 +2,27 @@ package main import ( "context" - "flag" "fmt" "berty.tech/yolo/v2/go/pkg/yolopb" "berty.tech/yolo/v2/go/pkg/yolosvc" + "moul.io/climan" "moul.io/godev" "github.com/peterbourgon/ff/v3" - "github.com/peterbourgon/ff/v3/ffcli" ) -func storeFlagSet() *flag.FlagSet { - fs := flag.NewFlagSet("store", flag.ExitOnError) - - fs.StringVar(&dbStorePath, "db-path", ":memory:", "DB Store path") - fs.BoolVar(&withPreloading, "with-preloading", false, "with auto DB preloading") - - return fs -} - -func dumpObjectsCommand() *ffcli.Command { - return &ffcli.Command{ - Name: `dump-objects`, - FlagSet: storeFlagSet(), - Options: []ff.Option{ff.WithEnvVarNoPrefix()}, +func dumpObjectsCommand(commonFlagsBuilder flagsBuilder) *climan.Command { + return &climan.Command{ + Name: `dump-objects`, + FlagSetBuilder: commonFlagsBuilder, + FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { - logger, err := loggerFromArgs(verbose, logFormat) + logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) if err != nil { return err } - db, err := dbFromArgs(dbStorePath, logger) + db, err := dbFromArgs(optsGlobal.dbStorePath, logger) if err != nil { return err } @@ -61,17 +51,17 @@ func dumpObjectsCommand() *ffcli.Command { } } -func treeCommand() *ffcli.Command { - return &ffcli.Command{ - Name: `tree`, - FlagSet: storeFlagSet(), - Options: []ff.Option{ff.WithEnvVarNoPrefix()}, +func treeCommand(commonFlagsBuilder flagsBuilder) *climan.Command { + return &climan.Command{ + Name: `tree`, + FlagSetBuilder: commonFlagsBuilder, + FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(ctx context.Context, _ []string) error { - logger, err := loggerFromArgs(verbose, logFormat) + logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) if err != nil { return err } - db, err := dbFromArgs(dbStorePath, logger) + db, err := dbFromArgs(optsGlobal.dbStorePath, logger) if err != nil { return err } @@ -99,17 +89,17 @@ func treeCommand() *ffcli.Command { } } -func infoCommand() *ffcli.Command { - return &ffcli.Command{ - Name: `info`, - FlagSet: storeFlagSet(), - Options: []ff.Option{ff.WithEnvVarNoPrefix()}, +func infoCommand(commonFlagsBuilder flagsBuilder) *climan.Command { + return &climan.Command{ + Name: `info`, + FlagSetBuilder: commonFlagsBuilder, + FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { - logger, err := loggerFromArgs(verbose, logFormat) + logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) if err != nil { return err } - db, err := dbFromArgs(dbStorePath, logger) + db, err := dbFromArgs(optsGlobal.dbStorePath, logger) if err != nil { return err } From d0ef6cafa621fa8338636f79596271a33ce83abf Mon Sep 17 00:00:00 2001 From: ismael FALL Date: Thu, 15 Sep 2022 17:41:35 +0200 Subject: [PATCH 4/5] feat: use commonFlagsBuilder as a method Signed-off-by: ismael FALL --- go/cmd/yolo/main.go | 24 +++++++++++------------- go/cmd/yolo/server.go | 4 ++-- go/cmd/yolo/store.go | 12 ++++++------ 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/go/cmd/yolo/main.go b/go/cmd/yolo/main.go index 3a68ca13..6f7857d7 100644 --- a/go/cmd/yolo/main.go +++ b/go/cmd/yolo/main.go @@ -30,8 +30,6 @@ import ( ff "github.com/peterbourgon/ff/v3" ) -type flagsBuilder func(fs *flag.FlagSet) - type GlobalOptions struct { verbose bool logFormat string @@ -40,6 +38,12 @@ type GlobalOptions struct { server server } +func (g *GlobalOptions) commonFlagsBuilder(fs *flag.FlagSet) { + fs.BoolVar(&g.verbose, "v", false, "increase log verbosity") + fs.StringVar(&g.logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", ")) + fs.StringVar(&g.dbStorePath, "db-path", ":memory:", "DB Store path") +} + var optsGlobal = &GlobalOptions{} func main() { @@ -56,20 +60,14 @@ func yolo(args []string) error { rand.Seed(time.Now().UnixNano()) rootFlagSet.SetOutput(os.Stderr) - commonFlagsBuilder := func(fs *flag.FlagSet) { - fs.BoolVar(&optsGlobal.verbose, "v", false, "increase log verbosity") - fs.StringVar(&optsGlobal.logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", ")) - fs.StringVar(&optsGlobal.dbStorePath, "db-path", ":memory:", "DB Store path") - } - root := &climan.Command{ ShortUsage: `server [flags] `, - FlagSetBuilder: commonFlagsBuilder, + FlagSetBuilder: optsGlobal.commonFlagsBuilder, Subcommands: []*climan.Command{ - serverCommand(commonFlagsBuilder), - dumpObjectsCommand(commonFlagsBuilder), - infoCommand(commonFlagsBuilder), - treeCommand(commonFlagsBuilder), + serverCommand(), + dumpObjectsCommand(), + infoCommand(), + treeCommand(), }, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { diff --git a/go/cmd/yolo/server.go b/go/cmd/yolo/server.go index c095d99c..e396b9df 100644 --- a/go/cmd/yolo/server.go +++ b/go/cmd/yolo/server.go @@ -71,13 +71,13 @@ func (s server) parse(fs *flag.FlagSet) { fs.StringVar(&optsGlobal.server.iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file") } -func serverCommand(commonFlagsBuilder flagsBuilder) *climan.Command { +func serverCommand() *climan.Command { return &climan.Command{ Name: `server`, ShortHelp: `Start a Yolo Server`, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, FlagSetBuilder: func(fs *flag.FlagSet) { - commonFlagsBuilder(fs) + optsGlobal.commonFlagsBuilder(fs) optsGlobal.server.parse(fs) }, Exec: func(ctx context.Context, _ []string) error { diff --git a/go/cmd/yolo/store.go b/go/cmd/yolo/store.go index 49b3c46f..6b3a2734 100644 --- a/go/cmd/yolo/store.go +++ b/go/cmd/yolo/store.go @@ -12,10 +12,10 @@ import ( "github.com/peterbourgon/ff/v3" ) -func dumpObjectsCommand(commonFlagsBuilder flagsBuilder) *climan.Command { +func dumpObjectsCommand() *climan.Command { return &climan.Command{ Name: `dump-objects`, - FlagSetBuilder: commonFlagsBuilder, + FlagSetBuilder: optsGlobal.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) @@ -51,10 +51,10 @@ func dumpObjectsCommand(commonFlagsBuilder flagsBuilder) *climan.Command { } } -func treeCommand(commonFlagsBuilder flagsBuilder) *climan.Command { +func treeCommand() *climan.Command { return &climan.Command{ Name: `tree`, - FlagSetBuilder: commonFlagsBuilder, + FlagSetBuilder: optsGlobal.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(ctx context.Context, _ []string) error { logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) @@ -89,10 +89,10 @@ func treeCommand(commonFlagsBuilder flagsBuilder) *climan.Command { } } -func infoCommand(commonFlagsBuilder flagsBuilder) *climan.Command { +func infoCommand() *climan.Command { return &climan.Command{ Name: `info`, - FlagSetBuilder: commonFlagsBuilder, + FlagSetBuilder: optsGlobal.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) From c0c27bd44ad064750bbb3e3e1900834f0e848969 Mon Sep 17 00:00:00 2001 From: ismael FALL Date: Mon, 19 Sep 2022 12:53:07 +0200 Subject: [PATCH 5/5] fix: apply review comments Signed-off-by: ismael FALL --- go/cmd/yolo/main.go | 25 ++++++--- go/cmd/yolo/server.go | 126 +++++++++++++++++++++--------------------- go/cmd/yolo/store.go | 18 +++--- 3 files changed, 88 insertions(+), 81 deletions(-) diff --git a/go/cmd/yolo/main.go b/go/cmd/yolo/main.go index 6f7857d7..09525861 100644 --- a/go/cmd/yolo/main.go +++ b/go/cmd/yolo/main.go @@ -30,23 +30,30 @@ import ( ff "github.com/peterbourgon/ff/v3" ) -type GlobalOptions struct { +type globalOptions struct { verbose bool logFormat string dbStorePath string - server server + server serverOpts } -func (g *GlobalOptions) commonFlagsBuilder(fs *flag.FlagSet) { - fs.BoolVar(&g.verbose, "v", false, "increase log verbosity") - fs.StringVar(&g.logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", ")) - fs.StringVar(&g.dbStorePath, "db-path", ":memory:", "DB Store path") +func (g *globalOptions) applyDefaults() { + g.verbose = false + g.logFormat = "console" + g.dbStorePath = ":memory:" } -var optsGlobal = &GlobalOptions{} +func (g *globalOptions) commonFlagsBuilder(fs *flag.FlagSet) { + fs.BoolVar(&g.verbose, "v", g.verbose, "increase log verbosity") + fs.StringVar(&g.logFormat, "log-format", g.logFormat, strings.Join(zapconfig.AvailablePresets, ", ")) + fs.StringVar(&g.dbStorePath, "db-path", g.dbStorePath, "DB Store path") +} + +var glOpts = &globalOptions{} func main() { + glOpts.applyDefaults() err := yolo(os.Args[1:]) if err != nil { log.Fatalf("err: %+v", err) @@ -61,8 +68,8 @@ func yolo(args []string) error { rootFlagSet.SetOutput(os.Stderr) root := &climan.Command{ - ShortUsage: `server [flags] `, - FlagSetBuilder: optsGlobal.commonFlagsBuilder, + ShortUsage: `yolo [flags] `, + FlagSetBuilder: glOpts.commonFlagsBuilder, Subcommands: []*climan.Command{ serverCommand(), dumpObjectsCommand(), diff --git a/go/cmd/yolo/server.go b/go/cmd/yolo/server.go index e396b9df..68e97f42 100644 --- a/go/cmd/yolo/server.go +++ b/go/cmd/yolo/server.go @@ -19,7 +19,7 @@ import ( "github.com/tevino/abool" ) -type server struct { +type serverOpts struct { devMode bool withCache bool maxBuilds int @@ -45,30 +45,30 @@ type server struct { iosPrivkeyPass string } -func (s server) parse(fs *flag.FlagSet) { - fs.BoolVar(&optsGlobal.server.devMode, "dev-mode", false, "enable insecure helpers") - fs.BoolVar(&optsGlobal.server.withCache, "with-cache", false, "enable API caching") - fs.StringVar(&optsGlobal.server.buildkiteToken, "buildkite-token", "", "BuildKite API Token") - fs.StringVar(&optsGlobal.server.bintrayUsername, "bintray-username", "", "Bintray username") - fs.StringVar(&optsGlobal.server.bintrayToken, "bintray-token", "", "Bintray API Token") - fs.StringVar(&optsGlobal.server.circleciToken, "circleci-token", "", "CircleCI API Token") - fs.StringVar(&optsGlobal.server.githubToken, "github-token", "", "GitHub API Token") - fs.StringVar(&optsGlobal.server.githubRepos, "github-repos", "berty/berty", "GitHub repositories to watch") - fs.StringVar(&optsGlobal.server.artifactsCachePath, "artifacts-cache-path", "", "Artifacts caching path") - fs.IntVar(&optsGlobal.server.maxBuilds, "max-builds", 100, "maximum builds to fetch from external services (pagination)") - fs.StringVar(&optsGlobal.server.httpBind, "http-bind", ":8000", "HTTP bind address") - fs.StringVar(&optsGlobal.server.grpcBind, "grpc-bind", ":9000", "gRPC bind address") - fs.StringVar(&optsGlobal.server.corsAllowedOrigins, "cors-allowed-origins", "", "CORS allowed origins (*.domain.tld)") - fs.DurationVar(&optsGlobal.server.requestTimeout, "request-timeout", 5*time.Second, "request timeout") - fs.DurationVar(&optsGlobal.server.shutdownTimeout, "shutdown-timeout", 6*time.Second, "server shutdown timeout") - fs.StringVar(&optsGlobal.server.basicAuth, "basic-auth-password", "", "if set, enables basic authentication") - fs.StringVar(&optsGlobal.server.realm, "realm", "Yolo", "authentication realm") - fs.StringVar(&optsGlobal.server.authSalt, "auth-salt", "", "salt used to generate authentication tokens at the end of the URLs") - fs.StringVar(&optsGlobal.server.httpCachePath, "http-cache-path", "", "if set, will cache http client requests") - fs.BoolVar(&optsGlobal.server.once, "once", false, "just run workers once") - fs.StringVar(&optsGlobal.server.iosPrivkeyPath, "ios-privkey", "", "iOS signing: path to private key or p12 file (PEM or DER format)") - fs.StringVar(&optsGlobal.server.iosProvPath, "ios-prov", "", "iOS signing: path to mobile provisioning profile") - fs.StringVar(&optsGlobal.server.iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file") +func (s *serverOpts) configureFlagSet(fs *flag.FlagSet) { + fs.BoolVar(&s.devMode, "dev-mode", false, "enable insecure helpers") + fs.BoolVar(&s.withCache, "with-cache", false, "enable API caching") + fs.StringVar(&s.buildkiteToken, "buildkite-token", "", "BuildKite API Token") + fs.StringVar(&s.bintrayUsername, "bintray-username", "", "Bintray username") + fs.StringVar(&s.bintrayToken, "bintray-token", "", "Bintray API Token") + fs.StringVar(&s.circleciToken, "circleci-token", "", "CircleCI API Token") + fs.StringVar(&s.githubToken, "github-token", "", "GitHub API Token") + fs.StringVar(&s.githubRepos, "github-repos", "berty/berty", "GitHub repositories to watch") + fs.StringVar(&s.artifactsCachePath, "artifacts-cache-path", "", "Artifacts caching path") + fs.IntVar(&s.maxBuilds, "max-builds", 100, "maximum builds to fetch from external services (pagination)") + fs.StringVar(&s.httpBind, "http-bind", ":8000", "HTTP bind address") + fs.StringVar(&s.grpcBind, "grpc-bind", ":9000", "gRPC bind address") + fs.StringVar(&s.corsAllowedOrigins, "cors-allowed-origins", "", "CORS allowed origins (*.domain.tld)") + fs.DurationVar(&s.requestTimeout, "request-timeout", 5*time.Second, "request timeout") + fs.DurationVar(&s.shutdownTimeout, "shutdown-timeout", 6*time.Second, "server shutdown timeout") + fs.StringVar(&s.basicAuth, "basic-auth-password", "", "if set, enables basic authentication") + fs.StringVar(&s.realm, "realm", "Yolo", "authentication realm") + fs.StringVar(&s.authSalt, "auth-salt", "", "salt used to generate authentication tokens at the end of the URLs") + fs.StringVar(&s.httpCachePath, "http-cache-path", "", "if set, will cache http client requests") + fs.BoolVar(&s.once, "once", false, "just run workers once") + fs.StringVar(&s.iosPrivkeyPath, "ios-privkey", "", "iOS signing: path to private key or p12 file (PEM or DER format)") + fs.StringVar(&s.iosProvPath, "ios-prov", "", "iOS signing: path to mobile provisioning profile") + fs.StringVar(&s.iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file") } func serverCommand() *climan.Command { @@ -77,22 +77,22 @@ func serverCommand() *climan.Command { ShortHelp: `Start a Yolo Server`, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, FlagSetBuilder: func(fs *flag.FlagSet) { - optsGlobal.commonFlagsBuilder(fs) - optsGlobal.server.parse(fs) + glOpts.commonFlagsBuilder(fs) + glOpts.server.configureFlagSet(fs) }, Exec: func(ctx context.Context, _ []string) error { - logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) + logger, err := loggerFromArgs(glOpts.verbose, glOpts.logFormat) if err != nil { return err } ctx, cancel := context.WithCancel(ctx) defer cancel() - roundTripper, rtCloser := roundTripperFromArgs(ctx, optsGlobal.server.httpCachePath, logger) + roundTripper, rtCloser := roundTripperFromArgs(ctx, glOpts.server.httpCachePath, logger) defer rtCloser() http.DefaultTransport = roundTripper - db, err := dbFromArgs(optsGlobal.dbStorePath, logger) + db, err := dbFromArgs(glOpts.dbStorePath, logger) if err != nil { return err } @@ -105,37 +105,37 @@ func serverCommand() *climan.Command { // service conns var bkc *buildkite.Client - if optsGlobal.server.buildkiteToken != "" { - bkc, err = buildkiteClientFromArgs(optsGlobal.server.buildkiteToken) + if glOpts.server.buildkiteToken != "" { + bkc, err = buildkiteClientFromArgs(glOpts.server.buildkiteToken) if err != nil { return err } } var ccc *circleci.Client - if optsGlobal.server.circleciToken != "" { - ccc, err = circleciClientFromArgs(optsGlobal.server.circleciToken) + if glOpts.server.circleciToken != "" { + ccc, err = circleciClientFromArgs(glOpts.server.circleciToken) if err != nil { return err } } var btc *bintray.Client - if optsGlobal.server.bintrayToken != "" && optsGlobal.server.bintrayUsername != "" { - btc, err = bintrayClientFromArgs(optsGlobal.server.bintrayUsername, optsGlobal.server.bintrayToken, logger) + if glOpts.server.bintrayToken != "" && glOpts.server.bintrayUsername != "" { + btc, err = bintrayClientFromArgs(glOpts.server.bintrayUsername, glOpts.server.bintrayToken, logger) if err != nil { return err } } - ghc, err := githubClientFromArgs(optsGlobal.server.githubToken) + ghc, err := githubClientFromArgs(glOpts.server.githubToken) if err != nil { return err } - if optsGlobal.server.devMode { + if glOpts.server.devMode { logger.Warn("--dev-mode: insecure helpers are enabled") } - if optsGlobal.server.artifactsCachePath != "" { - if err := os.MkdirAll(optsGlobal.server.artifactsCachePath, 0o755); err != nil { + if glOpts.server.artifactsCachePath != "" { + if err := os.MkdirAll(glOpts.server.artifactsCachePath, 0o755); err != nil { return err } } @@ -147,12 +147,12 @@ func serverCommand() *climan.Command { CircleciClient: ccc, BintrayClient: btc, GithubClient: ghc, - AuthSalt: optsGlobal.server.authSalt, - DevMode: optsGlobal.server.devMode, - ArtifactsCachePath: optsGlobal.server.artifactsCachePath, - IOSPrivkeyPath: optsGlobal.server.iosPrivkeyPath, - IOSProvPath: optsGlobal.server.iosProvPath, - IOSPrivkeyPass: optsGlobal.server.iosPrivkeyPass, + AuthSalt: glOpts.server.authSalt, + DevMode: glOpts.server.devMode, + ArtifactsCachePath: glOpts.server.artifactsCachePath, + IOSPrivkeyPath: glOpts.server.iosPrivkeyPath, + IOSProvPath: glOpts.server.iosProvPath, + IOSPrivkeyPass: glOpts.server.iosPrivkeyPass, }) if err != nil { return err @@ -160,39 +160,39 @@ func serverCommand() *climan.Command { // service workers if bkc != nil { - opts := yolosvc.BuildkiteWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once} + opts := yolosvc.BuildkiteWorkerOpts{Logger: logger, MaxBuilds: glOpts.server.maxBuilds, ClearCache: cc, Once: glOpts.server.once} gr.Add(func() error { return svc.BuildkiteWorker(ctx, opts) }, func(_ error) { cancel() }) } if ccc != nil { - opts := yolosvc.CircleciWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once} + opts := yolosvc.CircleciWorkerOpts{Logger: logger, MaxBuilds: glOpts.server.maxBuilds, ClearCache: cc, Once: glOpts.server.once} gr.Add(func() error { return svc.CircleciWorker(ctx, opts) }, func(_ error) { cancel() }) } if btc != nil { - opts := yolosvc.BintrayWorkerOpts{Logger: logger, ClearCache: cc, Once: optsGlobal.server.once} + opts := yolosvc.BintrayWorkerOpts{Logger: logger, ClearCache: cc, Once: glOpts.server.once} gr.Add(func() error { return svc.BintrayWorker(ctx, opts) }, func(_ error) { cancel() }) } - if !optsGlobal.server.once { // disable pkgman when running with --once - opts := yolosvc.PkgmanWorkerOpts{Logger: logger, ClearCache: cc, Once: optsGlobal.server.once} + if !glOpts.server.once { // disable pkgman when running with --once + opts := yolosvc.PkgmanWorkerOpts{Logger: logger, ClearCache: cc, Once: glOpts.server.once} gr.Add(func() error { return svc.PkgmanWorker(ctx, opts) }, func(_ error) { cancel() }) } - if optsGlobal.server.githubToken != "" { - opts := yolosvc.GithubWorkerOpts{Logger: logger, MaxBuilds: optsGlobal.server.maxBuilds, ClearCache: cc, Once: optsGlobal.server.once, ReposFilter: optsGlobal.server.githubRepos, Token: optsGlobal.server.githubToken} + if glOpts.server.githubToken != "" { + opts := yolosvc.GithubWorkerOpts{Logger: logger, MaxBuilds: glOpts.server.maxBuilds, ClearCache: cc, Once: glOpts.server.once, ReposFilter: glOpts.server.githubRepos, Token: glOpts.server.githubToken} gr.Add(func() error { return svc.GitHubWorker(ctx, opts) }, func(_ error) { cancel() }) } // server/API server, err := yolosvc.NewServer(ctx, svc, yolosvc.ServerOpts{ Logger: logger, - GRPCBind: optsGlobal.server.grpcBind, - HTTPBind: optsGlobal.server.httpBind, - RequestTimeout: optsGlobal.server.requestTimeout, - ShutdownTimeout: optsGlobal.server.shutdownTimeout, - CORSAllowedOrigins: optsGlobal.server.corsAllowedOrigins, - BasicAuth: optsGlobal.server.basicAuth, - Realm: optsGlobal.server.realm, - AuthSalt: optsGlobal.server.authSalt, - DevMode: optsGlobal.server.devMode, - WithCache: optsGlobal.server.withCache, + GRPCBind: glOpts.server.grpcBind, + HTTPBind: glOpts.server.httpBind, + RequestTimeout: glOpts.server.requestTimeout, + ShutdownTimeout: glOpts.server.shutdownTimeout, + CORSAllowedOrigins: glOpts.server.corsAllowedOrigins, + BasicAuth: glOpts.server.basicAuth, + Realm: glOpts.server.realm, + AuthSalt: glOpts.server.authSalt, + DevMode: glOpts.server.devMode, + WithCache: glOpts.server.withCache, ClearCache: cc, }) if err != nil { diff --git a/go/cmd/yolo/store.go b/go/cmd/yolo/store.go index 6b3a2734..379004ab 100644 --- a/go/cmd/yolo/store.go +++ b/go/cmd/yolo/store.go @@ -15,14 +15,14 @@ import ( func dumpObjectsCommand() *climan.Command { return &climan.Command{ Name: `dump-objects`, - FlagSetBuilder: optsGlobal.commonFlagsBuilder, + FlagSetBuilder: glOpts.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { - logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) + logger, err := loggerFromArgs(glOpts.verbose, glOpts.logFormat) if err != nil { return err } - db, err := dbFromArgs(optsGlobal.dbStorePath, logger) + db, err := dbFromArgs(glOpts.dbStorePath, logger) if err != nil { return err } @@ -54,14 +54,14 @@ func dumpObjectsCommand() *climan.Command { func treeCommand() *climan.Command { return &climan.Command{ Name: `tree`, - FlagSetBuilder: optsGlobal.commonFlagsBuilder, + FlagSetBuilder: glOpts.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(ctx context.Context, _ []string) error { - logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) + logger, err := loggerFromArgs(glOpts.verbose, glOpts.logFormat) if err != nil { return err } - db, err := dbFromArgs(optsGlobal.dbStorePath, logger) + db, err := dbFromArgs(glOpts.dbStorePath, logger) if err != nil { return err } @@ -92,14 +92,14 @@ func treeCommand() *climan.Command { func infoCommand() *climan.Command { return &climan.Command{ Name: `info`, - FlagSetBuilder: optsGlobal.commonFlagsBuilder, + FlagSetBuilder: glOpts.commonFlagsBuilder, FFOptions: []ff.Option{ff.WithEnvVarNoPrefix()}, Exec: func(_ context.Context, _ []string) error { - logger, err := loggerFromArgs(optsGlobal.verbose, optsGlobal.logFormat) + logger, err := loggerFromArgs(glOpts.verbose, glOpts.logFormat) if err != nil { return err } - db, err := dbFromArgs(optsGlobal.dbStorePath, logger) + db, err := dbFromArgs(glOpts.dbStorePath, logger) if err != nil { return err }