generated from broadinstitute/golang-project-template
-
Notifications
You must be signed in to change notification settings - Fork 1
/
artifactsflags.go
51 lines (44 loc) · 1.39 KB
/
artifactsflags.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package artifactsflags
import (
"github.com/broadinstitute/thelma/internal/thelma/cli/flags"
"github.com/broadinstitute/thelma/internal/thelma/ops/artifacts"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
)
func NewArtifactsFlags(opts ...flags.Option) ArtifactsFlags {
return &artifactsFlags{
flagOptions: flags.AsOptions(opts),
options: artifacts.Options{},
}
}
type ArtifactsFlags interface {
AddFlags(cobraCommand *cobra.Command)
GetOptions() (artifacts.Options, error)
}
var flagNames = struct {
dir string
upload string
}{
dir: "dir",
upload: "upload",
}
type artifactsFlags struct {
flagOptions flags.Options
options artifacts.Options
}
func (s *artifactsFlags) AddFlags(cobraCommand *cobra.Command) {
s.flagOptions.Apply(cobraCommand.Flags(), func(flags *pflag.FlagSet) {
flags.StringVarP(&s.options.Dir, flagNames.dir, "d", "", "Path to local directory where artifacts should be exported")
flags.BoolVarP(&s.options.Upload, flagNames.upload, "u", false, "If true, upload artifacts to cluster artifact bucket")
})
}
func (s *artifactsFlags) GetOptions() (artifacts.Options, error) {
if s.options.Dir == "" && !s.options.Upload {
return s.options, errors.Errorf("either --%s or --%s must be specified",
s.flagOptions.NormalizedFlagName(flagNames.upload),
s.flagOptions.NormalizedFlagName(flagNames.dir),
)
}
return s.options, nil
}