Skip to content

Commit 5893a7d

Browse files
committed
Add yq subcommands to limactl and lima-guestagent
Adding it to `lima-guestagent` allows us to use `yq` in provisioning scripts without having to install it from a package repository or downloading it from GitHub. Adding it to `limactl` makes it available to integration tests without having to install it. It is essentially free because we already use `yqlib` inside `limactl` anyways, , so the executable size doesn't really change. The size of the (compressed) guestagent for aarch64 increases from 12MB to 14MB, which seems acceptable. These are "hidden" commands that don't show up in --help output. Signed-off-by: Jan Dubois <jan.dubois@suse.com>
1 parent 22af485 commit 5893a7d

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

cmd/lima-guestagent/main_linux.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@ import (
99
"github.com/sirupsen/logrus"
1010
"github.com/spf13/cobra"
1111

12+
"github.com/lima-vm/lima/v2/cmd/yq"
1213
"github.com/lima-vm/lima/v2/pkg/debugutil"
1314
"github.com/lima-vm/lima/v2/pkg/version"
1415
)
1516

1617
func main() {
18+
yq.MaybeRunYQ()
1719
if err := newApp().Execute(); err != nil {
1820
logrus.Fatal(err)
1921
}

cmd/limactl/main.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/sirupsen/logrus"
1818
"github.com/spf13/cobra"
1919

20+
"github.com/lima-vm/lima/v2/cmd/yq"
2021
"github.com/lima-vm/lima/v2/pkg/debugutil"
2122
"github.com/lima-vm/lima/v2/pkg/driver/external/server"
2223
"github.com/lima-vm/lima/v2/pkg/fsutil"
@@ -32,6 +33,7 @@ const (
3233
)
3334

3435
func main() {
36+
yq.MaybeRunYQ()
3537
if runtime.GOOS == "windows" {
3638
extras, hasExtra := os.LookupEnv("_LIMA_WINDOWS_EXTRA_PATH")
3739
if hasExtra && strings.TrimSpace(extras) != "" {

cmd/yq/yq.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
// SPDX-FileCopyrightText: Copyright The Lima Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
// SPDX-FileCopyrightText: Copyright (c) 2017 Mike Farah
5+
6+
// This file has been adapted from https://github.com/mikefarah/yq/blob/v4.47.1/yq.go
7+
8+
package yq
9+
10+
import (
11+
"os"
12+
"path/filepath"
13+
"strings"
14+
15+
command "github.com/mikefarah/yq/v4/cmd"
16+
)
17+
18+
func main() {
19+
cmd := command.New()
20+
args := os.Args[1:]
21+
_, _, err := cmd.Find(args)
22+
if err != nil && args[0] != "__complete" {
23+
// default command when nothing matches...
24+
newArgs := []string{"eval"}
25+
cmd.SetArgs(append(newArgs, os.Args[1:]...))
26+
}
27+
code := 0
28+
if err := cmd.Execute(); err != nil {
29+
code = 1
30+
}
31+
os.Exit(code)
32+
}
33+
34+
// MaybeRunYQ runs as `yq` if the program name or first argument is `yq`.
35+
// Only returns to caller if os.Args doesn't contain a `yq` command.
36+
func MaybeRunYQ() {
37+
progName := filepath.Base(os.Args[0])
38+
progName = strings.TrimSuffix(progName, filepath.Ext(progName))
39+
if progName == "yq" {
40+
main()
41+
}
42+
if len(os.Args) > 1 && os.Args[1] == "yq" {
43+
os.Args = os.Args[1:]
44+
main()
45+
}
46+
}

0 commit comments

Comments
 (0)