Skip to content

Commit 0ff5fde

Browse files
authored
feat: modify flags define (#457)
1 parent c60a978 commit 0ff5fde

File tree

4 files changed

+358
-307
lines changed

4 files changed

+358
-307
lines changed

go/cmd/yolo/main.go

Lines changed: 16 additions & 306 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,16 @@ package main
33
import (
44
"context"
55
"flag"
6-
"fmt"
76
"log"
87
"math/rand"
98
"net/http"
109
"os"
1110
"strings"
12-
"syscall"
1311
"time"
1412

1513
"berty.tech/yolo/v2/go/pkg/bintray"
16-
"berty.tech/yolo/v2/go/pkg/yolopb"
17-
"berty.tech/yolo/v2/go/pkg/yolosvc"
1814
"go.uber.org/zap"
1915
"golang.org/x/oauth2"
20-
"moul.io/godev"
2116
"moul.io/hcfilters"
2217
"moul.io/zapconfig"
2318

@@ -29,11 +24,16 @@ import (
2924
"github.com/jinzhu/gorm"
3025
_ "github.com/jinzhu/gorm/dialects/sqlite"
3126
circleci "github.com/jszwedko/go-circleci"
32-
"github.com/oklog/run"
3327
"github.com/peterbourgon/diskv"
3428
ff "github.com/peterbourgon/ff/v2"
3529
"github.com/peterbourgon/ff/v2/ffcli"
36-
"github.com/tevino/abool"
30+
)
31+
32+
var (
33+
verbose bool
34+
logFormat string
35+
dbStorePath string
36+
withPreloading bool
3737
)
3838

3939
func main() {
@@ -46,312 +46,22 @@ func main() {
4646

4747
func yolo(args []string) error {
4848
log.SetFlags(0)
49-
var (
50-
verbose bool
51-
logFormat string
52-
devMode bool
53-
withCache bool
54-
maxBuilds int
55-
buildkiteToken string
56-
githubToken string
57-
githubRepos string
58-
bintrayUsername string
59-
bintrayToken string
60-
artifactsCachePath string
61-
circleciToken string
62-
dbStorePath string
63-
withPreloading bool
64-
grpcBind string
65-
httpBind string
66-
corsAllowedOrigins string
67-
requestTimeout time.Duration
68-
shutdownTimeout time.Duration
69-
basicAuth string
70-
authSalt string
71-
httpCachePath string
72-
realm string
73-
once bool
74-
iosPrivkeyPath string
75-
iosProvPath string
76-
iosPrivkeyPass string
77-
)
78-
var (
79-
rootFlagSet = flag.NewFlagSet("yolo", flag.ExitOnError)
80-
serverFlagSet = flag.NewFlagSet("server", flag.ExitOnError)
81-
storeFlagSet = flag.NewFlagSet("store", flag.ExitOnError)
82-
)
49+
rootFlagSet := flag.NewFlagSet("yolo", flag.ExitOnError)
8350
rand.Seed(time.Now().UnixNano())
8451
rootFlagSet.SetOutput(os.Stderr)
8552
rootFlagSet.BoolVar(&verbose, "v", false, "increase log verbosity")
8653
rootFlagSet.StringVar(&logFormat, "log-format", "console", strings.Join(zapconfig.AvailablePresets, ", "))
87-
serverFlagSet.BoolVar(&devMode, "dev-mode", false, "enable insecure helpers")
88-
serverFlagSet.BoolVar(&withCache, "with-cache", false, "enable API caching")
89-
serverFlagSet.StringVar(&buildkiteToken, "buildkite-token", "", "BuildKite API Token")
90-
serverFlagSet.StringVar(&bintrayUsername, "bintray-username", "", "Bintray username")
91-
serverFlagSet.StringVar(&bintrayToken, "bintray-token", "", "Bintray API Token")
92-
serverFlagSet.StringVar(&circleciToken, "circleci-token", "", "CircleCI API Token")
93-
serverFlagSet.StringVar(&githubToken, "github-token", "", "GitHub API Token")
94-
serverFlagSet.StringVar(&githubRepos, "github-repos", "berty/berty", "GitHub repositories to watch")
95-
serverFlagSet.StringVar(&dbStorePath, "db-path", ":memory:", "DB Store path")
96-
serverFlagSet.StringVar(&artifactsCachePath, "artifacts-cache-path", "", "Artifacts caching path")
97-
serverFlagSet.IntVar(&maxBuilds, "max-builds", 100, "maximum builds to fetch from external services (pagination)")
98-
serverFlagSet.StringVar(&httpBind, "http-bind", ":8000", "HTTP bind address")
99-
serverFlagSet.StringVar(&grpcBind, "grpc-bind", ":9000", "gRPC bind address")
100-
serverFlagSet.StringVar(&corsAllowedOrigins, "cors-allowed-origins", "", "CORS allowed origins (*.domain.tld)")
101-
serverFlagSet.DurationVar(&requestTimeout, "request-timeout", 5*time.Second, "request timeout")
102-
serverFlagSet.DurationVar(&shutdownTimeout, "shutdown-timeout", 6*time.Second, "server shutdown timeout")
103-
serverFlagSet.StringVar(&basicAuth, "basic-auth-password", "", "if set, enables basic authentication")
104-
serverFlagSet.StringVar(&realm, "realm", "Yolo", "authentication Realm")
105-
serverFlagSet.StringVar(&authSalt, "auth-salt", "", "salt used to generate authentication tokens at the end of the URLs")
106-
serverFlagSet.StringVar(&httpCachePath, "http-cache-path", "", "if set, will cache http client requests")
107-
serverFlagSet.BoolVar(&once, "once", false, "just run workers once")
108-
serverFlagSet.StringVar(&iosPrivkeyPath, "ios-privkey", "", "iOS signing: path to private key or p12 file (PEM or DER format)")
109-
serverFlagSet.StringVar(&iosProvPath, "ios-prov", "", "iOS signing: path to mobile provisioning profile")
110-
serverFlagSet.StringVar(&iosPrivkeyPass, "ios-pass", "", "iOS signing: password for private key or p12 file")
111-
storeFlagSet.StringVar(&dbStorePath, "db-path", ":memory:", "DB Store path")
112-
storeFlagSet.BoolVar(&withPreloading, "with-preloading", false, "with auto DB preloading")
113-
114-
server := &ffcli.Command{
115-
Name: `server`,
116-
ShortHelp: `Start a Yolo Server`,
117-
FlagSet: serverFlagSet,
118-
Options: []ff.Option{ff.WithEnvVarNoPrefix()},
119-
Exec: func(ctx context.Context, _ []string) error {
120-
logger, err := loggerFromArgs(verbose, logFormat)
121-
if err != nil {
122-
return err
123-
}
124-
ctx, cancel := context.WithCancel(ctx)
125-
defer cancel()
126-
127-
roundTripper, rtCloser := roundTripperFromArgs(ctx, httpCachePath, logger)
128-
defer rtCloser()
129-
http.DefaultTransport = roundTripper
130-
131-
db, err := dbFromArgs(dbStorePath, logger)
132-
if err != nil {
133-
return err
134-
}
135-
defer db.Close()
136-
137-
gr := run.Group{}
138-
gr.Add(run.SignalHandler(ctx, syscall.SIGKILL, syscall.SIGTERM))
139-
140-
cc := abool.New() // clear cache signal
141-
142-
// service conns
143-
var bkc *buildkite.Client
144-
if buildkiteToken != "" {
145-
bkc, err = buildkiteClientFromArgs(buildkiteToken)
146-
if err != nil {
147-
return err
148-
}
149-
}
150-
var ccc *circleci.Client
151-
if circleciToken != "" {
152-
ccc, err = circleciClientFromArgs(circleciToken)
153-
if err != nil {
154-
return err
155-
}
156-
}
157-
var btc *bintray.Client
158-
if bintrayToken != "" && bintrayUsername != "" {
159-
btc, err = bintrayClientFromArgs(bintrayUsername, bintrayToken, logger)
160-
if err != nil {
161-
return err
162-
}
163-
}
164-
ghc, err := githubClientFromArgs(githubToken)
165-
if err != nil {
166-
return err
167-
}
168-
169-
if devMode {
170-
logger.Warn("--dev-mode: insecure helpers are enabled")
171-
}
172-
173-
if artifactsCachePath != "" {
174-
if err := os.MkdirAll(artifactsCachePath, 0o755); err != nil {
175-
return err
176-
}
177-
}
178-
179-
// service
180-
svc, err := yolosvc.NewService(db, yolosvc.ServiceOpts{
181-
Logger: logger,
182-
BuildkiteClient: bkc,
183-
CircleciClient: ccc,
184-
BintrayClient: btc,
185-
GithubClient: ghc,
186-
AuthSalt: authSalt,
187-
DevMode: devMode,
188-
ArtifactsCachePath: artifactsCachePath,
189-
IOSPrivkeyPath: iosPrivkeyPath,
190-
IOSProvPath: iosProvPath,
191-
IOSPrivkeyPass: iosPrivkeyPass,
192-
})
193-
if err != nil {
194-
return err
195-
}
196-
197-
// service workers
198-
if bkc != nil {
199-
opts := yolosvc.BuildkiteWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once}
200-
gr.Add(func() error { return svc.BuildkiteWorker(ctx, opts) }, func(_ error) { cancel() })
201-
}
202-
if ccc != nil {
203-
opts := yolosvc.CircleciWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once}
204-
gr.Add(func() error { return svc.CircleciWorker(ctx, opts) }, func(_ error) { cancel() })
205-
}
206-
if btc != nil {
207-
opts := yolosvc.BintrayWorkerOpts{Logger: logger, ClearCache: cc, Once: once}
208-
gr.Add(func() error { return svc.BintrayWorker(ctx, opts) }, func(_ error) { cancel() })
209-
}
210-
if !once { // disable pkgman when running with --once
211-
opts := yolosvc.PkgmanWorkerOpts{Logger: logger, ClearCache: cc, Once: once}
212-
gr.Add(func() error { return svc.PkgmanWorker(ctx, opts) }, func(_ error) { cancel() })
213-
}
214-
if githubToken != "" {
215-
opts := yolosvc.GithubWorkerOpts{Logger: logger, MaxBuilds: maxBuilds, ClearCache: cc, Once: once, ReposFilter: githubRepos, Token: githubToken}
216-
gr.Add(func() error { return svc.GitHubWorker(ctx, opts) }, func(_ error) { cancel() })
217-
}
218-
219-
// server/API
220-
server, err := yolosvc.NewServer(ctx, svc, yolosvc.ServerOpts{
221-
Logger: logger,
222-
GRPCBind: grpcBind,
223-
HTTPBind: httpBind,
224-
RequestTimeout: requestTimeout,
225-
ShutdownTimeout: shutdownTimeout,
226-
CORSAllowedOrigins: corsAllowedOrigins,
227-
BasicAuth: basicAuth,
228-
Realm: realm,
229-
AuthSalt: authSalt,
230-
DevMode: devMode,
231-
WithCache: withCache,
232-
ClearCache: cc,
233-
})
234-
if err != nil {
235-
return err
236-
}
237-
gr.Add(func() error { return server.Start() }, func(_ error) { server.Stop() })
238-
239-
return gr.Run()
240-
},
241-
}
242-
243-
dumpObjects := &ffcli.Command{
244-
Name: `dump-objects`,
245-
FlagSet: storeFlagSet,
246-
Options: []ff.Option{ff.WithEnvVarNoPrefix()},
247-
Exec: func(_ context.Context, _ []string) error {
248-
logger, err := loggerFromArgs(verbose, logFormat)
249-
if err != nil {
250-
return err
251-
}
252-
db, err := dbFromArgs(dbStorePath, logger)
253-
if err != nil {
254-
return err
255-
}
256-
defer db.Close()
257-
258-
svc, err := yolosvc.NewService(db, yolosvc.ServiceOpts{
259-
Logger: logger,
260-
DevMode: true,
261-
})
262-
if err != nil {
263-
return err
264-
}
26554

266-
ctx := context.Background()
267-
input := &yolopb.DevDumpObjects_Request{
268-
WithPreloading: true,
269-
}
270-
ret, err := svc.DevDumpObjects(ctx, input)
271-
if err != nil {
272-
return err
273-
}
274-
fmt.Println(godev.PrettyJSONPB(ret))
275-
276-
return nil
55+
root := &ffcli.Command{
56+
ShortUsage: `server [flags] <subcommand>`,
57+
FlagSet: rootFlagSet,
58+
Subcommands: []*ffcli.Command{
59+
serverCommand(),
60+
dumpObjectsCommand(),
61+
infoCommand(),
62+
treeCommand(),
27763
},
278-
}
279-
280-
tree := &ffcli.Command{
281-
Name: `tree`,
282-
FlagSet: storeFlagSet,
28364
Options: []ff.Option{ff.WithEnvVarNoPrefix()},
284-
Exec: func(ctx context.Context, _ []string) error {
285-
logger, err := loggerFromArgs(verbose, logFormat)
286-
if err != nil {
287-
return err
288-
}
289-
db, err := dbFromArgs(dbStorePath, logger)
290-
if err != nil {
291-
return err
292-
}
293-
defer db.Close()
294-
295-
svc, err := yolosvc.NewService(db, yolosvc.ServiceOpts{
296-
Logger: logger,
297-
DevMode: true,
298-
})
299-
if err != nil {
300-
return err
301-
}
302-
303-
input := &yolopb.DevDumpObjects_Request{
304-
WithPreloading: true,
305-
}
306-
ret, err := svc.DevDumpObjects(ctx, input)
307-
if err != nil {
308-
return err
309-
}
310-
fmt.Println(ret.Batch.DisplayTreeFormat())
311-
312-
return nil
313-
},
314-
}
315-
316-
info := &ffcli.Command{
317-
Name: `info`,
318-
FlagSet: storeFlagSet,
319-
Options: []ff.Option{ff.WithEnvVarNoPrefix()},
320-
Exec: func(_ context.Context, _ []string) error {
321-
logger, err := loggerFromArgs(verbose, logFormat)
322-
if err != nil {
323-
return err
324-
}
325-
db, err := dbFromArgs(dbStorePath, logger)
326-
if err != nil {
327-
return err
328-
}
329-
defer db.Close()
330-
331-
svc, err := yolosvc.NewService(db, yolosvc.ServiceOpts{
332-
Logger: logger,
333-
DevMode: true,
334-
})
335-
if err != nil {
336-
return err
337-
}
338-
339-
ctx := context.Background()
340-
ret, err := svc.Status(ctx, nil)
341-
if err != nil {
342-
return err
343-
}
344-
fmt.Println(godev.PrettyJSONPB(ret))
345-
346-
return nil
347-
},
348-
}
349-
350-
root := &ffcli.Command{
351-
ShortUsage: `server [flags] <subcommand>`,
352-
FlagSet: rootFlagSet,
353-
Subcommands: []*ffcli.Command{server, dumpObjects, info, tree},
354-
Options: []ff.Option{ff.WithEnvVarNoPrefix()},
35565
Exec: func(_ context.Context, _ []string) error {
35666
return flag.ErrHelp
35767
},

0 commit comments

Comments
 (0)