Skip to content

Commit a34f6b0

Browse files
author
Oleg Sucharevich
committed
add validate cmd
1 parent f497069 commit a34f6b0

File tree

8 files changed

+112
-25
lines changed

8 files changed

+112
-25
lines changed

build/cli-generator.yaml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
metadata:
22
name: cli-generator
33
description: Generate CLI entrypoints from spec file
4-
version: 0.13.0
4+
version: 0.14.0
55
maintainers:
66
- Oleg Sucharevich
77
loose: true
@@ -42,3 +42,8 @@ commands:
4242
type: string
4343
- name: project-dir
4444
type: string
45+
- name: validate
46+
description: Validate cli.yaml with spec file
47+
flags:
48+
- name: spec
49+
type: string

cmd/validate.go

Lines changed: 41 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

configs/templates/spec.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,16 @@
5656
"type": "object",
5757
"properties": {
5858
"name": {
59-
"type": "string"
59+
"type": "string",
60+
"pattern": ".+"
6061
},
6162
"parent": {
62-
"type": "string"
63+
"type": "string",
64+
"description": "Applicative property, user data will be ignored"
6365
},
6466
"root": {
6567
"type": "boolean",
68+
"description": "Applicative property, user data will be ignored",
6669
"default": false
6770
},
6871
"flags": {
@@ -88,7 +91,8 @@
8891
"properties": {
8992
"name": {
9093
"description": "CLI Name",
91-
"type": "string"
94+
"type": "string",
95+
"pattern": ".+"
9296
},
9397
"version": {
9498
"type": "string"

configs/templates/templates.go

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,6 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
228228
github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
229229
github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk=
230230
github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc=
231-
github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis=
232-
github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
233231
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
234232
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
235233
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=

pkg/generate/generate.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import (
88
"github.com/olegsu/cli-generator/pkg/logger"
99
"github.com/olegsu/cli-generator/pkg/spec"
1010
"github.com/spf13/viper"
11-
12-
"github.com/ghodss/yaml"
1311
)
1412

1513
type (
@@ -26,7 +24,7 @@ func handle(cnf *viper.Viper, log logger.Logger, processor resultRenderProcessor
2624
var s *spec.CLISpec
2725
var specJSON map[string]interface{}
2826

29-
if s, err = getCliSpec(cnf.GetString("spec"), ioutil.ReadFile); err != nil {
27+
if s, err = spec.GetCliSpec(cnf.GetString("spec"), ioutil.ReadFile); err != nil {
3028
return err
3129
}
3230

@@ -61,16 +59,3 @@ func handle(cnf *viper.Viper, log logger.Logger, processor resultRenderProcessor
6159
return processor.Process(res)
6260

6361
}
64-
65-
func getCliSpec(path string, readFromFile func(path string) ([]byte, error)) (*spec.CLISpec, error) {
66-
var err error
67-
var specData []byte
68-
var spec = spec.CLISpec{}
69-
if specData, err = readFromFile(path); err != nil {
70-
return nil, err
71-
}
72-
if err = yaml.Unmarshal(specData, &spec); err != nil {
73-
return nil, err
74-
}
75-
return &spec, nil
76-
}

pkg/spec/utils.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"encoding/json"
55
"fmt"
66

7+
"github.com/ghodss/yaml"
78
"github.com/qri-io/jsonschema"
89
)
910

@@ -30,6 +31,7 @@ func (cli *CLISpec) Validate(schema []byte) error {
3031
if err != nil {
3132
return err
3233
}
34+
fmt.Println(string(b))
3335
res, err := rs.ValidateBytes(b)
3436
if err != nil {
3537
return err
@@ -43,3 +45,16 @@ func (cli *CLISpec) Validate(schema []byte) error {
4345
}
4446
return nil
4547
}
48+
49+
func GetCliSpec(path string, readFromFile func(path string) ([]byte, error)) (*CLISpec, error) {
50+
var err error
51+
var specData []byte
52+
var spec = CLISpec{}
53+
if specData, err = readFromFile(path); err != nil {
54+
return nil, err
55+
}
56+
if err = yaml.Unmarshal(specData, &spec); err != nil {
57+
return nil, err
58+
}
59+
return &spec, nil
60+
}

pkg/validate/handler.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package validate
2+
3+
import (
4+
"io/ioutil"
5+
6+
"github.com/olegsu/cli-generator/configs/templates"
7+
"github.com/olegsu/cli-generator/pkg/logger"
8+
"github.com/olegsu/cli-generator/pkg/spec"
9+
"github.com/spf13/viper"
10+
)
11+
12+
type (
13+
// Handler - exposed struct that implementd Handler interface
14+
Handler struct{}
15+
)
16+
17+
// Handle - the function that will be called from the CLI with viper config
18+
// to provide access to all flags
19+
func (g *Handler) Handle(cnf *viper.Viper) error {
20+
log := logger.New(&logger.Options{
21+
Verbose: cnf.GetBool("verbose"),
22+
})
23+
var s *spec.CLISpec
24+
var err error
25+
26+
log.Debug("Validating spec", "path", cnf.GetString("spec"))
27+
if s, err = spec.GetCliSpec(cnf.GetString("spec"), ioutil.ReadFile); err != nil {
28+
return err
29+
}
30+
31+
if err = s.Validate([]byte(templates.TemplatesMap()["spec.json"])); err != nil {
32+
return err
33+
}
34+
return nil
35+
}

0 commit comments

Comments
 (0)