Skip to content

Commit d4f8897

Browse files
authored
refactor(): Migrate to cli (#13)
1 parent a5b83f3 commit d4f8897

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+11184
-152
lines changed

cmd/aoc-cli/main.go

Lines changed: 88 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package main
22

33
import (
44
"bytes"
5-
"flag"
65
"fmt"
6+
"os"
77
"path/filepath"
88
"strings"
99

1010
"github.com/manifoldco/promptui"
1111
"github.com/pkg/errors"
1212
log "github.com/sirupsen/logrus"
13+
"github.com/urfave/cli"
1314

1415
"github.com/oleg-balunenko/advent-of-code/internal/input"
1516
"github.com/oleg-balunenko/advent-of-code/internal/puzzles"
@@ -19,37 +20,95 @@ import (
1920
)
2021

2122
const (
22-
exit = "exit"
23-
back = "back"
23+
exit = "exit"
24+
back = "back"
25+
pageSize = 10
26+
abort = "^C"
2427
)
2528

26-
var (
27-
logLevel = flag.String("log_level", "INFO", "Set level of output logs")
28-
)
29+
var errExit = errors.New("exit is chosen")
2930

3031
func main() {
3132
defer func() {
3233
fmt.Println("Exiting...")
3334
}()
3435

35-
flag.Parse()
36+
app := cli.NewApp()
37+
app.Name = "aoc-cli"
3638

37-
printVersion()
39+
app.Description = "Solutions of puzzles for Advent Of Code (https://adventofcode.com/)\n" +
40+
"This command line tool contains solutions for puzzles and cli tool to run solutions to get " +
41+
"answers for input on site."
42+
app.Usage = `a command line tool for get solution for Advent of Code puzzles`
43+
app.Author = "Oleg Balunenko"
44+
app.Version = versionInfo()
45+
app.Email = "oleg.balunenko@gmail.com"
46+
app.Flags = globalFlags()
47+
app.Action = menu
3848

39-
setLogger()
49+
if err := app.Run(os.Args); err != nil {
50+
if errors.Is(err, errExit) {
51+
return
52+
}
4053

41-
if err := menu(); err != nil {
4254
log.Fatal(err)
4355
}
4456
}
4557

46-
func menu() error {
58+
func globalFlags() []cli.Flag {
59+
return []cli.Flag{
60+
cli.StringFlag{
61+
Name: "log_level",
62+
Usage: "Level of output logs",
63+
EnvVar: "",
64+
FilePath: "",
65+
Required: false,
66+
Hidden: false,
67+
TakesFile: false,
68+
Value: log.InfoLevel.String(),
69+
Destination: nil,
70+
},
71+
}
72+
}
73+
74+
func setLogger(ctx *cli.Context) {
75+
formatter := log.TextFormatter{
76+
ForceColors: true,
77+
DisableColors: false,
78+
ForceQuote: false,
79+
DisableQuote: false,
80+
EnvironmentOverrideColors: false,
81+
DisableTimestamp: false,
82+
FullTimestamp: true,
83+
TimestampFormat: "2006-01-02 15:04:05",
84+
DisableSorting: false,
85+
SortingFunc: nil,
86+
DisableLevelTruncation: false,
87+
PadLevelText: false,
88+
QuoteEmptyFields: true,
89+
FieldMap: nil,
90+
CallerPrettyfier: nil,
91+
}
92+
93+
log.SetFormatter(&formatter)
94+
95+
lvl, err := log.ParseLevel(ctx.GlobalString("log_level"))
96+
if err != nil {
97+
lvl = log.InfoLevel
98+
}
99+
100+
log.SetLevel(lvl)
101+
}
102+
103+
func menu(ctx *cli.Context) error {
104+
setLogger(ctx)
105+
47106
years := puzzles.GetYears()
48107

49108
prompt := promptui.Select{
50-
Label: nil,
109+
Label: "Years menu (exit' for exit)",
51110
Items: append(years, exit),
52-
Size: 0,
111+
Size: pageSize,
53112
CursorPos: 0,
54113
IsVimMode: false,
55114
HideHelp: false,
@@ -70,6 +129,10 @@ func handleYearChoices(opt promptui.Select) error {
70129
for {
71130
_, choice, err := opt.Run()
72131
if err != nil {
132+
if isAbort(err) {
133+
return nil
134+
}
135+
73136
return errors.Wrap(err, "prompt failed")
74137
}
75138

@@ -78,51 +141,21 @@ func handleYearChoices(opt promptui.Select) error {
78141
}
79142

80143
err = menuPuzzle(choice)
81-
if errors.Is(err, errExit) {
82-
return nil
83-
}
84-
85144
if err != nil {
145+
if errors.Is(err, errExit) {
146+
return nil
147+
}
148+
86149
log.Error(err)
87150

88151
continue
89152
}
90153
}
91154
}
92155

93-
func setLogger() {
94-
l, err := log.ParseLevel(*logLevel)
95-
if err != nil {
96-
l = log.InfoLevel
97-
}
98-
99-
log.SetLevel(l)
100-
101-
formatter := &log.TextFormatter{
102-
ForceColors: true,
103-
DisableColors: false,
104-
ForceQuote: false,
105-
DisableQuote: false,
106-
EnvironmentOverrideColors: false,
107-
DisableTimestamp: true,
108-
FullTimestamp: false,
109-
TimestampFormat: "",
110-
DisableSorting: false,
111-
SortingFunc: nil,
112-
DisableLevelTruncation: true,
113-
PadLevelText: false,
114-
QuoteEmptyFields: true,
115-
FieldMap: nil,
116-
CallerPrettyfier: nil,
117-
}
118-
log.SetFormatter(formatter)
119-
}
120-
121156
func menuPuzzle(year string) error {
122157
solvers := puzzles.NamesByYear(year)
123158

124-
pageSize := 20
125-
126159
prompt := promptui.Select{
127160
Label: "Puzzles menu (exit' for exit; back - to return to year selection)",
128161
Items: append(solvers, back, exit),
@@ -147,6 +180,10 @@ func handlePuzzleChoices(year string, opt promptui.Select) error {
147180
for {
148181
_, choice, err := opt.Run()
149182
if err != nil {
183+
if isAbort(err) {
184+
return errExit
185+
}
186+
150187
return errors.Wrap(err, "prompt failed")
151188
}
152189

@@ -178,12 +215,14 @@ func isExit(input string) bool {
178215
return strings.EqualFold(exit, input)
179216
}
180217

218+
func isAbort(err error) bool {
219+
return strings.HasSuffix(err.Error(), abort)
220+
}
221+
181222
func isBack(input string) bool {
182223
return strings.EqualFold(back, input)
183224
}
184225

185-
var errExit = errors.New("exit is chosen")
186-
187226
func run(year string, name string) (puzzles.Result, error) {
188227
s, err := puzzles.GetSolver(year, name)
189228
if err != nil {

cmd/aoc-cli/version.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@ var ( // build info
1313
goversion = unset
1414
)
1515

16-
func printVersion() {
17-
fmt.Printf("Go version: %s \n", goversion)
18-
fmt.Printf("Version info: %s \n", version)
19-
fmt.Printf("Build date: %s \n", date)
20-
fmt.Printf("commit: %s \n", commit)
21-
22-
fmt.Println()
16+
// versionInfo returns stringed version info.
17+
func versionInfo() string {
18+
return fmt.Sprintf("GO-%s: %s-%s-%s \n", goversion, version, commit, date)
2319
}

go.mod

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ module github.com/oleg-balunenko/advent-of-code
33
go 1.15
44

55
require (
6-
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 // indirect
6+
github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect
77
github.com/lunixbochs/vtclean v1.0.0 // indirect
88
github.com/manifoldco/promptui v0.8.0
99
github.com/mattn/go-colorable v0.1.8 // indirect
1010
github.com/pkg/errors v0.9.1
1111
github.com/sirupsen/logrus v1.7.0
12-
github.com/smartystreets/assertions v1.2.0 // indirect
13-
github.com/smartystreets/goconvey v1.6.4 // indirect
1412
github.com/stretchr/testify v1.6.1
15-
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 // indirect
16-
golang.org/x/tools v0.0.0-20201105220310-78b158585360 // indirect
13+
github.com/urfave/cli v1.22.5
14+
golang.org/x/sys v0.0.0-20201106081118-db71ae66460a // indirect
1715
)

go.sum

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1+
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
12
github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE=
23
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
34
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
45
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
56
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8=
67
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
8+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
9+
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
10+
github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM=
11+
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
712
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
813
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
914
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
10-
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
11-
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
12-
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
13-
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
14-
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
15-
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
1615
github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a h1:FaWFmfWdAUKbSCtOU2QjDaorUexogfaMgbipgYATUMU=
1716
github.com/juju/ansiterm v0.0.0-20180109212912-720a0952cc2a/go.mod h1:UJSiEoRfvx3hP73CvoARgeLjaIOjybY9vj8PUPPFGeU=
1817
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -38,54 +37,28 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
3837
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
3938
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4039
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
40+
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
41+
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
42+
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
43+
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
4144
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
4245
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
43-
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
44-
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
45-
github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs=
46-
github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
47-
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
48-
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
4946
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
5047
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
5148
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
5249
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
53-
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
54-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
55-
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
56-
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
57-
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
58-
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
59-
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
60-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
61-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
62-
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
63-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
64-
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
50+
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
51+
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
6552
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
66-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
67-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
6853
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4=
6954
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7055
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
7156
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
72-
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
73-
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1 h1:a/mKvvZr9Jcc8oKfcmgzyp7OwF73JPWsQLvH1z2Kxck=
74-
golang.org/x/sys v0.0.0-20201101102859-da207088b7d1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
75-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
76-
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
77-
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
78-
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg=
79-
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
80-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
81-
golang.org/x/tools v0.0.0-20201105220310-78b158585360 h1:/9CzsU8hOpnSUCtem1vfWNgsVeCTgkMdx+VE5YIYxnU=
82-
golang.org/x/tools v0.0.0-20201105220310-78b158585360/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
83-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
84-
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
85-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
86-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
57+
golang.org/x/sys v0.0.0-20201106081118-db71ae66460a h1:ALUFBKlIyeY7y5ZgPJmblk/vKz+zBQSnNiPkt41sgeg=
58+
golang.org/x/sys v0.0.0-20201106081118-db71ae66460a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8759
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
8860
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
8961
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
62+
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
9063
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
9164
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)