@@ -15,21 +15,68 @@ import (
15
15
16
16
"cdr.dev/slog"
17
17
"cdr.dev/slog/sloggers/sloghuman"
18
+ "github.com/coder/code-marketplace/extensionsign"
18
19
19
20
"github.com/coder/code-marketplace/api"
20
21
"github.com/coder/code-marketplace/database"
21
22
"github.com/coder/code-marketplace/storage"
22
23
)
23
24
25
+ func serverFlags () (addFlags func (cmd * cobra.Command ), opts * storage.Options ) {
26
+ opts = & storage.Options {}
27
+ var sign bool
28
+ return func (cmd * cobra.Command ) {
29
+ cmd .Flags ().StringVar (& opts .ExtDir , "extensions-dir" , "" , "The path to extensions." )
30
+ cmd .Flags ().StringVar (& opts .Artifactory , "artifactory" , "" , "Artifactory server URL." )
31
+ cmd .Flags ().StringVar (& opts .Repo , "repo" , "" , "Artifactory repository." )
32
+ cmd .Flags ().BoolVar (& sign , "sign" , false , "Sign extensions." )
33
+ _ = cmd .Flags ().MarkHidden ("sign" ) // This flag needs to import a key, not just be a bool
34
+
35
+ if cmd .Use == "server" {
36
+ // Server only flags
37
+ cmd .Flags ().DurationVar (& opts .ListCacheDuration , "list-cache-duration" , time .Minute , "The duration of the extension cache." )
38
+ }
39
+
40
+ var before func (cmd * cobra.Command , args []string ) error
41
+ if cmd .PreRunE != nil {
42
+ before = cmd .PreRunE
43
+ }
44
+ if cmd .PreRun != nil {
45
+ beforeNoE := cmd .PreRun
46
+ before = func (cmd * cobra.Command , args []string ) error {
47
+ beforeNoE (cmd , args )
48
+ return nil
49
+ }
50
+ }
51
+
52
+ cmd .PreRunE = func (cmd * cobra.Command , args []string ) error {
53
+ opts .Logger = cmdLogger (cmd )
54
+ if before != nil {
55
+ return before (cmd , args )
56
+ }
57
+ if sign { // TODO: Remove this for an actual key import
58
+ opts .Signer , _ = extensionsign .GenerateKey ()
59
+ }
60
+ return nil
61
+ }
62
+ }, opts
63
+ }
64
+
65
+ func cmdLogger (cmd * cobra.Command ) slog.Logger {
66
+ verbose , _ := cmd .Flags ().GetBool ("verbose" )
67
+ logger := slog .Make (sloghuman .Sink (cmd .ErrOrStderr ()))
68
+ if verbose {
69
+ logger = logger .Leveled (slog .LevelDebug )
70
+ }
71
+ return logger
72
+ }
73
+
24
74
func server () * cobra.Command {
25
75
var (
26
- address string
27
- artifactory string
28
- extdir string
29
- repo string
30
- listcacheduration time.Duration
31
- maxpagesize int
76
+ address string
77
+ maxpagesize int
32
78
)
79
+ addFlags , opts := serverFlags ()
33
80
34
81
cmd := & cobra.Command {
35
82
Use : "server" ,
@@ -41,26 +88,12 @@ func server() *cobra.Command {
41
88
RunE : func (cmd * cobra.Command , args []string ) error {
42
89
ctx , cancel := context .WithCancel (cmd .Context ())
43
90
defer cancel ()
91
+ logger := opts .Logger
44
92
45
93
notifyCtx , notifyStop := signal .NotifyContext (ctx , interruptSignals ... )
46
94
defer notifyStop ()
47
95
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
- })
96
+ store , err := storage .NewStorage (ctx , opts )
64
97
if err != nil {
65
98
return err
66
99
}
@@ -137,12 +170,9 @@ func server() *cobra.Command {
137
170
},
138
171
}
139
172
140
- cmd .Flags ().StringVar (& extdir , "extensions-dir" , "" , "The path to extensions." )
141
173
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
174
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." )
175
+ addFlags ( cmd )
146
176
147
177
return cmd
148
178
}
0 commit comments