@@ -21,15 +21,52 @@ import (
21
21
"github.com/coder/code-marketplace/storage"
22
22
)
23
23
24
+ func serverFlags () (addFlags func (cmd * cobra.Command ), opts * storage.Options ) {
25
+ opts = & storage.Options {}
26
+ return func (cmd * cobra.Command ) {
27
+ cmd .Flags ().StringVar (& opts .ExtDir , "extensions-dir" , "" , "The path to extensions." )
28
+ cmd .Flags ().StringVar (& opts .Artifactory , "artifactory" , "" , "Artifactory server URL." )
29
+ cmd .Flags ().StringVar (& opts .Repo , "repo" , "" , "Artifactory repository." )
30
+ cmd .Flags ().DurationVar (& opts .ListCacheDuration , "list-cache-duration" , time .Minute , "The duration of the extension cache." )
31
+ cmd .Flags ().BoolVar (& opts .SignExtensions , "sign" , false , "Sign extensions." )
32
+
33
+ var before func (cmd * cobra.Command , args []string ) error
34
+ if cmd .PreRunE != nil {
35
+ before = cmd .PreRunE
36
+ }
37
+ if cmd .PreRun != nil {
38
+ beforeNoE := cmd .PreRun
39
+ before = func (cmd * cobra.Command , args []string ) error {
40
+ beforeNoE (cmd , args )
41
+ return nil
42
+ }
43
+ }
44
+
45
+ cmd .PreRunE = func (cmd * cobra.Command , args []string ) error {
46
+ opts .Logger = cmdLogger (cmd )
47
+ if before != nil {
48
+ return before (cmd , args )
49
+ }
50
+ return nil
51
+ }
52
+ }, opts
53
+ }
54
+
55
+ func cmdLogger (cmd * cobra.Command ) slog.Logger {
56
+ verbose , _ := cmd .Flags ().GetBool ("verbose" )
57
+ logger := slog .Make (sloghuman .Sink (cmd .ErrOrStderr ()))
58
+ if verbose {
59
+ logger = logger .Leveled (slog .LevelDebug )
60
+ }
61
+ return logger
62
+ }
63
+
24
64
func server () * cobra.Command {
25
65
var (
26
- address string
27
- artifactory string
28
- extdir string
29
- repo string
30
- listcacheduration time.Duration
31
- maxpagesize int
66
+ address string
67
+ maxpagesize int
32
68
)
69
+ addFlags , opts := serverFlags ()
33
70
34
71
cmd := & cobra.Command {
35
72
Use : "server" ,
@@ -41,26 +78,12 @@ func server() *cobra.Command {
41
78
RunE : func (cmd * cobra.Command , args []string ) error {
42
79
ctx , cancel := context .WithCancel (cmd .Context ())
43
80
defer cancel ()
81
+ logger := opts .Logger
44
82
45
83
notifyCtx , notifyStop := signal .NotifyContext (ctx , interruptSignals ... )
46
84
defer notifyStop ()
47
85
48
- verbose , err := cmd .Flags ().GetBool ("verbose" )
49
- if err != nil {
50
- return err
51
- }
52
- logger := slog .Make (sloghuman .Sink (cmd .ErrOrStderr ()))
53
- if verbose {
54
- logger = logger .Leveled (slog .LevelDebug )
55
- }
56
-
57
- store , err := storage .NewStorage (ctx , & storage.Options {
58
- Artifactory : artifactory ,
59
- ExtDir : extdir ,
60
- Logger : logger ,
61
- Repo : repo ,
62
- ListCacheDuration : listcacheduration ,
63
- })
86
+ store , err := storage .NewStorage (ctx , opts )
64
87
if err != nil {
65
88
return err
66
89
}
@@ -137,12 +160,9 @@ func server() *cobra.Command {
137
160
},
138
161
}
139
162
140
- cmd .Flags ().StringVar (& extdir , "extensions-dir" , "" , "The path to extensions." )
141
163
cmd .Flags ().IntVar (& maxpagesize , "max-page-size" , api .MaxPageSizeDefault , "The maximum number of pages to request" )
142
- cmd .Flags ().StringVar (& artifactory , "artifactory" , "" , "Artifactory server URL." )
143
- cmd .Flags ().StringVar (& repo , "repo" , "" , "Artifactory repository." )
144
164
cmd .Flags ().StringVar (& address , "address" , "127.0.0.1:3001" , "The address on which to serve the marketplace API." )
145
- cmd . Flags (). DurationVar ( & listcacheduration , "list-cache-duration" , time . Minute , "The duration of the extension cache." )
165
+ addFlags ( cmd )
146
166
147
167
return cmd
148
168
}
0 commit comments