chart: extract hydra maester chart out of auth/charts/hydra.tar.gz (#96)

* chart: extract hydra maester chart out of auth/charts/hydra.tar.gz

* auth: install shared hydra maester during bootstrap

* hydra-maester: fix chart name typo

* hydra-maester: fix charts repo namespace

---------

Co-authored-by: Giorgi Lekveishvili <lekva@gl-mbp-m1-max.local>
diff --git a/core/installer/app.go b/core/installer/app.go
index fa2e270..ac83a66 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -55,6 +55,7 @@
 	"values-tmpl/private-network.cue",
 	"values-tmpl/resource-renderer-controller.cue",
 	"values-tmpl/welcome.cue",
+	"values-tmpl/hydra-maester.cue",
 }
 
 const cueBaseConfigImports = `
diff --git a/core/installer/bootstrapper.go b/core/installer/bootstrapper.go
index c5de23d..e496709 100644
--- a/core/installer/bootstrapper.go
+++ b/core/installer/bootstrapper.go
@@ -97,6 +97,10 @@
 	if err := b.installEnvManager(ss, repoIO, nsGen, b.ns, env); err != nil {
 		return err
 	}
+	fmt.Println("Installing Ory Hydra Maester")
+	if err := b.installOryHydraMaester(ss, repoIO, nsGen, b.ns, env); err != nil {
+		return err
+	}
 	fmt.Println("Environment ready to use")
 	return nil
 }
@@ -521,6 +525,36 @@
 	return repo.InstallApp(app, filepath.Join("/infrastructure", app.Name()), derived.Values, derived)
 }
 
+func (b Bootstrapper) installOryHydraMaester(ss *soft.Client, repo RepoIO, nsGen NamespaceGenerator, nsCreator NamespaceCreator, env EnvConfig) error {
+	appRepo := NewInMemoryAppRepository(CreateAllApps())
+	app, err := appRepo.Find("hydra-maester")
+	if err != nil {
+		return err
+	}
+	namespaces := make([]string, len(app.Namespaces()))
+	for i, n := range app.Namespaces() {
+		namespaces[i], err = nsGen.Generate(n)
+		if err != nil {
+			return err
+		}
+	}
+	for _, n := range namespaces {
+		if err := nsCreator.Create(n); err != nil {
+			return err
+		}
+	}
+	derived := Derived{
+		Global: Values{
+			PCloudEnvName: env.Name,
+		},
+		Values: map[string]any{},
+	}
+	if len(namespaces) > 0 {
+		derived.Release.Namespace = namespaces[0]
+	}
+	return repo.InstallApp(app, filepath.Join("/infrastructure", app.Name()), derived.Values, derived)
+}
+
 func (b Bootstrapper) installDNSZoneManager(ss *soft.Client, repo RepoIO, nsGen NamespaceGenerator, nsCreator NamespaceCreator, env EnvConfig) error {
 	const (
 		volumeClaimName = "dns-zone-configs"
diff --git a/core/installer/values-tmpl/core-auth.cue b/core/installer/values-tmpl/core-auth.cue
index 0d99ffd..99840ab 100644
--- a/core/installer/values-tmpl/core-auth.cue
+++ b/core/installer/values-tmpl/core-auth.cue
@@ -48,12 +48,6 @@
 		tag: "v2.2.0-distroless"
 		pullPolicy: "IfNotPresent"
 	}
-	"hydra-maester": {
-		repository: "giolekva"
-		name: "ory-hydra-maester"
-		tag: "latest"
-		pullPolicy: "Always"
-	}
 	ui: {
 		repository: "giolekva"
 		name: "auth-ui"
@@ -378,18 +372,7 @@
 					enabled: true
 				}
 				maester: {
-					enabled: true
-				}
-				"hydra-maester": {
-					adminService: {
-						name: "hydra-admin"
-						port: 80
-					}
-					image: {
-						repository: images["hydra-maester"].fullName
-						tag: images["hydra-maester"].tag
-						pullPolicy: images["hydra-maester"].pullPolicy
-					}
+					enabled: false
 				}
 				hydra: {
 					automigration: {
diff --git a/core/installer/values-tmpl/hydra-maester.cue b/core/installer/values-tmpl/hydra-maester.cue
new file mode 100644
index 0000000..4f76f84
--- /dev/null
+++ b/core/installer/values-tmpl/hydra-maester.cue
@@ -0,0 +1,42 @@
+input: {}
+
+name: "hydra-maester"
+namespace: "auth"
+
+images: {
+	hydraMaester: {
+		repository: "giolekva"
+		name: "ory-hydra-maester"
+		tag: "latest"
+		pullPolicy: "Always"
+	}
+}
+
+charts: {
+	hydraMaester: {
+		chart: "charts/hydra-maester"
+		sourceRef: {
+			kind: "GitRepository"
+			name: "pcloud"
+			namespace: global.pcloudEnvName
+		}
+	}
+}
+
+helm: {
+	"hydra-maester": {
+		chart: charts.hydraMaester
+		values: {
+			adminService: {
+				name: "foo.bar.svc.cluster.local"
+				port: 80
+				scheme: "http"
+			}
+			image: {
+				repository: images.hydraMaester.fullName
+				tag: images.hydraMaester.tag
+				pullPolicy: images.hydraMaester.pullPolicy
+			}
+		}
+	}
+}