133 lines
2.5 KiB
Go
133 lines
2.5 KiB
Go
package utils
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
//go:embed assets/**/**/**/**/**/**/.*
|
|
var FS11 embed.FS
|
|
|
|
//go:embed assets/**
|
|
var FS10 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/.*
|
|
var FS9 embed.FS
|
|
|
|
//go:embed assets/**/**/**/.*
|
|
var FS8 embed.FS
|
|
|
|
//go:embed assets/**/**/.*
|
|
var FS7 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/**/**/**/**/_*
|
|
var FS6 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/**/**/**/_*
|
|
var FS5 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/**/**/_*
|
|
var FS4 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/**/_*
|
|
var FS3 embed.FS
|
|
|
|
//go:embed assets/**/**/**/**/_*
|
|
var FS2 embed.FS
|
|
|
|
//go:embed assets/**/**/**/_*
|
|
var FS1 embed.FS
|
|
|
|
//go:embed assets
|
|
var FS embed.FS
|
|
|
|
var FSS = []embed.FS{FS, FS1, FS2, FS3, FS4, FS5, FS6, FS7, FS8, FS9, FS10, FS11}
|
|
|
|
func Exec(args ...string) error {
|
|
fArgs := []string{"-c"}
|
|
if len(args) > 0 {
|
|
fArgs = append(fArgs, args...)
|
|
}
|
|
// Execute 'echo $HOME' in bash
|
|
cmd := exec.Command("bash", "-c", "echo $HOME")
|
|
out, err := cmd.Output()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
home := strings.TrimSpace(string(out))
|
|
cmd2 := exec.Command("bash", fArgs...)
|
|
if strings.Contains(args[0], "helm") {
|
|
cmd2.Env = append(cmd2.Env, "HOME="+home)
|
|
out, err := cmd2.Output()
|
|
if err != nil {
|
|
fmt.Println("ERR helm ", args[0], err)
|
|
return err
|
|
}
|
|
fmt.Println("OUTPUT", string(out))
|
|
return nil
|
|
}
|
|
// // inject HOME
|
|
|
|
cmd2.Stdin = os.Stdin
|
|
cmd2.Stderr = os.Stderr
|
|
|
|
return cmd2.Run()
|
|
}
|
|
|
|
func ReadFS(filePath string) (string, error) {
|
|
b, err := FS.ReadFile(filePath)
|
|
return string(b), err
|
|
}
|
|
|
|
func Extract(content string, key string) (string, bool) {
|
|
key = key + ": "
|
|
idx := strings.Index(content, key)
|
|
if idx == -1 {
|
|
return "", false
|
|
}
|
|
|
|
// start right after "host: "
|
|
start := idx + len(key)
|
|
|
|
// stop at end of line
|
|
end := strings.Index(content[start:], "\n")
|
|
if end == -1 {
|
|
return strings.TrimSpace(content[start:]), true
|
|
}
|
|
|
|
return strings.TrimSpace(content[start : start+end]), true
|
|
}
|
|
|
|
type Chart struct {
|
|
Dependencies []struct {
|
|
Name string `yaml:"name"`
|
|
Version string `yaml:"version"`
|
|
Repository string `yaml:"repository"`
|
|
} `yaml:"dependencies"`
|
|
}
|
|
|
|
func ExtractRepo() map[string]string {
|
|
repos := make(map[string]string) // to avoid duplicates
|
|
|
|
// Walk through embedded charts
|
|
data, err := FS.ReadFile("assets/Chart.yaml")
|
|
if err != nil {
|
|
return repos
|
|
}
|
|
|
|
var chart Chart
|
|
if err := yaml.Unmarshal(data, &chart); err != nil {
|
|
return repos
|
|
}
|
|
|
|
for _, dep := range chart.Dependencies {
|
|
repos[dep.Name] = dep.Repository
|
|
}
|
|
return repos
|
|
}
|