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 }