Skip to content

Commit 88c17d3

Browse files
committed
Add command to generate jsonschema for limayaml
Signed-off-by: Anders F Björklund <[email protected]>
1 parent 121b728 commit 88c17d3

File tree

6 files changed

+53
-0
lines changed

6 files changed

+53
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
_output/
22
_artifacts/
33
lima.REJECTED.yaml
4+
schema-limayaml.json
45
.config

Makefile

+8
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,14 @@ ifeq ($(native_compiling),true)
421421
--output _output --prefix $(PREFIX)
422422
endif
423423

424+
################################################################################
425+
schema-limayaml.json: _output/bin/limactl$(exe)
426+
$< generate-jsonschema >$@
427+
428+
.PHONY: check-jsonschema
429+
check-jsonschema: schema-limayaml.json
430+
check-jsonschema --schemafile $< examples/default.yaml
431+
424432
################################################################################
425433
.PHONY: diagrams
426434
diagrams: docs/lima-sequence-diagram.png

cmd/limactl/genschema.go

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
"github.com/invopop/jsonschema"
8+
"github.com/lima-vm/lima/pkg/limayaml"
9+
"github.com/spf13/cobra"
10+
)
11+
12+
func newGenSchemaCommand() *cobra.Command {
13+
genschemaCommand := &cobra.Command{
14+
Use: "generate-jsonschema",
15+
Short: "Generate json-schema document",
16+
Args: WrapArgsError(cobra.NoArgs),
17+
RunE: genschemaAction,
18+
Hidden: true,
19+
}
20+
return genschemaCommand
21+
}
22+
23+
func genschemaAction(cmd *cobra.Command, _ []string) error {
24+
schema := jsonschema.Reflect(&limayaml.LimaYAML{})
25+
j, err := json.MarshalIndent(schema, "", " ")
26+
if err != nil {
27+
return err
28+
}
29+
_, err = fmt.Fprintln(cmd.OutOrStdout(), string(j))
30+
return err
31+
}

cmd/limactl/main.go

+1
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ func newApp() *cobra.Command {
150150
newDiskCommand(),
151151
newUsernetCommand(),
152152
newGenDocCommand(),
153+
newGenSchemaCommand(),
153154
newSnapshotCommand(),
154155
newProtectCommand(),
155156
newUnprotectCommand(),

go.mod

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ require (
2424
github.com/goccy/go-yaml v1.12.0
2525
github.com/google/go-cmp v0.6.0
2626
github.com/google/yamlfmt v0.13.0
27+
github.com/invopop/jsonschema v0.12.0
2728
github.com/lima-vm/go-qcow2reader v0.2.0
2829
github.com/lima-vm/sshocker v0.3.4
2930
github.com/mattn/go-isatty v0.0.20
@@ -57,8 +58,10 @@ require (
5758
github.com/VividCortex/ewma v1.2.0 // indirect
5859
github.com/a8m/envsubst v1.4.2 // indirect
5960
github.com/alecthomas/participle/v2 v2.1.1 // indirect
61+
github.com/bahlo/generic-list-go v0.2.0 // indirect
6062
github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect
6163
github.com/braydonk/yaml v0.7.0 // indirect
64+
github.com/buger/jsonparser v1.1.1 // indirect
6265
github.com/containerd/errdefs v0.3.0 // indirect
6366
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
6467
github.com/digitalocean/go-libvirt v0.0.0-20220804181439-8648fbde413e // indirect
@@ -108,6 +111,7 @@ require (
108111
github.com/russross/blackfriday/v2 v2.1.0 // indirect
109112
github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect
110113
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
114+
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
111115
github.com/x448/float16 v0.8.4 // indirect
112116
github.com/yuin/gopher-lua v1.1.1 // indirect
113117
go.uber.org/atomic v1.7.0 // indirect

go.sum

+8
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@ github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW5
2121
github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU=
2222
github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc=
2323
github.com/armon/go-proxyproto v0.0.0-20210323213023-7e956b284f0a/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU=
24+
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
25+
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
2426
github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e h1:IdMhFPEfTZQU971tIHx3UhY4l+yCeynprnINrDTSrOc=
2527
github.com/balajiv113/fd v0.0.0-20230330094840-143eec500f3e/go.mod h1:aXGMJsd3XrnUFTuyf/pTGg5jG6CY8JMZ5juywvShjgQ=
2628
github.com/bmatcuk/doublestar/v4 v4.6.0 h1:HTuxyug8GyFbRkrffIpzNCSK4luc0TY3wzXvzIZhEXc=
2729
github.com/bmatcuk/doublestar/v4 v4.6.0/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
2830
github.com/braydonk/yaml v0.7.0 h1:ySkqO7r0MGoCNhiRJqE0Xe9yhINMyvOAB3nFjgyJn2k=
2931
github.com/braydonk/yaml v0.7.0/go.mod h1:hcm3h581tudlirk8XEUPDBAimBPbmnL0Y45hCRl47N4=
32+
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
33+
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
3034
github.com/cheggaaa/pb/v3 v3.1.5 h1:QuuUzeM2WsAqG2gMqtzaWithDJv0i+i6UlnwSCI4QLk=
3135
github.com/cheggaaa/pb/v3 v3.1.5/go.mod h1:CrxkeghYTXi1lQBEI7jSn+3svI3cuc19haAj6jM60XI=
3236
github.com/containerd/containerd v1.7.23 h1:H2CClyUkmpKAGlhQp95g2WXHfLYc7whAuvZGBNYOOwQ=
@@ -140,6 +144,8 @@ github.com/inetaf/tcpproxy v0.0.0-20240214030015-3ce58045626c h1:gYfYE403/nlrGNY
140144
github.com/inetaf/tcpproxy v0.0.0-20240214030015-3ce58045626c/go.mod h1:Di7LXRyUcnvAcLicFhtM9/MlZl/TNgRSDHORM2c6CMI=
141145
github.com/insomniacslk/dhcp v0.0.0-20240710054256-ddd8a41251c9 h1:LZJWucZz7ztCqY6Jsu7N9g124iJ2kt/O62j3+UchZFg=
142146
github.com/insomniacslk/dhcp v0.0.0-20240710054256-ddd8a41251c9/go.mod h1:KclMyHxX06VrVr0DJmeFSUb1ankt7xTfoOA35pCkoic=
147+
github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI=
148+
github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
143149
github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8=
144150
github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg=
145151
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -272,6 +278,8 @@ github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 h1:pyC9PaHYZFgEKFdlp3G8
272278
github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
273279
github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8=
274280
github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
281+
github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
282+
github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
275283
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
276284
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
277285
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=

0 commit comments

Comments
 (0)