ALR

Форк
1
/
helper.go 
86 строк · 1.9 Кб
1
package main
2

3
import (
4
	"fmt"
5
	"os"
6
	"strings"
7

8
	"github.com/urfave/cli/v2"
9
	"plemya-x.ru/alr/internal/cpu"
10
	"plemya-x.ru/alr/internal/shutils/helpers"
11
	"plemya-x.ru/alr/pkg/distro"
12
	"plemya-x.ru/alr/pkg/loggerctx"
13
	"mvdan.cc/sh/v3/expand"
14
	"mvdan.cc/sh/v3/interp"
15
)
16

17
var helperCmd = &cli.Command{
18
	Name:        "helper",
19
	Usage:       "Run a ALR helper command",
20
	ArgsUsage:   `<helper_name|"list">`,
21
	Subcommands: []*cli.Command{helperListCmd},
22
	Flags: []cli.Flag{
23
		&cli.StringFlag{
24
			Name:    "dest-dir",
25
			Aliases: []string{"d"},
26
			Usage:   "The directory that the install commands will install to",
27
			Value:   "dest",
28
		},
29
	},
30
	Action: func(c *cli.Context) error {
31
		ctx := c.Context
32
		log := loggerctx.From(ctx)
33

34
		if c.Args().Len() < 1 {
35
			cli.ShowSubcommandHelpAndExit(c, 1)
36
		}
37

38
		helper, ok := helpers.Helpers[c.Args().First()]
39
		if !ok {
40
			log.Fatal("No such helper command").Str("name", c.Args().First()).Send()
41
		}
42

43
		wd, err := os.Getwd()
44
		if err != nil {
45
			log.Fatal("Error getting working directory").Err(err).Send()
46
		}
47

48
		info, err := distro.ParseOSRelease(ctx)
49
		if err != nil {
50
			log.Fatal("Error getting working directory").Err(err).Send()
51
		}
52

53
		hc := interp.HandlerContext{
54
			Env: expand.ListEnviron(
55
				"pkgdir="+c.String("dest-dir"),
56
				"DISTRO_ID="+info.ID,
57
				"DISTRO_ID_LIKE="+strings.Join(info.Like, " "),
58
				"ARCH="+cpu.Arch(),
59
			),
60
			Dir:    wd,
61
			Stdin:  os.Stdin,
62
			Stdout: os.Stdout,
63
			Stderr: os.Stderr,
64
		}
65

66
		return helper(hc, c.Args().First(), c.Args().Slice()[1:])
67
	},
68
	CustomHelpTemplate: cli.CommandHelpTemplate,
69
	BashComplete: func(ctx *cli.Context) {
70
		for name := range helpers.Helpers {
71
			fmt.Println(name)
72
		}
73
	},
74
}
75

76
var helperListCmd = &cli.Command{
77
	Name:    "list",
78
	Usage:   "List all the available helper commands",
79
	Aliases: []string{"ls"},
80
	Action: func(ctx *cli.Context) error {
81
		for name := range helpers.Helpers {
82
			fmt.Println(name)
83
		}
84
		return nil
85
	},
86
}
87

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.