installer: migrate app repository client to cuelang based configs
diff --git a/core/installer/app.go b/core/installer/app.go
index 7d22c0b..671f81c 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -990,77 +990,54 @@
 }
 
 func loadApp(fs billy.Filesystem) (StoreApp, error) {
-	cfg, err := fs.Open("Chart.yaml")
+	items, err := fs.ReadDir(".")
 	if err != nil {
 		return StoreApp{}, err
 	}
-	defer cfg.Close()
-	b, err := io.ReadAll(cfg)
-	if err != nil {
-		return StoreApp{}, err
-	}
-	var appCfg appConfig
-	if err := yaml.Unmarshal(b, &appCfg); err != nil {
-		return StoreApp{}, err
-	}
-	rb, err := fs.Open("README.md")
-	if err != nil {
-		return StoreApp{}, err
-	}
-	defer rb.Close()
-	readme, err := io.ReadAll(rb)
-	if err != nil {
-		return StoreApp{}, err
-	}
-	readmeTmpl, err := template.New("README.md").Parse(string(readme))
-	if err != nil {
-		return StoreApp{}, err
-	}
-	sb, err := fs.Open("schema.json")
-	if err != nil {
-		return StoreApp{}, err
-	}
-	defer sb.Close()
-	scm, err := io.ReadAll(sb)
-	if err != nil {
-		return StoreApp{}, err
-	}
-	schema, err := NewJSONSchema(string(scm))
-	if err != nil {
-		return StoreApp{}, err
-	}
-	tFiles, err := fs.ReadDir("templates")
-	if err != nil {
-		return StoreApp{}, err
-	}
-	tmpls := make([]*template.Template, 0)
-	for _, t := range tFiles {
-		if !strings.HasSuffix(t.Name(), ".yaml") {
+	var contents bytes.Buffer
+	for _, i := range items {
+		if i.IsDir() {
 			continue
 		}
-		inp, err := fs.Open(fs.Join("templates", t.Name()))
+		f, err := fs.Open(i.Name())
 		if err != nil {
 			return StoreApp{}, err
 		}
-		b, err := io.ReadAll(inp)
-		if err != nil {
+		defer f.Close()
+		if _, err := io.Copy(&contents, f); err != nil {
 			return StoreApp{}, err
 		}
-		tmpl, err := template.New(t.Name()).Parse(string(b))
-		if err != nil {
-			return StoreApp{}, err
-		}
-		tmpls = append(tmpls, tmpl)
 	}
+	cfg, schema, err := processCueConfig(contents.String())
+	if err != nil {
+		return StoreApp{}, err
+	}
+	return newCueApp(cfg, schema)
+}
+
+type cueAppConfig struct {
+	Name        string `json:"name"`
+	Namespace   string `json:"namespace"`
+	Description string `json:"description"`
+	Icon        string `json:"icon"`
+}
+
+func newCueApp(cfg *cue.Value, schema Schema) (StoreApp, error) {
+	var config cueAppConfig
+	if err := cfg.Decode(&config); err != nil {
+		return StoreApp{}, err
+	}
+	fmt.Printf("%#v\n", config)
 	return StoreApp{
 		App: App{
-			Name:       appCfg.Name,
-			Readme:     readmeTmpl,
+			Name:       config.Name,
+			Readme:     nil,
 			schema:     schema,
-			Namespaces: appCfg.Namespaces,
-			templates:  tmpls,
+			Namespaces: []string{config.Namespace},
+			templates:  []*template.Template{},
+			cfg:        cfg,
 		},
-		ShortDescription: appCfg.Description,
-		Icon:             appCfg.Icon,
+		ShortDescription: config.Description,
+		Icon:             htemplate.HTML(config.Icon),
 	}, nil
 }