From bc7a168851aac97e4fe26e7e7b3920855be92181 Mon Sep 17 00:00:00 2001 From: Paul Payne Date: Sun, 24 May 2026 18:28:47 +0000 Subject: [PATCH] Reorganized for new stable/waypoint versioning design. --- ADDING-APPS.md | 338 +++++++-- admin/docs/design.md | 692 ++++++++++++++++++ cert-manager/app.yaml | 5 + cert-manager/{ => versions/v1}/README.md | 0 .../v1}/internal-wildcard-certificate.yaml | 0 .../{ => versions/v1}/kustomization.yaml | 0 .../v1}/letsencrypt-prod-dns01.yaml | 0 .../v1}/letsencrypt-staging-dns01.yaml | 0 cert-manager/{ => versions/v1}/manifest.yaml | 4 - cert-manager/{ => versions/v1}/namespace.yaml | 0 .../v1}/scripts/repair-certificates.sh | 0 .../v1}/upstream/cert-manager.yaml | 0 .../v1}/upstream/kustomization.yaml | 0 .../v1}/wildcard-certificate.yaml | 0 coredns/app.yaml | 5 + coredns/{ => versions/v1}/README.md | 0 .../v1}/coredns-custom-config.yaml | 0 coredns/{ => versions/v1}/kustomization.yaml | 0 coredns/{ => versions/v1}/manifest.yaml | 4 - crowdsec/app.yaml | 5 + crowdsec/{ => versions/v1}/README.md | 0 crowdsec/{ => versions/v1}/configmap.yaml | 0 .../v1}/crowdsec-deployment.yaml | 0 .../{ => versions/v1}/crowdsec-service.yaml | 0 crowdsec/{ => versions/v1}/kustomization.yaml | 0 crowdsec/{ => versions/v1}/manifest.yaml | 4 - crowdsec/{ => versions/v1}/middleware.yaml | 0 crowdsec/{ => versions/v1}/namespace.yaml | 0 crowdsec/{ => versions/v1}/pvc.yaml | 0 .../{ => versions/v1}/serviceaccount.yaml | 0 decidim/app.yaml | 5 + decidim/{ => versions/0}/Dockerfile | 0 decidim/{ => versions/0}/README.md | 0 decidim/{ => versions/0}/db-init-job.yaml | 0 decidim/{ => versions/0}/deployment.yaml | 0 decidim/{ => versions/0}/ingress.yaml | 0 decidim/{ => versions/0}/kustomization.yaml | 0 decidim/{ => versions/0}/manifest.yaml | 4 - decidim/{ => versions/0}/namespace.yaml | 0 decidim/{ => versions/0}/pvc.yaml | 0 decidim/{ => versions/0}/service.yaml | 0 decidim/{ => versions/0}/serviceaccount.yaml | 0 discourse/app.yaml | 5 + discourse/{ => versions/3}/README.md | 0 discourse/{ => versions/3}/db-init-job.yaml | 0 discourse/{ => versions/3}/deployment.yaml | 0 discourse/{ => versions/3}/ingress.yaml | 0 discourse/{ => versions/3}/kustomization.yaml | 0 discourse/{ => versions/3}/manifest.yaml | 6 +- discourse/{ => versions/3}/namespace.yaml | 0 discourse/{ => versions/3}/pvc.yaml | 0 discourse/{ => versions/3}/service.yaml | 0 .../{ => versions/3}/serviceaccount.yaml | 0 docker-registry/app.yaml | 5 + .../{ => versions/3}/deployment.yaml | 0 docker-registry/{ => versions/3}/ingress.yaml | 0 .../{ => versions/3}/kustomization.yaml | 0 .../{ => versions/3}/manifest.yaml | 4 - .../{ => versions/3}/namespace.yaml | 0 docker-registry/{ => versions/3}/pvc.yaml | 0 docker-registry/{ => versions/3}/service.yaml | 0 e2e-test-app/app.yaml | 13 + .../1.0.0-1 => versions/1}/db-init-job.yaml | 0 .../1.0.0-1 => versions/1}/deployment.yaml | 0 .../1.0.0-1 => versions/1}/kustomization.yaml | 0 .../1.0.0-1 => versions/1}/manifest.yaml | 3 - .../1.0.0-1 => versions/1}/namespace.yaml | 0 .../1.0.0-1 => versions/1}/pvc.yaml | 0 .../1.0.0-1 => versions/1}/service.yaml | 0 .../{ => versions/2}/db-init-job.yaml | 0 e2e-test-app/{ => versions/2}/deployment.yaml | 0 .../{ => versions/2}/kustomization.yaml | 0 e2e-test-app/{ => versions/2}/manifest.yaml | 12 - e2e-test-app/{ => versions/2}/namespace.yaml | 0 e2e-test-app/{ => versions/2}/pvc.yaml | 0 e2e-test-app/{ => versions/2}/service.yaml | 0 example-admin/app.yaml | 4 + example-admin/{ => versions/1}/README.md | 0 .../{ => versions/1}/deployment.yaml | 0 example-admin/{ => versions/1}/ingress.yaml | 0 .../{ => versions/1}/kustomization.yaml | 0 example-admin/{ => versions/1}/manifest.yaml | 3 - example-admin/{ => versions/1}/namespace.yaml | 0 example-admin/{ => versions/1}/service.yaml | 0 example-app/app.yaml | 4 + example-app/{ => versions/1}/README.md | 0 example-app/{ => versions/1}/deployment.yaml | 0 example-app/{ => versions/1}/ingress.yaml | 0 .../{ => versions/1}/kustomization.yaml | 0 example-app/{ => versions/1}/manifest.yaml | 3 - example-app/{ => versions/1}/namespace.yaml | 0 example-app/{ => versions/1}/service.yaml | 0 externaldns/app.yaml | 5 + externaldns/{ => versions/v0}/README.md | 0 .../v0}/externaldns-cloudflare.yaml | 0 .../{ => versions/v0}/externaldns-rbac.yaml | 0 .../{ => versions/v0}/kustomization.yaml | 0 externaldns/{ => versions/v0}/manifest.yaml | 4 - externaldns/{ => versions/v0}/namespace.yaml | 0 ghost/app.yaml | 5 + ghost/{ => versions/5}/README.md | 0 ghost/{ => versions/5}/db-init-job.yaml | 0 ghost/{ => versions/5}/deployment.yaml | 0 ghost/{ => versions/5}/ingress.yaml | 0 ghost/{ => versions/5}/kustomization.yaml | 0 ghost/{ => versions/5}/manifest.yaml | 17 +- ghost/{ => versions/5}/namespace.yaml | 0 ghost/{ => versions/5}/pvc.yaml | 0 ghost/{ => versions/5}/service.yaml | 0 gitea/app.yaml | 5 + gitea/{ => versions/1}/README.md | 0 gitea/{ => versions/1}/db-init-job.yaml | 0 gitea/{ => versions/1}/deployment.yaml | 0 gitea/{ => versions/1}/gitea.env | 0 gitea/{ => versions/1}/ingress.yaml | 0 gitea/{ => versions/1}/kustomization.yaml | 0 gitea/{ => versions/1}/manifest.yaml | 20 +- gitea/{ => versions/1}/namespace.yaml | 0 gitea/{ => versions/1}/pvc.yaml | 0 gitea/{ => versions/1}/service.yaml | 0 headlamp/app.yaml | 5 + headlamp/{ => versions/v0}/deployment.yaml | 0 headlamp/{ => versions/v0}/ingress.yaml | 0 headlamp/{ => versions/v0}/kubeconfig-cm.yaml | 0 headlamp/{ => versions/v0}/kustomization.yaml | 0 headlamp/{ => versions/v0}/manifest.yaml | 4 - headlamp/{ => versions/v0}/namespace.yaml | 0 .../{ => versions/v0}/service-account.yaml | 0 headlamp/{ => versions/v0}/service.yaml | 0 immich/app.yaml | 5 + immich/{ => versions/1}/README.md | 0 immich/{ => versions/1}/db-init-job.yaml | 0 .../1}/deployment-machine-learning.yaml | 0 .../1}/deployment-microservices.yaml | 0 .../{ => versions/1}/deployment-server.yaml | 0 immich/{ => versions/1}/ingress.yaml | 0 immich/{ => versions/1}/kustomization.yaml | 0 immich/{ => versions/1}/manifest.yaml | 15 +- immich/{ => versions/1}/namespace.yaml | 0 immich/{ => versions/1}/pvc.yaml | 0 immich/{ => versions/1}/service.yaml | 0 keila/app.yaml | 5 + keila/{ => versions/0}/README.md | 0 keila/{ => versions/0}/db-init-job.yaml | 0 keila/{ => versions/0}/deployment.yaml | 0 keila/{ => versions/0}/ingress.yaml | 0 keila/{ => versions/0}/kustomization.yaml | 0 keila/{ => versions/0}/manifest.yaml | 6 +- keila/{ => versions/0}/middleware-cors.yaml | 0 keila/{ => versions/0}/namespace.yaml | 0 keila/{ => versions/0}/pvc.yaml | 0 keila/{ => versions/0}/service.yaml | 0 lemmy/app.yaml | 5 + lemmy/{ => versions/0}/README.md | 0 lemmy/{ => versions/0}/configmap.yaml | 0 lemmy/{ => versions/0}/db-init-job.yaml | 0 .../{ => versions/0}/deployment-backend.yaml | 0 lemmy/{ => versions/0}/deployment-pictrs.yaml | 0 lemmy/{ => versions/0}/deployment-ui.yaml | 0 lemmy/{ => versions/0}/ingress.yaml | 0 lemmy/{ => versions/0}/kustomization.yaml | 0 lemmy/{ => versions/0}/manifest.yaml | 4 - lemmy/{ => versions/0}/namespace.yaml | 0 lemmy/{ => versions/0}/pvc-pictrs.yaml | 0 lemmy/{ => versions/0}/service-backend.yaml | 0 lemmy/{ => versions/0}/service-pictrs.yaml | 0 lemmy/{ => versions/0}/service-ui.yaml | 0 listmonk/app.yaml | 5 + listmonk/manifest.yaml | 25 - listmonk/{ => versions/5}/README.md | 0 listmonk/{ => versions/5}/db-init-job.yaml | 0 listmonk/{ => versions/5}/deployment.yaml | 0 listmonk/{ => versions/5}/ingress.yaml | 0 listmonk/{ => versions/5}/kustomization.yaml | 0 listmonk/versions/5/manifest.yaml | 20 + listmonk/{ => versions/5}/namespace.yaml | 0 listmonk/{ => versions/5}/pvc.yaml | 0 listmonk/{ => versions/5}/service.yaml | 0 longhorn/app.yaml | 5 + longhorn/{ => versions/v1}/README.md | 0 longhorn/{ => versions/v1}/backup-target.yaml | 0 longhorn/{ => versions/v1}/ingress.yaml | 0 longhorn/{ => versions/v1}/kustomization.yaml | 0 longhorn/{ => versions/v1}/longhorn.yaml | 0 longhorn/{ => versions/v1}/manifest.yaml | 4 - .../v1}/volumesnapshotclass-longhorn.yaml | 0 loomio/app.yaml | 5 + loomio/{ => versions/3}/README.md | 0 loomio/{ => versions/3}/db-init-job.yaml | 0 .../{ => versions/3}/deployment-worker.yaml | 0 loomio/{ => versions/3}/deployment.yaml | 0 loomio/{ => versions/3}/ingress.yaml | 0 loomio/{ => versions/3}/kustomization.yaml | 0 loomio/{ => versions/3}/manifest.yaml | 4 - loomio/{ => versions/3}/namespace.yaml | 0 loomio/{ => versions/3}/pvc-storage.yaml | 0 loomio/{ => versions/3}/pvc-uploads.yaml | 0 loomio/{ => versions/3}/service.yaml | 0 mastodon/app.yaml | 5 + mastodon/{ => versions/4}/README.md | 0 mastodon/{ => versions/4}/db-init-job.yaml | 0 .../{ => versions/4}/deployment-sidekiq.yaml | 0 .../4}/deployment-streaming.yaml | 0 mastodon/{ => versions/4}/deployment-web.yaml | 0 mastodon/{ => versions/4}/ingress.yaml | 0 mastodon/{ => versions/4}/kustomization.yaml | 0 mastodon/{ => versions/4}/manifest.yaml | 4 - mastodon/{ => versions/4}/namespace.yaml | 0 mastodon/{ => versions/4}/pvc-assets.yaml | 0 mastodon/{ => versions/4}/pvc-system.yaml | 0 .../{ => versions/4}/service-streaming.yaml | 0 mastodon/{ => versions/4}/service-web.yaml | 0 mastodon/{ => versions/4}/vapid-init-job.yaml | 0 matrix/app.yaml | 5 + matrix/{ => versions/v1}/README.md | 0 matrix/{ => versions/v1}/configmap.yaml | 0 matrix/{ => versions/v1}/db-init-job.yaml | 0 matrix/{ => versions/v1}/deployment.yaml | 0 matrix/{ => versions/v1}/ingress.yaml | 0 matrix/{ => versions/v1}/kustomization.yaml | 0 matrix/{ => versions/v1}/manifest.yaml | 24 +- matrix/{ => versions/v1}/namespace.yaml | 0 matrix/{ => versions/v1}/pvc.yaml | 0 matrix/{ => versions/v1}/service.yaml | 0 memcached/app.yaml | 5 + memcached/manifest.yaml | 12 - memcached/{ => versions/1}/README.md | 0 memcached/{ => versions/1}/deployment.yaml | 0 memcached/{ => versions/1}/kustomization.yaml | 0 memcached/versions/1/manifest.yaml | 7 + memcached/{ => versions/1}/namespace.yaml | 0 memcached/{ => versions/1}/service.yaml | 0 metallb/app.yaml | 5 + metallb/{ => versions/v0}/README.md | 0 .../v0}/configuration/kustomization.yaml | 0 .../{ => versions/v0}/configuration/pool.yaml | 0 .../v0}/installation/kustomization.yaml | 0 metallb/{ => versions/v0}/kustomization.yaml | 0 metallb/{ => versions/v0}/manifest.yaml | 4 - mysql/app.yaml | 5 + mysql/manifest.yaml | 15 - mysql/{ => versions/9}/README.md | 0 mysql/{ => versions/9}/configmap.yaml | 0 mysql/{ => versions/9}/kustomization.yaml | 0 mysql/versions/9/manifest.yaml | 11 + mysql/{ => versions/9}/namespace.yaml | 0 mysql/{ => versions/9}/service-headless.yaml | 0 mysql/{ => versions/9}/service.yaml | 0 mysql/{ => versions/9}/statefulset.yaml | 0 nfs/app.yaml | 5 + nfs/{ => versions/v4}/README.md | 0 nfs/{ => versions/v4}/kustomization.yaml | 0 nfs/{ => versions/v4}/manifest.yaml | 4 - nfs/{ => versions/v4}/persistent-volume.yaml | 0 nfs/{ => versions/v4}/scripts/check-nfs.sh | 0 nfs/{ => versions/v4}/setup-nfs-host.sh | 0 nfs/{ => versions/v4}/storage-class.yaml | 0 .../{manifest.yaml => app.yaml} | 5 +- .../{ => versions/v0}/crds.yaml | 0 .../{ => versions/v0}/daemonset.yaml | 0 .../{ => versions/v0}/kustomization.yaml | 0 .../versions/v0/manifest.yaml | 4 + .../{ => versions/v0}/master.yaml | 0 .../{ => versions/v0}/namespace.yaml | 0 .../{ => versions/v0}/rbac.yaml | 0 nvidia-device-plugin/app.yaml | 5 + .../{ => versions/v0}/README.md | 0 .../{ => versions/v0}/daemonset.yaml | 0 .../{ => versions/v0}/kustomization.yaml | 0 .../{ => versions/v0}/manifest.yaml | 4 - .../{ => versions/v0}/runtimeclass.yaml | 0 open-webui/app.yaml | 5 + open-webui/manifest.yaml | 18 - open-webui/{ => versions/0}/README.md | 0 open-webui/{ => versions/0}/deployment.yaml | 0 open-webui/{ => versions/0}/ingress.yaml | 0 .../{ => versions/0}/kustomization.yaml | 0 open-webui/versions/0/manifest.yaml | 12 + open-webui/{ => versions/0}/namespace.yaml | 0 open-webui/{ => versions/0}/pvc.yaml | 0 open-webui/{ => versions/0}/service.yaml | 0 openproject/app.yaml | 5 + openproject/{ => versions/16}/README.md | 0 .../{ => versions/16}/configmap_core.yaml | 0 .../16}/configmap_memcached.yaml | 0 .../{ => versions/16}/db-init-job.yaml | 0 openproject/{ => versions/16}/ingress.yaml | 0 .../{ => versions/16}/kustomization.yaml | 0 openproject/{ => versions/16}/manifest.yaml | 15 +- openproject/{ => versions/16}/namespace.yaml | 0 .../16}/persistentvolumeclaim.yaml | 0 openproject/{ => versions/16}/seeder-job.yaml | 0 openproject/{ => versions/16}/service.yaml | 0 .../{ => versions/16}/serviceaccount.yaml | 0 .../{ => versions/16}/web-deployment.yaml | 0 .../{ => versions/16}/worker-deployment.yaml | 0 postgres/app.yaml | 5 + postgres/{ => versions/1}/README.md | 0 postgres/{ => versions/1}/deployment.yaml | 0 .../1}/doctor/kustomization.yaml | 0 .../{ => versions/1}/doctor/test-job.yaml | 0 postgres/{ => versions/1}/kustomization.yaml | 0 postgres/{ => versions/1}/manifest.yaml | 4 - postgres/{ => versions/1}/namespace.yaml | 0 postgres/{ => versions/1}/pvc.yaml | 0 postgres/{ => versions/1}/service.yaml | 0 redis/{manifest.yaml => app.yaml} | 9 +- redis/{ => versions/1}/README.md | 0 redis/{ => versions/1}/deployment.yaml | 0 redis/{ => versions/1}/kustomization.yaml | 0 redis/versions/1/manifest.yaml | 8 + redis/{ => versions/1}/namespace.yaml | 0 redis/{ => versions/1}/service.yaml | 0 smtp/app.yaml | 5 + smtp/{ => versions/1}/README.md | 0 smtp/{ => versions/1}/manifest.yaml | 5 +- .../{manifest.yaml => app.yaml} | 5 +- .../{ => versions/v8}/README.md | 0 .../{ => versions/v8}/deployment.yaml | 0 .../{ => versions/v8}/kustomization.yaml | 0 snapshot-controller/versions/v8/manifest.yaml | 4 + .../{ => versions/v8}/rbac.yaml | 0 .../v8}/volumesnapshotclasses.yaml | 0 .../v8}/volumesnapshotcontents.yaml | 0 .../{ => versions/v8}/volumesnapshots.yaml | 0 traefik/app.yaml | 5 + traefik/{ => versions/v3}/README.md | 0 traefik/{ => versions/v3}/deployment.yaml | 0 traefik/{ => versions/v3}/gateway.yaml | 0 traefik/{ => versions/v3}/gatewayclass.yaml | 0 traefik/{ => versions/v3}/ingressclass.yaml | 0 traefik/{ => versions/v3}/ingressroute.yaml | 0 traefik/{ => versions/v3}/kustomization.yaml | 0 traefik/{ => versions/v3}/manifest.yaml | 4 - traefik/{ => versions/v3}/namespace.yaml | 0 .../{ => versions/v3}/rbac/clusterrole.yaml | 0 .../v3}/rbac/clusterrolebinding.yaml | 0 .../v3}/rbac/serviceaccount.yaml | 0 traefik/{ => versions/v3}/service.yaml | 0 utils/{manifest.yaml => app.yaml} | 5 +- utils/{ => versions/v1}/README.md | 0 utils/{ => versions/v1}/kustomization.yaml | 0 utils/versions/v1/manifest.yaml | 4 + utils/{ => versions/v1}/netdebug.yaml | 0 vllm/app.yaml | 5 + vllm/{ => versions/0}/README.md | 0 vllm/{ => versions/0}/deployment.yaml | 0 vllm/{ => versions/0}/ingress.yaml | 0 vllm/{ => versions/0}/kustomization.yaml | 0 vllm/{ => versions/0}/manifest.yaml | 5 - vllm/{ => versions/0}/namespace.yaml | 0 vllm/{ => versions/0}/service.yaml | 0 352 files changed, 1264 insertions(+), 294 deletions(-) create mode 100644 admin/docs/design.md create mode 100644 cert-manager/app.yaml rename cert-manager/{ => versions/v1}/README.md (100%) rename cert-manager/{ => versions/v1}/internal-wildcard-certificate.yaml (100%) rename cert-manager/{ => versions/v1}/kustomization.yaml (100%) rename cert-manager/{ => versions/v1}/letsencrypt-prod-dns01.yaml (100%) rename cert-manager/{ => versions/v1}/letsencrypt-staging-dns01.yaml (100%) rename cert-manager/{ => versions/v1}/manifest.yaml (85%) rename cert-manager/{ => versions/v1}/namespace.yaml (100%) rename cert-manager/{ => versions/v1}/scripts/repair-certificates.sh (100%) rename cert-manager/{ => versions/v1}/upstream/cert-manager.yaml (100%) rename cert-manager/{ => versions/v1}/upstream/kustomization.yaml (100%) rename cert-manager/{ => versions/v1}/wildcard-certificate.yaml (100%) create mode 100644 coredns/app.yaml rename coredns/{ => versions/v1}/README.md (100%) rename coredns/{ => versions/v1}/coredns-custom-config.yaml (100%) rename coredns/{ => versions/v1}/kustomization.yaml (100%) rename coredns/{ => versions/v1}/manifest.yaml (72%) create mode 100644 crowdsec/app.yaml rename crowdsec/{ => versions/v1}/README.md (100%) rename crowdsec/{ => versions/v1}/configmap.yaml (100%) rename crowdsec/{ => versions/v1}/crowdsec-deployment.yaml (100%) rename crowdsec/{ => versions/v1}/crowdsec-service.yaml (100%) rename crowdsec/{ => versions/v1}/kustomization.yaml (100%) rename crowdsec/{ => versions/v1}/manifest.yaml (78%) rename crowdsec/{ => versions/v1}/middleware.yaml (100%) rename crowdsec/{ => versions/v1}/namespace.yaml (100%) rename crowdsec/{ => versions/v1}/pvc.yaml (100%) rename crowdsec/{ => versions/v1}/serviceaccount.yaml (100%) create mode 100644 decidim/app.yaml rename decidim/{ => versions/0}/Dockerfile (100%) rename decidim/{ => versions/0}/README.md (100%) rename decidim/{ => versions/0}/db-init-job.yaml (100%) rename decidim/{ => versions/0}/deployment.yaml (100%) rename decidim/{ => versions/0}/ingress.yaml (100%) rename decidim/{ => versions/0}/kustomization.yaml (100%) rename decidim/{ => versions/0}/manifest.yaml (77%) rename decidim/{ => versions/0}/namespace.yaml (100%) rename decidim/{ => versions/0}/pvc.yaml (100%) rename decidim/{ => versions/0}/service.yaml (100%) rename decidim/{ => versions/0}/serviceaccount.yaml (100%) create mode 100644 discourse/app.yaml rename discourse/{ => versions/3}/README.md (100%) rename discourse/{ => versions/3}/db-init-job.yaml (100%) rename discourse/{ => versions/3}/deployment.yaml (100%) rename discourse/{ => versions/3}/ingress.yaml (100%) rename discourse/{ => versions/3}/kustomization.yaml (100%) rename discourse/{ => versions/3}/manifest.yaml (81%) rename discourse/{ => versions/3}/namespace.yaml (100%) rename discourse/{ => versions/3}/pvc.yaml (100%) rename discourse/{ => versions/3}/service.yaml (100%) rename discourse/{ => versions/3}/serviceaccount.yaml (100%) create mode 100644 docker-registry/app.yaml rename docker-registry/{ => versions/3}/deployment.yaml (100%) rename docker-registry/{ => versions/3}/ingress.yaml (100%) rename docker-registry/{ => versions/3}/kustomization.yaml (100%) rename docker-registry/{ => versions/3}/manifest.yaml (59%) rename docker-registry/{ => versions/3}/namespace.yaml (100%) rename docker-registry/{ => versions/3}/pvc.yaml (100%) rename docker-registry/{ => versions/3}/service.yaml (100%) create mode 100644 e2e-test-app/app.yaml rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/db-init-job.yaml (100%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/deployment.yaml (100%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/kustomization.yaml (100%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/manifest.yaml (76%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/namespace.yaml (100%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/pvc.yaml (100%) rename e2e-test-app/{.versions/1.0.0-1 => versions/1}/service.yaml (100%) rename e2e-test-app/{ => versions/2}/db-init-job.yaml (100%) rename e2e-test-app/{ => versions/2}/deployment.yaml (100%) rename e2e-test-app/{ => versions/2}/kustomization.yaml (100%) rename e2e-test-app/{ => versions/2}/manifest.yaml (59%) rename e2e-test-app/{ => versions/2}/namespace.yaml (100%) rename e2e-test-app/{ => versions/2}/pvc.yaml (100%) rename e2e-test-app/{ => versions/2}/service.yaml (100%) create mode 100644 example-admin/app.yaml rename example-admin/{ => versions/1}/README.md (100%) rename example-admin/{ => versions/1}/deployment.yaml (100%) rename example-admin/{ => versions/1}/ingress.yaml (100%) rename example-admin/{ => versions/1}/kustomization.yaml (100%) rename example-admin/{ => versions/1}/manifest.yaml (60%) rename example-admin/{ => versions/1}/namespace.yaml (100%) rename example-admin/{ => versions/1}/service.yaml (100%) create mode 100644 example-app/app.yaml rename example-app/{ => versions/1}/README.md (100%) rename example-app/{ => versions/1}/deployment.yaml (100%) rename example-app/{ => versions/1}/ingress.yaml (100%) rename example-app/{ => versions/1}/kustomization.yaml (100%) rename example-app/{ => versions/1}/manifest.yaml (63%) rename example-app/{ => versions/1}/namespace.yaml (100%) rename example-app/{ => versions/1}/service.yaml (100%) create mode 100644 externaldns/app.yaml rename externaldns/{ => versions/v0}/README.md (100%) rename externaldns/{ => versions/v0}/externaldns-cloudflare.yaml (100%) rename externaldns/{ => versions/v0}/externaldns-rbac.yaml (100%) rename externaldns/{ => versions/v0}/kustomization.yaml (100%) rename externaldns/{ => versions/v0}/manifest.yaml (78%) rename externaldns/{ => versions/v0}/namespace.yaml (100%) create mode 100644 ghost/app.yaml rename ghost/{ => versions/5}/README.md (100%) rename ghost/{ => versions/5}/db-init-job.yaml (100%) rename ghost/{ => versions/5}/deployment.yaml (100%) rename ghost/{ => versions/5}/ingress.yaml (100%) rename ghost/{ => versions/5}/kustomization.yaml (100%) rename ghost/{ => versions/5}/manifest.yaml (62%) rename ghost/{ => versions/5}/namespace.yaml (100%) rename ghost/{ => versions/5}/pvc.yaml (100%) rename ghost/{ => versions/5}/service.yaml (100%) create mode 100644 gitea/app.yaml rename gitea/{ => versions/1}/README.md (100%) rename gitea/{ => versions/1}/db-init-job.yaml (100%) rename gitea/{ => versions/1}/deployment.yaml (100%) rename gitea/{ => versions/1}/gitea.env (100%) rename gitea/{ => versions/1}/ingress.yaml (100%) rename gitea/{ => versions/1}/kustomization.yaml (100%) rename gitea/{ => versions/1}/manifest.yaml (64%) rename gitea/{ => versions/1}/namespace.yaml (100%) rename gitea/{ => versions/1}/pvc.yaml (100%) rename gitea/{ => versions/1}/service.yaml (100%) create mode 100644 headlamp/app.yaml rename headlamp/{ => versions/v0}/deployment.yaml (100%) rename headlamp/{ => versions/v0}/ingress.yaml (100%) rename headlamp/{ => versions/v0}/kubeconfig-cm.yaml (100%) rename headlamp/{ => versions/v0}/kustomization.yaml (100%) rename headlamp/{ => versions/v0}/manifest.yaml (62%) rename headlamp/{ => versions/v0}/namespace.yaml (100%) rename headlamp/{ => versions/v0}/service-account.yaml (100%) rename headlamp/{ => versions/v0}/service.yaml (100%) create mode 100644 immich/app.yaml rename immich/{ => versions/1}/README.md (100%) rename immich/{ => versions/1}/db-init-job.yaml (100%) rename immich/{ => versions/1}/deployment-machine-learning.yaml (100%) rename immich/{ => versions/1}/deployment-microservices.yaml (100%) rename immich/{ => versions/1}/deployment-server.yaml (100%) rename immich/{ => versions/1}/ingress.yaml (100%) rename immich/{ => versions/1}/kustomization.yaml (100%) rename immich/{ => versions/1}/manifest.yaml (53%) rename immich/{ => versions/1}/namespace.yaml (100%) rename immich/{ => versions/1}/pvc.yaml (100%) rename immich/{ => versions/1}/service.yaml (100%) create mode 100644 keila/app.yaml rename keila/{ => versions/0}/README.md (100%) rename keila/{ => versions/0}/db-init-job.yaml (100%) rename keila/{ => versions/0}/deployment.yaml (100%) rename keila/{ => versions/0}/ingress.yaml (100%) rename keila/{ => versions/0}/kustomization.yaml (100%) rename keila/{ => versions/0}/manifest.yaml (78%) rename keila/{ => versions/0}/middleware-cors.yaml (100%) rename keila/{ => versions/0}/namespace.yaml (100%) rename keila/{ => versions/0}/pvc.yaml (100%) rename keila/{ => versions/0}/service.yaml (100%) create mode 100644 lemmy/app.yaml rename lemmy/{ => versions/0}/README.md (100%) rename lemmy/{ => versions/0}/configmap.yaml (100%) rename lemmy/{ => versions/0}/db-init-job.yaml (100%) rename lemmy/{ => versions/0}/deployment-backend.yaml (100%) rename lemmy/{ => versions/0}/deployment-pictrs.yaml (100%) rename lemmy/{ => versions/0}/deployment-ui.yaml (100%) rename lemmy/{ => versions/0}/ingress.yaml (100%) rename lemmy/{ => versions/0}/kustomization.yaml (100%) rename lemmy/{ => versions/0}/manifest.yaml (73%) rename lemmy/{ => versions/0}/namespace.yaml (100%) rename lemmy/{ => versions/0}/pvc-pictrs.yaml (100%) rename lemmy/{ => versions/0}/service-backend.yaml (100%) rename lemmy/{ => versions/0}/service-pictrs.yaml (100%) rename lemmy/{ => versions/0}/service-ui.yaml (100%) create mode 100644 listmonk/app.yaml delete mode 100644 listmonk/manifest.yaml rename listmonk/{ => versions/5}/README.md (100%) rename listmonk/{ => versions/5}/db-init-job.yaml (100%) rename listmonk/{ => versions/5}/deployment.yaml (100%) rename listmonk/{ => versions/5}/ingress.yaml (100%) rename listmonk/{ => versions/5}/kustomization.yaml (100%) create mode 100644 listmonk/versions/5/manifest.yaml rename listmonk/{ => versions/5}/namespace.yaml (100%) rename listmonk/{ => versions/5}/pvc.yaml (100%) rename listmonk/{ => versions/5}/service.yaml (100%) create mode 100644 longhorn/app.yaml rename longhorn/{ => versions/v1}/README.md (100%) rename longhorn/{ => versions/v1}/backup-target.yaml (100%) rename longhorn/{ => versions/v1}/ingress.yaml (100%) rename longhorn/{ => versions/v1}/kustomization.yaml (100%) rename longhorn/{ => versions/v1}/longhorn.yaml (100%) rename longhorn/{ => versions/v1}/manifest.yaml (70%) rename longhorn/{ => versions/v1}/volumesnapshotclass-longhorn.yaml (100%) create mode 100644 loomio/app.yaml rename loomio/{ => versions/3}/README.md (100%) rename loomio/{ => versions/3}/db-init-job.yaml (100%) rename loomio/{ => versions/3}/deployment-worker.yaml (100%) rename loomio/{ => versions/3}/deployment.yaml (100%) rename loomio/{ => versions/3}/ingress.yaml (100%) rename loomio/{ => versions/3}/kustomization.yaml (100%) rename loomio/{ => versions/3}/manifest.yaml (86%) rename loomio/{ => versions/3}/namespace.yaml (100%) rename loomio/{ => versions/3}/pvc-storage.yaml (100%) rename loomio/{ => versions/3}/pvc-uploads.yaml (100%) rename loomio/{ => versions/3}/service.yaml (100%) create mode 100644 mastodon/app.yaml rename mastodon/{ => versions/4}/README.md (100%) rename mastodon/{ => versions/4}/db-init-job.yaml (100%) rename mastodon/{ => versions/4}/deployment-sidekiq.yaml (100%) rename mastodon/{ => versions/4}/deployment-streaming.yaml (100%) rename mastodon/{ => versions/4}/deployment-web.yaml (100%) rename mastodon/{ => versions/4}/ingress.yaml (100%) rename mastodon/{ => versions/4}/kustomization.yaml (100%) rename mastodon/{ => versions/4}/manifest.yaml (87%) rename mastodon/{ => versions/4}/namespace.yaml (100%) rename mastodon/{ => versions/4}/pvc-assets.yaml (100%) rename mastodon/{ => versions/4}/pvc-system.yaml (100%) rename mastodon/{ => versions/4}/service-streaming.yaml (100%) rename mastodon/{ => versions/4}/service-web.yaml (100%) rename mastodon/{ => versions/4}/vapid-init-job.yaml (100%) create mode 100644 matrix/app.yaml rename matrix/{ => versions/v1}/README.md (100%) rename matrix/{ => versions/v1}/configmap.yaml (100%) rename matrix/{ => versions/v1}/db-init-job.yaml (100%) rename matrix/{ => versions/v1}/deployment.yaml (100%) rename matrix/{ => versions/v1}/ingress.yaml (100%) rename matrix/{ => versions/v1}/kustomization.yaml (100%) rename matrix/{ => versions/v1}/manifest.yaml (57%) rename matrix/{ => versions/v1}/namespace.yaml (100%) rename matrix/{ => versions/v1}/pvc.yaml (100%) rename matrix/{ => versions/v1}/service.yaml (100%) create mode 100644 memcached/app.yaml delete mode 100644 memcached/manifest.yaml rename memcached/{ => versions/1}/README.md (100%) rename memcached/{ => versions/1}/deployment.yaml (100%) rename memcached/{ => versions/1}/kustomization.yaml (100%) create mode 100644 memcached/versions/1/manifest.yaml rename memcached/{ => versions/1}/namespace.yaml (100%) rename memcached/{ => versions/1}/service.yaml (100%) create mode 100644 metallb/app.yaml rename metallb/{ => versions/v0}/README.md (100%) rename metallb/{ => versions/v0}/configuration/kustomization.yaml (100%) rename metallb/{ => versions/v0}/configuration/pool.yaml (100%) rename metallb/{ => versions/v0}/installation/kustomization.yaml (100%) rename metallb/{ => versions/v0}/kustomization.yaml (100%) rename metallb/{ => versions/v0}/manifest.yaml (74%) create mode 100644 mysql/app.yaml delete mode 100644 mysql/manifest.yaml rename mysql/{ => versions/9}/README.md (100%) rename mysql/{ => versions/9}/configmap.yaml (100%) rename mysql/{ => versions/9}/kustomization.yaml (100%) create mode 100644 mysql/versions/9/manifest.yaml rename mysql/{ => versions/9}/namespace.yaml (100%) rename mysql/{ => versions/9}/service-headless.yaml (100%) rename mysql/{ => versions/9}/service.yaml (100%) rename mysql/{ => versions/9}/statefulset.yaml (100%) create mode 100644 nfs/app.yaml rename nfs/{ => versions/v4}/README.md (100%) rename nfs/{ => versions/v4}/kustomization.yaml (100%) rename nfs/{ => versions/v4}/manifest.yaml (71%) rename nfs/{ => versions/v4}/persistent-volume.yaml (100%) rename nfs/{ => versions/v4}/scripts/check-nfs.sh (100%) rename nfs/{ => versions/v4}/setup-nfs-host.sh (100%) rename nfs/{ => versions/v4}/storage-class.yaml (100%) rename node-feature-discovery/{manifest.yaml => app.yaml} (55%) rename node-feature-discovery/{ => versions/v0}/crds.yaml (100%) rename node-feature-discovery/{ => versions/v0}/daemonset.yaml (100%) rename node-feature-discovery/{ => versions/v0}/kustomization.yaml (100%) create mode 100644 node-feature-discovery/versions/v0/manifest.yaml rename node-feature-discovery/{ => versions/v0}/master.yaml (100%) rename node-feature-discovery/{ => versions/v0}/namespace.yaml (100%) rename node-feature-discovery/{ => versions/v0}/rbac.yaml (100%) create mode 100644 nvidia-device-plugin/app.yaml rename nvidia-device-plugin/{ => versions/v0}/README.md (100%) rename nvidia-device-plugin/{ => versions/v0}/daemonset.yaml (100%) rename nvidia-device-plugin/{ => versions/v0}/kustomization.yaml (100%) rename nvidia-device-plugin/{ => versions/v0}/manifest.yaml (69%) rename nvidia-device-plugin/{ => versions/v0}/runtimeclass.yaml (100%) create mode 100644 open-webui/app.yaml delete mode 100644 open-webui/manifest.yaml rename open-webui/{ => versions/0}/README.md (100%) rename open-webui/{ => versions/0}/deployment.yaml (100%) rename open-webui/{ => versions/0}/ingress.yaml (100%) rename open-webui/{ => versions/0}/kustomization.yaml (100%) create mode 100644 open-webui/versions/0/manifest.yaml rename open-webui/{ => versions/0}/namespace.yaml (100%) rename open-webui/{ => versions/0}/pvc.yaml (100%) rename open-webui/{ => versions/0}/service.yaml (100%) create mode 100644 openproject/app.yaml rename openproject/{ => versions/16}/README.md (100%) rename openproject/{ => versions/16}/configmap_core.yaml (100%) rename openproject/{ => versions/16}/configmap_memcached.yaml (100%) rename openproject/{ => versions/16}/db-init-job.yaml (100%) rename openproject/{ => versions/16}/ingress.yaml (100%) rename openproject/{ => versions/16}/kustomization.yaml (100%) rename openproject/{ => versions/16}/manifest.yaml (59%) rename openproject/{ => versions/16}/namespace.yaml (100%) rename openproject/{ => versions/16}/persistentvolumeclaim.yaml (100%) rename openproject/{ => versions/16}/seeder-job.yaml (100%) rename openproject/{ => versions/16}/service.yaml (100%) rename openproject/{ => versions/16}/serviceaccount.yaml (100%) rename openproject/{ => versions/16}/web-deployment.yaml (100%) rename openproject/{ => versions/16}/worker-deployment.yaml (100%) create mode 100644 postgres/app.yaml rename postgres/{ => versions/1}/README.md (100%) rename postgres/{ => versions/1}/deployment.yaml (100%) rename postgres/{ => versions/1}/doctor/kustomization.yaml (100%) rename postgres/{ => versions/1}/doctor/test-job.yaml (100%) rename postgres/{ => versions/1}/kustomization.yaml (100%) rename postgres/{ => versions/1}/manifest.yaml (52%) rename postgres/{ => versions/1}/namespace.yaml (100%) rename postgres/{ => versions/1}/pvc.yaml (100%) rename postgres/{ => versions/1}/service.yaml (100%) rename redis/{manifest.yaml => app.yaml} (53%) rename redis/{ => versions/1}/README.md (100%) rename redis/{ => versions/1}/deployment.yaml (100%) rename redis/{ => versions/1}/kustomization.yaml (100%) create mode 100644 redis/versions/1/manifest.yaml rename redis/{ => versions/1}/namespace.yaml (100%) rename redis/{ => versions/1}/service.yaml (100%) create mode 100644 smtp/app.yaml rename smtp/{ => versions/1}/README.md (100%) rename smtp/{ => versions/1}/manifest.yaml (54%) rename snapshot-controller/{manifest.yaml => app.yaml} (61%) rename snapshot-controller/{ => versions/v8}/README.md (100%) rename snapshot-controller/{ => versions/v8}/deployment.yaml (100%) rename snapshot-controller/{ => versions/v8}/kustomization.yaml (100%) create mode 100644 snapshot-controller/versions/v8/manifest.yaml rename snapshot-controller/{ => versions/v8}/rbac.yaml (100%) rename snapshot-controller/{ => versions/v8}/volumesnapshotclasses.yaml (100%) rename snapshot-controller/{ => versions/v8}/volumesnapshotcontents.yaml (100%) rename snapshot-controller/{ => versions/v8}/volumesnapshots.yaml (100%) create mode 100644 traefik/app.yaml rename traefik/{ => versions/v3}/README.md (100%) rename traefik/{ => versions/v3}/deployment.yaml (100%) rename traefik/{ => versions/v3}/gateway.yaml (100%) rename traefik/{ => versions/v3}/gatewayclass.yaml (100%) rename traefik/{ => versions/v3}/ingressclass.yaml (100%) rename traefik/{ => versions/v3}/ingressroute.yaml (100%) rename traefik/{ => versions/v3}/kustomization.yaml (100%) rename traefik/{ => versions/v3}/manifest.yaml (85%) rename traefik/{ => versions/v3}/namespace.yaml (100%) rename traefik/{ => versions/v3}/rbac/clusterrole.yaml (100%) rename traefik/{ => versions/v3}/rbac/clusterrolebinding.yaml (100%) rename traefik/{ => versions/v3}/rbac/serviceaccount.yaml (100%) rename traefik/{ => versions/v3}/service.yaml (100%) rename utils/{manifest.yaml => app.yaml} (60%) rename utils/{ => versions/v1}/README.md (100%) rename utils/{ => versions/v1}/kustomization.yaml (100%) create mode 100644 utils/versions/v1/manifest.yaml rename utils/{ => versions/v1}/netdebug.yaml (100%) create mode 100644 vllm/app.yaml rename vllm/{ => versions/0}/README.md (100%) rename vllm/{ => versions/0}/deployment.yaml (100%) rename vllm/{ => versions/0}/ingress.yaml (100%) rename vllm/{ => versions/0}/kustomization.yaml (100%) rename vllm/{ => versions/0}/manifest.yaml (60%) rename vllm/{ => versions/0}/namespace.yaml (100%) rename vllm/{ => versions/0}/service.yaml (100%) diff --git a/ADDING-APPS.md b/ADDING-APPS.md index f9f8c61..41f9b1d 100644 --- a/ADDING-APPS.md +++ b/ADDING-APPS.md @@ -6,26 +6,65 @@ This guide is for contributors and maintainers who want to create or modify Wild Wild Cloud apps are Kubernetes applications packaged as Kustomize configurations with standardized conventions for configuration management, secrets handling, and deployment. +## Directory Structure + +Each app has a two-level structure: an `app.yaml` meta file at the root, and version-specific files inside `versions/`. Version directories are named by **slot** (typically the major version), not by the full version string. The actual version lives in `manifest.yaml` inside the slot. + +``` +myapp/ +├── app.yaml # App identity, latest slot pointer, upgrade routing +└── versions/ + ├── 2/ # Current latest slot (manifest.yaml has version: 2.3.1) + │ ├── manifest.yaml # Version-specific config (requires, defaultConfig, etc.) + │ ├── kustomization.yaml + │ └── *.yaml # Kubernetes resource templates + └── 1/ # Waypoint slot (only if upgrade routing needs it) + ├── manifest.yaml + ├── kustomization.yaml + └── *.yaml +``` + +Most apps have **one** version directory. A second appears only when a waypoint is needed for upgrade routing. + ## Required Files Each app directory must contain: -1. **`manifest.yaml`** - App metadata and configuration schema -2. **`kustomization.yaml`** - Kustomize configuration with Wild Cloud labels -3. **Resource files** - Kubernetes manifests (deployments, services, ingresses, etc.) +1. **`app.yaml`** - App identity, latest slot pointer, and upgrade routing rules +2. **`versions/{slot}/manifest.yaml`** - Version-specific configuration schema +3. **`versions/{slot}/kustomization.yaml`** - Kustomize configuration with Wild Cloud labels +4. **`versions/{slot}/*.yaml`** - Kubernetes resource templates -## App Manifest (`manifest.yaml`) +## App Meta (`app.yaml`) -The manifest defines the app's metadata, dependencies, configuration schema, and secret requirements. - -This is the contents of an example `manifest.yaml` file for an app named "immich": +The `app.yaml` file at the app root defines identity, display info, and upgrade routing. These fields are version-independent. ```yaml name: immich is: immich description: Immich is a self-hosted photo and video backup solution that allows you to store, manage, and share your media files securely. -version: 1.0.0 icon: https://immich.app/assets/images/logo.png +latest: "1" +``` + +### App Meta Fields + +| Field | Required | Description | +|-------|----------|-------------| +| `name` | Yes | App identifier (must match directory name) | +| `is` | Yes | Unique id for this app. Used for `requires` mapping | +| `description` | Yes | Brief app description shown in listings | +| `icon` | No | URL to app icon for UI display | +| `category` | No | Category (e.g., `infrastructure`) | +| `latest` | Yes | Slot name -- directory name under `versions/` (not a version string) | +| `upgrade` | No | Upgrade routing rules (see Upgrade Metadata below) | + +## Version Manifest (`versions/{slot}/manifest.yaml`) + +Each version slot contains a `manifest.yaml` with version-specific installation details: dependencies, configuration schema, and secret requirements. + +```yaml +version: 1.135.3-1 requires: - name: pg alias: db # Use a different reference name in templates @@ -46,21 +85,17 @@ defaultConfig: defaultSecrets: - key: password # Random value will be generated if empty - key: dbUrl - default: "postgresql://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?pool=30" # Can reference secrets and config as long as they have been defined before this line. Reference config with {{ .app.? }} and secrets with {{ .secrets.? }} + default: "postgresql://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?pool=30" requiredSecrets: - db.password # References postgres app via 'db' alias - redis.auth # References redis app via 'redis' name (no alias) ``` -### Manifest Fields +### Version Manifest Fields | Field | Required | Description | |-------|----------|-------------| -| `name` | Yes | App identifier (must match directory name) | -| `is` | Yes | Unique id for this app. Used for `requires` mapping | -| `description` | Yes | Brief app description shown in listings | | `version` | Yes | App version (see Versioning Convention below) | -| `icon` | No | URL to app icon for UI display | | `requires` | No | List of dependency apps with optional aliases | | `defaultConfig` | Yes | Default configuration values merged into operator's `config.yaml` | | `defaultSecrets` | No | This app's secrets (no 'default' = auto-generated) | @@ -85,6 +120,27 @@ Wild Cloud uses a two-part version scheme inspired by Debian packaging: `=3.5.0" # Can upgrade directly from 3.5.x - version: ">=3.4.0" - via: "3.5.3-1" # Must pass through 3.5.x first + via: "2" # Must pass through slot "2" first (a waypoint) - version: "<3.4.0" blocked: true notes: "Requires sequential major upgrades. See upstream docs." preUpgrade: backup: required # "none", "recommended", or "required" +``` + +Note: `latest` and `via` are **slot names** (directory names), not version strings. The system reads the actual version from the manifest inside each slot. + +Version-specific upgrade behavior (migrations, configMigrations) lives in the version's `manifest.yaml`: + +```yaml +# versions/3/manifest.yaml +version: 3.6.0 +upgrade: migrations: pre: - - migrations/pre-deploy.yaml # K8s Job YAML paths relative to app dir + - migrations/pre-deploy.yaml # K8s Job YAML paths relative to version dir post: - migrations/post-deploy.yaml configMigrations: oldKeyName: newKeyName # Renames config keys automatically ``` -**Fields:** +**`app.yaml` upgrade fields:** | Field | Description | |-------|-------------| | `from` | List of version constraint rules, evaluated in order (first match wins) | | `from[].version` | Version constraint: `>=`, `>`, `<=`, `<`, `=`, or `>0` (matches any) | -| `from[].via` | Waypoint version in `.versions/` — upgrade must pass through this version first | +| `from[].via` | Waypoint slot name in `versions/` — upgrade must pass through this slot first | | `from[].blocked` | If true, upgrade is blocked with an error message | | `from[].notes` | Human-readable message shown when blocked or as context | | `preUpgrade.backup` | Backup requirement: `"required"` blocks upgrade until backup is done, `"recommended"` shows a warning | -| `migrations.pre` | K8s Job YAMLs to run before deploying each version step | -| `migrations.post` | K8s Job YAMLs to run after deploying each version step | + +**Version `manifest.yaml` upgrade fields:** + +| Field | Description | +|-------|-------------| +| `migrations.pre` | K8s Job YAMLs to run before deploying this version step | +| `migrations.post` | K8s Job YAMLs to run after deploying this version step | | `configMigrations` | Map of old config key → new config key for automatic renaming | -#### Waypoint versions (`.versions/` directory) +#### Waypoint versions -When an upgrade requires passing through an intermediate version, store that version's files in a `.versions/` subdirectory: +When an upgrade requires passing through an intermediate version, add that version's files as a new slot in the `versions/` directory alongside the latest: ``` myapp/ -├── manifest.yaml # Latest version (e.g., 3.6.0) -├── kustomization.yaml -├── *.yaml -└── .versions/ - └── 3.5.3-1/ # Waypoint version - ├── manifest.yaml # version: 3.5.3-1 (with its own upgrade rules) +├── app.yaml # Routing rules + latest pointer +└── versions/ + ├── 3/ # Latest slot (version: 3.6.0) + │ ├── manifest.yaml + │ ├── kustomization.yaml + │ └── *.yaml + └── 2/ # Waypoint slot (version: 2.8.0) + ├── manifest.yaml ├── kustomization.yaml └── *.yaml ``` -Each waypoint is a complete app package. The system computes a chain automatically — for example, upgrading from 3.4.0 to 3.6.0 might produce: `3.4.0 → 3.5.3-1 → 3.6.0`. +Each waypoint is a complete app package. The system computes a chain automatically — for example, upgrading from 2.3.0 to 3.6.0 might produce: `2.3.0 → 2.8.0 (slot "2") → 3.6.0 (slot "3")`. -**Creating a waypoint:** +**Creating a waypoint:** The current latest slot becomes the waypoint (leave it in place), then create a new slot for the new major version: ```bash -mkdir -p wild-directory/myapp/.versions -rsync -a --exclude='.versions' wild-directory/myapp/ wild-directory/myapp/.versions/3.5.3-1/ -# Now update wild-directory/myapp/manifest.yaml to the new version + upgrade rules +# Current slot "2" (with version 2.8.0) stays as a waypoint +# Create the new slot for the next major version +mkdir -p wild-directory/myapp/versions/3 +# ... add manifest.yaml, kustomization.yaml, *.yaml for 3.0.0 ... +# Update app.yaml: set latest to "3", add upgrade routing rules with via: "2" ``` #### Migration jobs Migration jobs are K8s Job manifests that run database migrations or other one-time tasks during an upgrade step. They must be **idempotent** (safe to re-run) since a failed upgrade might be retried. -Place migration job files in the waypoint or app directory and reference them from the `migrations` field: +Place migration job files in the version slot directory and reference them from that version's `manifest.yaml`: ```yaml -# migrations/db-migrate.yaml +# versions/3/migrations/db-migrate.yaml apiVersion: batch/v1 kind: Job metadata: @@ -177,17 +257,18 @@ spec: command: ["bundle", "exec", "rake", "db:migrate"] ``` -Each migration step belongs to the version that introduces the breaking change. If version 3.6.0 requires a schema migration, the migration lives in the 3.6.0 manifest (or its waypoint), not on 3.5.x. +Each migration step belongs to the version that introduces the breaking change. If version 3.6.0 requires a schema migration, the migration lives in the slot `3/` directory. #### Example: simple app with waypoint ```yaml -# myapp/manifest.yaml (version 2.0.0) -version: 2.0.0 +# myapp/app.yaml +name: myapp +latest: "2" upgrade: from: - version: ">=1.0.0" - via: "1.0.0-1" + via: "1" - version: "<1.0.0" blocked: true notes: "Versions before 1.0.0 are not supported" @@ -195,7 +276,171 @@ upgrade: backup: recommended ``` -This creates a 2-step upgrade path: `1.x → 1.0.0-1 → 2.0.0`. The waypoint at `.versions/1.0.0-1/` has no `upgrade` block, so it accepts any version directly. +This creates a 2-step upgrade path: `1.x → slot "1" (e.g., version 1.0.0-1) → slot "2" (e.g., version 2.0.0)`. The waypoint at `versions/1/` is a complete app package used as an intermediate step. + +### Adding a New Version + +When an upstream app releases a new version, you update the Wild Directory package to track it. The process depends on whether the new version has breaking changes. + +#### Simple version bump (no breaking changes) + +Most version updates are simple — update the container image tag, adjust any changed config, and update the version in `manifest.yaml`. No directory rename or `app.yaml` change needed. + +```bash +# 1. Update files inside the existing slot +# - Bump version in manifest.yaml (e.g., 1.2.0 → 1.3.0) +# - Update container image tags in deployment YAMLs +# - Adjust defaultConfig if the new version adds/changes config +vi wild-directory/myapp/versions/1/manifest.yaml +vi wild-directory/myapp/versions/1/deployment.yaml + +# 2. app.yaml doesn't change — latest still points to slot "1" + +# 3. Test +wild app add myapp && wild app deploy myapp +``` + +The directory structure stays the same: +``` +myapp/ +├── app.yaml # latest: "1" (unchanged) +└── versions/ + └── 1/ + ├── manifest.yaml # version: 1.3.0 (bumped) + └── *.yaml +``` + +#### Version bump with breaking changes (waypoint required) + +When the new version can't safely upgrade from all previous versions — e.g., a database schema change requires stepping through an intermediate version — create a new slot for the new major version, keep the old slot as a waypoint, and add routing rules. + +```bash +# 1. The current slot (2/) becomes a waypoint — leave it in place +# 2. Create a new slot for the new major version +mkdir -p wild-directory/myapp/versions/3 +# ... add new version files (manifest.yaml, kustomization.yaml, *.yaml) ... + +# 3. Update app.yaml: point latest to new slot, add upgrade routing rules +``` + +```yaml +# app.yaml +name: myapp +latest: "3" +upgrade: + from: + - version: ">=2.5.0" # 2.5.x can upgrade directly + - version: ">=2.0.0" + via: "2" # Older 2.x must pass through slot 2 first + - version: "<2.0.0" + blocked: true + notes: "Upgrade to 2.x first. See upstream migration guide." + preUpgrade: + backup: recommended +``` + +The resulting directory: +``` +myapp/ +├── app.yaml # latest: "3", upgrade routing rules +└── versions/ + ├── 3/ # New latest (manifest.yaml has version: 3.0.0) + │ ├── manifest.yaml + │ └── *.yaml + └── 2/ # Waypoint (manifest.yaml has version: 2.5.0) + ├── manifest.yaml + └── *.yaml +``` + +#### Version bump with database migrations + +When the new version requires a schema migration (e.g., `ALTER TABLE`, new indexes, data transformations), add migration job files to the slot directory and reference them from the version's `manifest.yaml`. Since this is a minor/patch update within the same major version, update files in-place in the existing slot. + +```bash +# 1. Update files inside the existing slot +# - Bump version in manifest.yaml (e.g., 2.0.0 → 2.1.0) +# - Update container image tags in deployment YAMLs +vi wild-directory/myapp/versions/2/manifest.yaml +vi wild-directory/myapp/versions/2/deployment.yaml + +# 2. Add migration job files +mkdir -p wild-directory/myapp/versions/2/migrations +``` + +Create the migration job: +```yaml +# versions/2/migrations/pre-deploy.yaml +apiVersion: batch/v1 +kind: Job +metadata: + name: myapp-migrate-2-1-0 + namespace: myapp +spec: + backoffLimit: 3 + template: + spec: + restartPolicy: OnFailure + securityContext: + runAsNonRoot: true + runAsUser: 999 + seccompProfile: + type: RuntimeDefault + containers: + - name: migrate + image: myapp:2.1.0 + command: ["bundle", "exec", "rake", "db:migrate"] + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: [ALL] + env: + - name: DATABASE_URL + valueFrom: + secretKeyRef: + name: myapp-secrets + key: dbUrl +``` + +Reference the migration in the version manifest: +```yaml +# versions/2/manifest.yaml +version: 2.1.0 +upgrade: + migrations: + pre: + - migrations/pre-deploy.yaml +defaultConfig: + # ... +``` + +`app.yaml` doesn't change — `latest` still points to slot `"2"`. + +Migration jobs must be **idempotent** — safe to re-run if an upgrade is retried after a partial failure. Use `CREATE IF NOT EXISTS`, `ALTER TABLE IF NOT EXISTS`, etc. + +**Pre vs post migrations:** +- `pre` — runs before deploying the new version's manifests (schema changes that the new code needs) +- `post` — runs after deploying (data backfills, cleanup that the old code didn't need) + +#### Version bump with config key renames + +When a version renames config keys (e.g., `dbHost` → `db.host`), use `configMigrations` to automatically rename them during upgrade: + +```yaml +# versions/2/manifest.yaml +version: 2.1.0 +upgrade: + configMigrations: + dbHost: db.host + dbPort: db.port + dbName: db.name +defaultConfig: + db: + host: "{{ .apps.pg.host }}" + port: "5432" + name: myapp +``` + +The system renames the keys in the instance's `config.yaml` before recompiling templates with the new version. ### Dependency Configuration @@ -666,9 +911,16 @@ labels: Before submitting a new or modified app, verify: -- [ ] **Manifest** +- [ ] **App Meta (`app.yaml`)** - [ ] `name` matches directory name - - [ ] All required fields present (`name`, `description`, `version`, `defaultConfig`) + - [ ] `latest` points to a valid version in `versions/` + - [ ] `description` present + - [ ] `upgrade` rules correct (if applicable) + +- [ ] **Version Manifest (`versions/{slot}/manifest.yaml`)** + - [ ] `version` field present with full version string (e.g., `1.135.3-1`) + - [ ] Slot directory follows naming convention (major version, e.g., `1`, `v1`) + - [ ] All required fields present (`version`, `defaultConfig`) - [ ] All template variables defined in `defaultConfig` - [ ] `defaultSecrets` uses maps with 'key' and 'default' attributes - [ ] `requiredSecrets` references use `.` format diff --git a/admin/docs/design.md b/admin/docs/design.md new file mode 100644 index 0000000..aab726f --- /dev/null +++ b/admin/docs/design.md @@ -0,0 +1,692 @@ +# Wild Directory Versioning and Upgrade System + +Design specification for how Wild Cloud packages its third-party applications, +tracks versions, and manages upgrades between versions. + +## Problem + +Wild Cloud packages third-party applications as Kustomize templates. Each +application needs: + +1. **Identity** that doesn't change between versions (name, description, icon) +2. **Version-specific files** (k8s manifests, config schema, secrets schema) +3. **Upgrade routing** when breaking changes prevent direct version jumps +4. A clear, low-friction workflow for maintainers bumping versions + +The system must handle both simple apps (any version replaces any other) and +complex apps (database migrations, mandatory stepping stones between major +versions). + +## Design + +### Two-level structure: `app.yaml` + `versions/` + +Each app in the Wild Directory has a root-level `app.yaml` for identity and a +`versions/` directory containing one or more version slots: + +``` +ghost/ ++-- app.yaml ++-- versions/ + +-- 5/ + +-- manifest.yaml + +-- kustomization.yaml + +-- deployment.yaml + +-- ... +``` + +**`app.yaml`** holds version-independent fields: name, description, icon, +category, the `latest` pointer, and upgrade routing rules. These are facts +about the app itself, not about any particular release. + +**`versions/{slot}/manifest.yaml`** holds version-specific fields: the precise +version string, dependency declarations, default config, default secrets, +deploy configuration, and per-version migration jobs. These are facts about a +particular release. + +When the API installs an app, it reads both files and merges them. The +installed manifest in the instance data directory contains the complete picture +(name, description, icon, version, config, etc.). + +### Version slots vs version strings + +A version directory is a **slot**, not a precise version identifier. + +The directory name is a stable label chosen by the maintainer. The actual +version string lives in `manifest.yaml` inside the directory. These are +intentionally decoupled: + +| Concept | Where it lives | Example | +|---------|---------------|---------| +| Slot name | Directory name under `versions/` | `5` | +| Actual version | `version` field in `manifest.yaml` | `5.118.1-2` | +| Latest pointer | `latest` field in `app.yaml` | `5` | +| Waypoint pointer | `via` field in upgrade rules | `2` | + +The slot name should be the simplest stable identifier that distinguishes it +from other slots. For semver apps, use the major version (`1`, `2`, `3`). For +apps with non-semver schemes, use whatever upstream version boundary makes +sense (`5`, `v4`, etc.). + +**Packaging revisions** (`-1`, `-2`, etc.) never appear in directory names. +They only appear in `manifest.yaml`'s `version` field. A packaging revision +is a Wild Cloud-side fix (template improvement, security context change, config +restructure) that doesn't change the upstream software. + +**Minor and patch versions** also don't require new directories unless they +introduce a breaking change that requires a waypoint. Updating Ghost from +5.118.1 to 5.119.0 means editing files inside `versions/5/` and bumping the +`version` field. The directory stays the same. + +This follows how established package systems work: + +| System | Directory/file identity | Where version lives | +|--------|------------------------|-------------------| +| Debian source packages | Package name (stable) | `debian/changelog` | +| Helm charts | Chart name directory | `Chart.yaml` | +| Homebrew | Formula file per package | Version attribute in file | +| Nix packages | Package name directory | Derivation attribute | +| FreeBSD ports | Port name directory | `Makefile` variable | +| **Wild Cloud** | **Slot directory** | **`manifest.yaml`** | + +Wild Directory is a source package collection (templates compiled at install +time), not an artifact repository (pre-built binaries stored per version). The +source package pattern is the right fit. + +### When directories are created and destroyed + +**Most apps have exactly one version directory.** This is the common case for +apps where any version can replace any other (Ghost, Redis, most stateless +services). + +**A second directory appears only when a waypoint is needed** -- when a +breaking change means some installed versions can't jump directly to the +latest and must pass through an intermediate version first. + +**A directory is removed when it's no longer needed as a waypoint.** If +version `2/` was a waypoint for upgrading from 1.x to 3.x, but you later +decide to drop support for 1.x entirely, you can remove `2/` and update the +routing rules to block `<2.0.0`. + +### `app.yaml` specification + +```yaml +# Required +name: ghost # Must match directory name +is: ghost # Unique type id, used for `requires` matching +description: "Ghost is a..." # Shown in app listings +latest: "5" # Slot name pointing to a directory in versions/ + +# Optional +icon: "https://..." # URL to app icon +category: infrastructure # Category for filtering + +# Optional -- only needed for apps with breaking upgrade paths +upgrade: + from: + - version: ">=3.0.0" # Constraint against installed version + - version: ">=2.0.0" + via: "2" # Slot name of waypoint directory + - version: "<2.0.0" + blocked: true + notes: "Upgrade to 2.x first" + preUpgrade: + backup: recommended # "none", "recommended", or "required" +``` + +Fields: + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| `name` | string | yes | App identifier, must match directory name | +| `is` | string | yes | Type id for dependency matching | +| `description` | string | yes | Human-readable description | +| `latest` | string | yes | Slot name -- directory name under `versions/` | +| `icon` | string | no | URL to icon image | +| `category` | string | no | Grouping category (e.g. `infrastructure`) | +| `upgrade` | object | no | Routing rules for version upgrades | +| `upgrade.from` | list | no | Ordered list of version constraint rules | +| `upgrade.from[].version` | string | yes | Version constraint: `>=`, `>`, `<=`, `<`, `=`, or `>0` | +| `upgrade.from[].via` | string | no | Slot name of waypoint to pass through | +| `upgrade.from[].blocked` | bool | no | If true, upgrade is blocked | +| `upgrade.from[].notes` | string | no | Human-readable message | +| `upgrade.preUpgrade` | object | no | Pre-upgrade requirements | +| `upgrade.preUpgrade.backup` | string | no | `"none"`, `"recommended"`, or `"required"` | + +**`latest` is a slot name, not a version string.** It tells the API which +directory to look in. The actual version is read from the manifest inside that +directory. + +**`via` is also a slot name.** It tells the upgrade planner which waypoint +directory to route through. + +### Version `manifest.yaml` specification + +```yaml +# Required +version: 5.118.1-2 + +# Optional +requires: + - name: pg + alias: db + - name: redis +defaultConfig: + namespace: ghost + domain: ghost.{{ .cloud.domain }} + # ... +defaultSecrets: + - key: password + - key: dbUrl + default: "postgresql://..." +requiredSecrets: + - db.password +deploy: + # ... +scripts: + # ... + +# Optional -- only when this version has step-specific upgrade behavior +upgrade: + migrations: + pre: + - migrations/pre-deploy.yaml + post: + - migrations/post-deploy.yaml + configMigrations: + oldKey: new.key +``` + +Fields: + +| Field | Type | Required | Description | +|-------|------|----------|-------------| +| `version` | string | yes | Precise version string (e.g. `5.118.1-2`) | +| `requires` | list | no | Dependencies with optional aliases | +| `defaultConfig` | map | yes | Configuration schema merged into instance config | +| `defaultSecrets` | list | no | App's own secrets | +| `requiredSecrets` | list | no | Secrets needed from dependencies | +| `deploy` | object | no | Deployment behavior (CRDs, phases, etc.) | +| `scripts` | list | no | Operational scripts | +| `upgrade.migrations.pre` | list | no | K8s Job YAMLs to run before deploying this version | +| `upgrade.migrations.post` | list | no | K8s Job YAMLs to run after deploying this version | +| `upgrade.configMigrations` | map | no | Old config key -> new config key renames | + +**Note the field split:** Identity and routing live in `app.yaml`. Installation +details live here. The version manifest never contains `name`, `is`, +`description`, `icon`, `category`, or `upgrade.from` routing rules. + +### Versioning convention + +Wild Cloud uses a two-part version scheme: `-`. + +- **Upstream** tracks the third-party software version: `5.118.1`, `v4.0.18`, + `1.135.3` +- **Revision** tracks Wild Cloud packaging changes: `-1`, `-2`, etc. + +A version without a revision suffix (e.g., `5.118.1`) is the initial +packaging. Revision `-1` is the first packaging fix that doesn't change +upstream software. + +This is the same convention Debian uses for its source packages. + +## Upgrade system + +### The 90% case: no routing rules needed + +Most apps can upgrade from any version to any other directly. The app has no +`upgrade` block in `app.yaml`. When the API detects a version mismatch between +installed and latest, it produces a single-step plan: install the latest +version over the current one. + +### The 10% case: routing rules in `app.yaml` + +Apps with breaking changes between versions need routing rules. These live in +`app.yaml`, centralized for all versions. The rules are evaluated iteratively: + +1. Compare installed version against `upgrade.from` rules (first match wins) +2. If the matching rule has `via`, step to that waypoint +3. Re-evaluate the same rules with the waypoint's version as the new + "installed" version +4. Repeat until reaching latest or hitting a block + +This is iterative re-evaluation, not recursive descent into waypoint +manifests. The routing logic lives in one place (`app.yaml`), not scattered +across version manifests. + +### Rule evaluation + +Rules are evaluated in order. First match wins. This means more-specific +rules must come before less-specific ones: + +```yaml +upgrade: + from: + - version: ">=3.0.0" # Already past the breaking change, direct + - version: ">=2.0.0" + via: "2" # Must step through 2.x waypoint first + - version: "<2.0.0" + blocked: true # Too old, no supported path +``` + +An installed version of `2.5.0` matches `>=2.0.0`, steps to waypoint `2/` +(which contains, say, version `2.8.0`). Re-evaluation with `2.8.0` matches +`>=2.0.0` again... but this time the waypoint IS the current version, so the +visited-set check catches the cycle. + +To avoid this, ensure a rule exists that matches post-waypoint versions +and routes them directly: + +```yaml +upgrade: + from: + - version: ">=2.5.0" # Post-waypoint versions go direct + - version: ">=2.0.0" + via: "2" # Pre-waypoint versions step through + - version: "<2.0.0" + blocked: true +``` + +After stepping to waypoint `2/` (version `2.8.0`), re-evaluation matches +`>=2.5.0` (no `via`), which means direct upgrade to latest. + +### Version constraints + +Supported operators: `>=`, `>`, `<=`, `<`, `=`, and the special `>0` (matches +any version). Constraints compare major.minor.patch numerically. The packaging +revision is ignored in constraint matching so `>=5.118.0` matches `5.118.1-2`. + +### Waypoints + +A waypoint is a version slot that exists solely as a stepping stone in an +upgrade path. It contains a complete app package (manifest, kustomize, k8s +resources) that can be installed and run. + +Waypoints are created when an upstream app has breaking changes that require +sequential upgrades. For example, Discourse requires stepping through each +major version. A database schema migration might require running version N +before jumping to version N+2. + +Waypoint directories are referenced by slot name in `via` fields: + +```yaml +# app.yaml +latest: "3" +upgrade: + from: + - version: ">=2.5.0" + - version: ">=2.0.0" + via: "2" +``` + +``` +myapp/ ++-- app.yaml ++-- versions/ + +-- 3/ # Latest (version: 3.0.0) + +-- 2/ # Waypoint (version: 2.8.0) +``` + +### Per-version migrations + +Migration jobs (database schema changes, data transformations) are version- +specific, not app-level. They live in the version's directory and are +referenced from that version's `manifest.yaml`: + +```yaml +# versions/3/manifest.yaml +version: 3.0.0 +upgrade: + migrations: + pre: + - migrations/pre-deploy.yaml + post: + - migrations/post-deploy.yaml +``` + +``` +versions/3/ ++-- manifest.yaml ++-- migrations/ +| +-- pre-deploy.yaml # K8s Job: runs before deploying 3.0.0 +| +-- post-deploy.yaml # K8s Job: runs after deploying 3.0.0 ++-- kustomization.yaml ++-- deployment.yaml ++-- ... +``` + +Migration jobs must be idempotent (safe to re-run on retry). Use +`CREATE IF NOT EXISTS`, `ALTER TABLE IF NOT EXISTS`, etc. + +**Pre-migrations** run before deploying the new version's manifests. Use for +schema changes the new code depends on. + +**Post-migrations** run after deploying. Use for data backfills or cleanup +the old code didn't need. + +### Config migrations + +When a version renames config keys, `configMigrations` in the version manifest +tells the system to rename them automatically in the instance's `config.yaml` +before recompiling templates: + +```yaml +# versions/2/manifest.yaml +version: 2.0.0 +upgrade: + configMigrations: + dbHost: db.host + dbPort: db.port +``` + +## API path resolution + +The API resolves app paths through `resolveAppDir()`: + +1. Read `app.yaml` from the app root +2. Use `latest` (or a specific requested slot) to find `versions/{slot}/` +3. Verify `manifest.yaml` exists in that directory +4. Return the directory path and parsed `AppMeta` + +For old-style apps (no `app.yaml`, `manifest.yaml` at root), the function +falls back to the legacy path. This provides backward compatibility during +migration. + +When installing, `applyMeta()` merges identity fields from `app.yaml` onto +the version manifest: + +``` +app.yaml + versions/5/manifest.yaml = installed manifest.yaml +(name, is, desc, (version, requires, (complete picture) + icon, category) defaultConfig, ...) +``` + +The installed manifest in the instance data directory always contains all +fields because the instance needs the complete picture -- it doesn't have +access to the Wild Directory's `app.yaml` at runtime. + +## Drift detection + +The API detects when an installed app's version differs from the Wild +Directory's latest. For new-style apps: + +1. Read `app.yaml` to get the `latest` slot name +2. Read `versions/{latest}/manifest.yaml` to get the actual version string +3. Compare against the installed manifest's version + +If they differ, the app is marked as having source drift with the available +version noted. The upgrade planner then computes whether an upgrade path +exists and how many steps it requires. + +## Maintainer workflows + +### Simple version bump + +The app upstream releases a new version with no breaking changes. Edit files +in-place: + +```bash +# 1. Update files inside the existing slot +vi wild-directory/ghost/versions/5/manifest.yaml # bump version: 5.119.0 +vi wild-directory/ghost/versions/5/deployment.yaml # update image tag + +# 2. app.yaml doesn't change -- latest still points to "5" + +# 3. Test +wild app add ghost && wild app deploy ghost +``` + +No directory created, renamed, or deleted. No `app.yaml` change. + +### Packaging fix + +A Wild Cloud template fix, no upstream change: + +```bash +# 1. Bump packaging revision in manifest +vi wild-directory/ghost/versions/5/manifest.yaml # version: 5.118.1-3 + +# 2. Fix whatever needs fixing +vi wild-directory/ghost/versions/5/deployment.yaml + +# 3. app.yaml doesn't change +``` + +### Breaking upstream version (new waypoint) + +The app upstream releases a major version with schema changes: + +```bash +# 1. Current slot becomes a waypoint -- leave it in place +# versions/2/ stays, containing version 2.8.0 + +# 2. Create the new slot +mkdir -p wild-directory/myapp/versions/3 +# ... add manifest.yaml, kustomization.yaml, *.yaml for 3.0.0 ... + +# 3. Update app.yaml +``` + +```yaml +# app.yaml +name: myapp +latest: "3" +upgrade: + from: + - version: ">=2.5.0" # Post-waypoint, direct + - version: ">=2.0.0" + via: "2" # Step through waypoint + - version: "<2.0.0" + blocked: true +``` + +### Adding a new app + +```bash +mkdir -p wild-directory/newapp/versions/1 + +# Create app.yaml +cat > wild-directory/newapp/app.yaml <=1.0.0" +| via: "1" +| - version: "<1.0.0" +| blocked: true +| notes: "Versions before 1.0.0 are not supported" +| preUpgrade: +| backup: recommended ++-- versions/ + +-- 2/ + | +-- manifest.yaml # version: 2.0.0 + | +-- kustomization.yaml + | +-- ... + +-- 1/ + +-- manifest.yaml # version: 1.0.0-1 + +-- kustomization.yaml + +-- ... +``` + +Upgrading from 0.5.0: blocked ("Versions before 1.0.0 are not supported"). +Upgrading from 1.2.0: two steps -- 1.2.0 -> 1.0.0-1 (waypoint) -> 2.0.0. + +### SMTP (infrastructure service, one slot) + +``` +smtp/ ++-- app.yaml +| name: smtp +| is: smtp +| description: SMTP relay service... +| category: infrastructure +| latest: "1" ++-- versions/ + +-- 1/ + +-- manifest.yaml # version: 1.0.0 +``` + +### Complex app with migrations + +``` +discourse/ ++-- app.yaml +| name: discourse +| is: discourse +| description: Discourse forum... +| latest: "3" +| upgrade: +| from: +| - version: ">=2.5.0" +| - version: ">=2.0.0" +| via: "2" +| - version: "<2.0.0" +| blocked: true +| notes: "See upstream migration guide" +| preUpgrade: +| backup: required ++-- versions/ + +-- 3/ + | +-- manifest.yaml # version: 3.6.0 + | +-- migrations/ + | | +-- pre-deploy.yaml + | +-- kustomization.yaml + | +-- ... + +-- 2/ + +-- manifest.yaml # version: 2.8.0 + +-- kustomization.yaml + +-- ... +``` + +## Implementation notes + +### Go types + +```go +// app.yaml +type AppMeta struct { + Name string `yaml:"name"` + Is string `yaml:"is,omitempty"` + Description string `yaml:"description"` + Icon string `yaml:"icon,omitempty"` + Category string `yaml:"category,omitempty"` + Latest string `yaml:"latest"` // slot name + Upgrade *UpgradeConfig `yaml:"upgrade,omitempty"` +} + +// version manifest.yaml (version-specific fields only) +type AppManifest struct { + Version string `yaml:"version"` // precise version string + Requires []AppDependency `yaml:"requires,omitempty"` + DefaultConfig map[string]interface{} `yaml:"defaultConfig,omitempty"` + DefaultSecrets []SecretDefinition `yaml:"defaultSecrets,omitempty"` + RequiredSecrets []string `yaml:"requiredSecrets,omitempty"` + Deploy *DeployConfig `yaml:"deploy,omitempty"` + Scripts []Script `yaml:"scripts,omitempty"` + Upgrade *UpgradeConfig `yaml:"upgrade,omitempty"` // migrations only + // Identity fields (Name, Is, Description, etc.) populated by applyMeta() +} +``` + +### Backward compatibility + +The API supports both new-style (`app.yaml` + `versions/`) and old-style +(`manifest.yaml` at root, `.versions/` for waypoints). `resolveAppDir()` +checks for `app.yaml` first and falls back to the old layout. +`ComputeUpgradePlan()` similarly checks for `app.yaml` before falling back +to recursive manifest-based routing. + +Old-style support exists for migration purposes. New apps should always use +the new-style layout. + +### Source URI in installed manifests + +The `source` field in installed manifests points to the app root +(`file:///wild-directory/ghost`), not the version directory. `Fetch()` and +`Update()` resolve through `resolveAppDir()` from the root, which reads +`app.yaml` to find the current latest slot. + +## Design rationale + +### Why decouple directory name from version string? + +Coupling them creates unnecessary churn. Every packaging fix requires creating +a new directory and deleting the old one (`5.118.1/` -> `5.118.1-1/`). Every +minor upstream release does the same. This churn has no benefit -- the files +inside are what matter, not the directory name. + +Decoupling follows the source package pattern used by every major package +system. The directory is a stable container. The version is metadata inside it. + +### Why centralize routing rules in `app.yaml`? + +Scattering `upgrade.from` rules across version manifests means each waypoint +must know how to route TO itself. Adding a new waypoint requires editing +multiple manifests. Reading the upgrade path requires opening every version +manifest in the chain. + +Centralizing in `app.yaml` means one file describes the complete routing +topology. The upgrade planner reads one file and iteratively applies rules. +Adding a new waypoint means editing one file. + +### Why iterative re-evaluation instead of recursive descent? + +Recursive descent reads the target manifest, finds a `via`, recurses into the +waypoint, which has its own `via`, and so on. This scatters routing logic +across files and makes the path hard to reason about. + +Iterative re-evaluation reads `app.yaml` once, applies rules, steps to a +waypoint, then applies the SAME rules again with the new version. The routing +table is evaluated like firewall rules -- same table, different input. This +is simpler to implement, debug, and maintain. + +### Why not use a flat file for all versions? + +A single YAML file listing all versions and their configs would centralize +everything but would grow unwieldy for apps with many k8s resource files. +Each version slot needs its own `kustomization.yaml`, deployment specs, +service definitions, etc. Directories are the natural unit. diff --git a/cert-manager/app.yaml b/cert-manager/app.yaml new file mode 100644 index 0000000..73c353a --- /dev/null +++ b/cert-manager/app.yaml @@ -0,0 +1,5 @@ +name: cert-manager +is: cert-manager +description: X.509 certificate management for Kubernetes +category: infrastructure +latest: "v1" diff --git a/cert-manager/README.md b/cert-manager/versions/v1/README.md similarity index 100% rename from cert-manager/README.md rename to cert-manager/versions/v1/README.md diff --git a/cert-manager/internal-wildcard-certificate.yaml b/cert-manager/versions/v1/internal-wildcard-certificate.yaml similarity index 100% rename from cert-manager/internal-wildcard-certificate.yaml rename to cert-manager/versions/v1/internal-wildcard-certificate.yaml diff --git a/cert-manager/kustomization.yaml b/cert-manager/versions/v1/kustomization.yaml similarity index 100% rename from cert-manager/kustomization.yaml rename to cert-manager/versions/v1/kustomization.yaml diff --git a/cert-manager/letsencrypt-prod-dns01.yaml b/cert-manager/versions/v1/letsencrypt-prod-dns01.yaml similarity index 100% rename from cert-manager/letsencrypt-prod-dns01.yaml rename to cert-manager/versions/v1/letsencrypt-prod-dns01.yaml diff --git a/cert-manager/letsencrypt-staging-dns01.yaml b/cert-manager/versions/v1/letsencrypt-staging-dns01.yaml similarity index 100% rename from cert-manager/letsencrypt-staging-dns01.yaml rename to cert-manager/versions/v1/letsencrypt-staging-dns01.yaml diff --git a/cert-manager/manifest.yaml b/cert-manager/versions/v1/manifest.yaml similarity index 85% rename from cert-manager/manifest.yaml rename to cert-manager/versions/v1/manifest.yaml index 9a19ffe..e742a8e 100644 --- a/cert-manager/manifest.yaml +++ b/cert-manager/versions/v1/manifest.yaml @@ -1,8 +1,4 @@ -name: cert-manager -is: cert-manager -description: X.509 certificate management for Kubernetes version: v1.17.2 -category: infrastructure requires: - name: traefik defaultConfig: diff --git a/cert-manager/namespace.yaml b/cert-manager/versions/v1/namespace.yaml similarity index 100% rename from cert-manager/namespace.yaml rename to cert-manager/versions/v1/namespace.yaml diff --git a/cert-manager/scripts/repair-certificates.sh b/cert-manager/versions/v1/scripts/repair-certificates.sh similarity index 100% rename from cert-manager/scripts/repair-certificates.sh rename to cert-manager/versions/v1/scripts/repair-certificates.sh diff --git a/cert-manager/upstream/cert-manager.yaml b/cert-manager/versions/v1/upstream/cert-manager.yaml similarity index 100% rename from cert-manager/upstream/cert-manager.yaml rename to cert-manager/versions/v1/upstream/cert-manager.yaml diff --git a/cert-manager/upstream/kustomization.yaml b/cert-manager/versions/v1/upstream/kustomization.yaml similarity index 100% rename from cert-manager/upstream/kustomization.yaml rename to cert-manager/versions/v1/upstream/kustomization.yaml diff --git a/cert-manager/wildcard-certificate.yaml b/cert-manager/versions/v1/wildcard-certificate.yaml similarity index 100% rename from cert-manager/wildcard-certificate.yaml rename to cert-manager/versions/v1/wildcard-certificate.yaml diff --git a/coredns/app.yaml b/coredns/app.yaml new file mode 100644 index 0000000..edb989a --- /dev/null +++ b/coredns/app.yaml @@ -0,0 +1,5 @@ +name: coredns +is: coredns +description: DNS server for internal cluster DNS resolution +category: infrastructure +latest: "v1" diff --git a/coredns/README.md b/coredns/versions/v1/README.md similarity index 100% rename from coredns/README.md rename to coredns/versions/v1/README.md diff --git a/coredns/coredns-custom-config.yaml b/coredns/versions/v1/coredns-custom-config.yaml similarity index 100% rename from coredns/coredns-custom-config.yaml rename to coredns/versions/v1/coredns-custom-config.yaml diff --git a/coredns/kustomization.yaml b/coredns/versions/v1/kustomization.yaml similarity index 100% rename from coredns/kustomization.yaml rename to coredns/versions/v1/kustomization.yaml diff --git a/coredns/manifest.yaml b/coredns/versions/v1/manifest.yaml similarity index 72% rename from coredns/manifest.yaml rename to coredns/versions/v1/manifest.yaml index 12763c0..38a4b20 100644 --- a/coredns/manifest.yaml +++ b/coredns/versions/v1/manifest.yaml @@ -1,8 +1,4 @@ -name: coredns -is: coredns -description: DNS server for internal cluster DNS resolution version: v1.12.0 -category: infrastructure requires: - name: metallb defaultConfig: diff --git a/crowdsec/app.yaml b/crowdsec/app.yaml new file mode 100644 index 0000000..16bc8c1 --- /dev/null +++ b/crowdsec/app.yaml @@ -0,0 +1,5 @@ +name: crowdsec +is: crowdsec +description: CrowdSec security engine with Traefik bouncer for threat detection and rate limiting +category: infrastructure +latest: "v1" diff --git a/crowdsec/README.md b/crowdsec/versions/v1/README.md similarity index 100% rename from crowdsec/README.md rename to crowdsec/versions/v1/README.md diff --git a/crowdsec/configmap.yaml b/crowdsec/versions/v1/configmap.yaml similarity index 100% rename from crowdsec/configmap.yaml rename to crowdsec/versions/v1/configmap.yaml diff --git a/crowdsec/crowdsec-deployment.yaml b/crowdsec/versions/v1/crowdsec-deployment.yaml similarity index 100% rename from crowdsec/crowdsec-deployment.yaml rename to crowdsec/versions/v1/crowdsec-deployment.yaml diff --git a/crowdsec/crowdsec-service.yaml b/crowdsec/versions/v1/crowdsec-service.yaml similarity index 100% rename from crowdsec/crowdsec-service.yaml rename to crowdsec/versions/v1/crowdsec-service.yaml diff --git a/crowdsec/kustomization.yaml b/crowdsec/versions/v1/kustomization.yaml similarity index 100% rename from crowdsec/kustomization.yaml rename to crowdsec/versions/v1/kustomization.yaml diff --git a/crowdsec/manifest.yaml b/crowdsec/versions/v1/manifest.yaml similarity index 78% rename from crowdsec/manifest.yaml rename to crowdsec/versions/v1/manifest.yaml index 78f2630..a8da70b 100644 --- a/crowdsec/manifest.yaml +++ b/crowdsec/versions/v1/manifest.yaml @@ -1,8 +1,4 @@ -name: crowdsec -is: crowdsec -description: CrowdSec security engine with Traefik bouncer for threat detection and rate limiting version: v1.7.8 -category: infrastructure requires: - name: longhorn - name: traefik diff --git a/crowdsec/middleware.yaml b/crowdsec/versions/v1/middleware.yaml similarity index 100% rename from crowdsec/middleware.yaml rename to crowdsec/versions/v1/middleware.yaml diff --git a/crowdsec/namespace.yaml b/crowdsec/versions/v1/namespace.yaml similarity index 100% rename from crowdsec/namespace.yaml rename to crowdsec/versions/v1/namespace.yaml diff --git a/crowdsec/pvc.yaml b/crowdsec/versions/v1/pvc.yaml similarity index 100% rename from crowdsec/pvc.yaml rename to crowdsec/versions/v1/pvc.yaml diff --git a/crowdsec/serviceaccount.yaml b/crowdsec/versions/v1/serviceaccount.yaml similarity index 100% rename from crowdsec/serviceaccount.yaml rename to crowdsec/versions/v1/serviceaccount.yaml diff --git a/decidim/app.yaml b/decidim/app.yaml new file mode 100644 index 0000000..ebb7142 --- /dev/null +++ b/decidim/app.yaml @@ -0,0 +1,5 @@ +name: decidim +is: decidim +description: Decidim is a participatory democracy framework for cities and organizations. Built in Ruby on Rails, it enables citizen participation through proposals, debates, and voting. Includes Sidekiq for background job processing. +icon: https://raw.githubusercontent.com/decidim/decidim/develop/logo.svg +latest: "0" diff --git a/decidim/Dockerfile b/decidim/versions/0/Dockerfile similarity index 100% rename from decidim/Dockerfile rename to decidim/versions/0/Dockerfile diff --git a/decidim/README.md b/decidim/versions/0/README.md similarity index 100% rename from decidim/README.md rename to decidim/versions/0/README.md diff --git a/decidim/db-init-job.yaml b/decidim/versions/0/db-init-job.yaml similarity index 100% rename from decidim/db-init-job.yaml rename to decidim/versions/0/db-init-job.yaml diff --git a/decidim/deployment.yaml b/decidim/versions/0/deployment.yaml similarity index 100% rename from decidim/deployment.yaml rename to decidim/versions/0/deployment.yaml diff --git a/decidim/ingress.yaml b/decidim/versions/0/ingress.yaml similarity index 100% rename from decidim/ingress.yaml rename to decidim/versions/0/ingress.yaml diff --git a/decidim/kustomization.yaml b/decidim/versions/0/kustomization.yaml similarity index 100% rename from decidim/kustomization.yaml rename to decidim/versions/0/kustomization.yaml diff --git a/decidim/manifest.yaml b/decidim/versions/0/manifest.yaml similarity index 77% rename from decidim/manifest.yaml rename to decidim/versions/0/manifest.yaml index 2f3d530..3a64d74 100644 --- a/decidim/manifest.yaml +++ b/decidim/versions/0/manifest.yaml @@ -1,8 +1,4 @@ -name: decidim -is: decidim -description: Decidim is a participatory democracy framework for cities and organizations. Built in Ruby on Rails, it enables citizen participation through proposals, debates, and voting. Includes Sidekiq for background job processing. version: 0.31.0-1 -icon: https://raw.githubusercontent.com/decidim/decidim/develop/logo.svg requires: - name: postgres installed_as: postgres diff --git a/decidim/namespace.yaml b/decidim/versions/0/namespace.yaml similarity index 100% rename from decidim/namespace.yaml rename to decidim/versions/0/namespace.yaml diff --git a/decidim/pvc.yaml b/decidim/versions/0/pvc.yaml similarity index 100% rename from decidim/pvc.yaml rename to decidim/versions/0/pvc.yaml diff --git a/decidim/service.yaml b/decidim/versions/0/service.yaml similarity index 100% rename from decidim/service.yaml rename to decidim/versions/0/service.yaml diff --git a/decidim/serviceaccount.yaml b/decidim/versions/0/serviceaccount.yaml similarity index 100% rename from decidim/serviceaccount.yaml rename to decidim/versions/0/serviceaccount.yaml diff --git a/discourse/app.yaml b/discourse/app.yaml new file mode 100644 index 0000000..84c2273 --- /dev/null +++ b/discourse/app.yaml @@ -0,0 +1,5 @@ +name: discourse +is: discourse +description: Discourse is a modern, open-source discussion platform designed for online communities and forums. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/discourse.svg +latest: "3" diff --git a/discourse/README.md b/discourse/versions/3/README.md similarity index 100% rename from discourse/README.md rename to discourse/versions/3/README.md diff --git a/discourse/db-init-job.yaml b/discourse/versions/3/db-init-job.yaml similarity index 100% rename from discourse/db-init-job.yaml rename to discourse/versions/3/db-init-job.yaml diff --git a/discourse/deployment.yaml b/discourse/versions/3/deployment.yaml similarity index 100% rename from discourse/deployment.yaml rename to discourse/versions/3/deployment.yaml diff --git a/discourse/ingress.yaml b/discourse/versions/3/ingress.yaml similarity index 100% rename from discourse/ingress.yaml rename to discourse/versions/3/ingress.yaml diff --git a/discourse/kustomization.yaml b/discourse/versions/3/kustomization.yaml similarity index 100% rename from discourse/kustomization.yaml rename to discourse/versions/3/kustomization.yaml diff --git a/discourse/manifest.yaml b/discourse/versions/3/manifest.yaml similarity index 81% rename from discourse/manifest.yaml rename to discourse/versions/3/manifest.yaml index 6de4d65..30312d4 100644 --- a/discourse/manifest.yaml +++ b/discourse/versions/3/manifest.yaml @@ -1,8 +1,4 @@ -name: discourse -is: discourse -description: Discourse is a modern, open-source discussion platform designed for online communities and forums. version: 3.5.3-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/discourse.svg requires: - name: postgres - name: redis @@ -41,4 +37,4 @@ defaultSecrets: default: "postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable" requiredSecrets: - postgres.password - - redis.password \ No newline at end of file + - redis.password diff --git a/discourse/namespace.yaml b/discourse/versions/3/namespace.yaml similarity index 100% rename from discourse/namespace.yaml rename to discourse/versions/3/namespace.yaml diff --git a/discourse/pvc.yaml b/discourse/versions/3/pvc.yaml similarity index 100% rename from discourse/pvc.yaml rename to discourse/versions/3/pvc.yaml diff --git a/discourse/service.yaml b/discourse/versions/3/service.yaml similarity index 100% rename from discourse/service.yaml rename to discourse/versions/3/service.yaml diff --git a/discourse/serviceaccount.yaml b/discourse/versions/3/serviceaccount.yaml similarity index 100% rename from discourse/serviceaccount.yaml rename to discourse/versions/3/serviceaccount.yaml diff --git a/docker-registry/app.yaml b/docker-registry/app.yaml new file mode 100644 index 0000000..98012c9 --- /dev/null +++ b/docker-registry/app.yaml @@ -0,0 +1,5 @@ +name: docker-registry +is: docker-registry +description: Private Docker image registry for cluster +category: infrastructure +latest: "3" diff --git a/docker-registry/deployment.yaml b/docker-registry/versions/3/deployment.yaml similarity index 100% rename from docker-registry/deployment.yaml rename to docker-registry/versions/3/deployment.yaml diff --git a/docker-registry/ingress.yaml b/docker-registry/versions/3/ingress.yaml similarity index 100% rename from docker-registry/ingress.yaml rename to docker-registry/versions/3/ingress.yaml diff --git a/docker-registry/kustomization.yaml b/docker-registry/versions/3/kustomization.yaml similarity index 100% rename from docker-registry/kustomization.yaml rename to docker-registry/versions/3/kustomization.yaml diff --git a/docker-registry/manifest.yaml b/docker-registry/versions/3/manifest.yaml similarity index 59% rename from docker-registry/manifest.yaml rename to docker-registry/versions/3/manifest.yaml index 1cc5460..75ce50e 100644 --- a/docker-registry/manifest.yaml +++ b/docker-registry/versions/3/manifest.yaml @@ -1,8 +1,4 @@ -name: docker-registry -is: docker-registry -description: Private Docker image registry for cluster version: "3.0.0" -category: infrastructure requires: - name: traefik - name: cert-manager diff --git a/docker-registry/namespace.yaml b/docker-registry/versions/3/namespace.yaml similarity index 100% rename from docker-registry/namespace.yaml rename to docker-registry/versions/3/namespace.yaml diff --git a/docker-registry/pvc.yaml b/docker-registry/versions/3/pvc.yaml similarity index 100% rename from docker-registry/pvc.yaml rename to docker-registry/versions/3/pvc.yaml diff --git a/docker-registry/service.yaml b/docker-registry/versions/3/service.yaml similarity index 100% rename from docker-registry/service.yaml rename to docker-registry/versions/3/service.yaml diff --git a/e2e-test-app/app.yaml b/e2e-test-app/app.yaml new file mode 100644 index 0000000..6ae82b0 --- /dev/null +++ b/e2e-test-app/app.yaml @@ -0,0 +1,13 @@ +name: e2e-test-app +is: e2e-test-app +description: End-to-end test application for automated integration testing. Includes PVC and PostgreSQL dependency to exercise all backup strategies. +latest: "2" +upgrade: + from: + - version: ">=1.0.0" + via: "1" + - version: "<1.0.0" + blocked: true + notes: "Versions before 1.0.0 are not supported for upgrade" + preUpgrade: + backup: recommended diff --git a/e2e-test-app/.versions/1.0.0-1/db-init-job.yaml b/e2e-test-app/versions/1/db-init-job.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/db-init-job.yaml rename to e2e-test-app/versions/1/db-init-job.yaml diff --git a/e2e-test-app/.versions/1.0.0-1/deployment.yaml b/e2e-test-app/versions/1/deployment.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/deployment.yaml rename to e2e-test-app/versions/1/deployment.yaml diff --git a/e2e-test-app/.versions/1.0.0-1/kustomization.yaml b/e2e-test-app/versions/1/kustomization.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/kustomization.yaml rename to e2e-test-app/versions/1/kustomization.yaml diff --git a/e2e-test-app/.versions/1.0.0-1/manifest.yaml b/e2e-test-app/versions/1/manifest.yaml similarity index 76% rename from e2e-test-app/.versions/1.0.0-1/manifest.yaml rename to e2e-test-app/versions/1/manifest.yaml index d2d29ab..febc579 100644 --- a/e2e-test-app/.versions/1.0.0-1/manifest.yaml +++ b/e2e-test-app/versions/1/manifest.yaml @@ -1,6 +1,3 @@ -name: e2e-test-app -is: e2e-test-app -description: End-to-end test application for automated integration testing. Includes PVC and PostgreSQL dependency to exercise all backup strategies. version: 1.0.0-1 requires: - name: postgres diff --git a/e2e-test-app/.versions/1.0.0-1/namespace.yaml b/e2e-test-app/versions/1/namespace.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/namespace.yaml rename to e2e-test-app/versions/1/namespace.yaml diff --git a/e2e-test-app/.versions/1.0.0-1/pvc.yaml b/e2e-test-app/versions/1/pvc.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/pvc.yaml rename to e2e-test-app/versions/1/pvc.yaml diff --git a/e2e-test-app/.versions/1.0.0-1/service.yaml b/e2e-test-app/versions/1/service.yaml similarity index 100% rename from e2e-test-app/.versions/1.0.0-1/service.yaml rename to e2e-test-app/versions/1/service.yaml diff --git a/e2e-test-app/db-init-job.yaml b/e2e-test-app/versions/2/db-init-job.yaml similarity index 100% rename from e2e-test-app/db-init-job.yaml rename to e2e-test-app/versions/2/db-init-job.yaml diff --git a/e2e-test-app/deployment.yaml b/e2e-test-app/versions/2/deployment.yaml similarity index 100% rename from e2e-test-app/deployment.yaml rename to e2e-test-app/versions/2/deployment.yaml diff --git a/e2e-test-app/kustomization.yaml b/e2e-test-app/versions/2/kustomization.yaml similarity index 100% rename from e2e-test-app/kustomization.yaml rename to e2e-test-app/versions/2/kustomization.yaml diff --git a/e2e-test-app/manifest.yaml b/e2e-test-app/versions/2/manifest.yaml similarity index 59% rename from e2e-test-app/manifest.yaml rename to e2e-test-app/versions/2/manifest.yaml index 1739fd9..135cbf9 100644 --- a/e2e-test-app/manifest.yaml +++ b/e2e-test-app/versions/2/manifest.yaml @@ -1,16 +1,4 @@ -name: e2e-test-app -is: e2e-test-app -description: End-to-end test application for automated integration testing. Includes PVC and PostgreSQL dependency to exercise all backup strategies. version: 2.0.0 -upgrade: - from: - - version: ">=1.0.0" - via: "1.0.0-1" - - version: "<1.0.0" - blocked: true - notes: "Versions before 1.0.0 are not supported for upgrade" - preUpgrade: - backup: recommended requires: - name: postgres defaultConfig: diff --git a/e2e-test-app/namespace.yaml b/e2e-test-app/versions/2/namespace.yaml similarity index 100% rename from e2e-test-app/namespace.yaml rename to e2e-test-app/versions/2/namespace.yaml diff --git a/e2e-test-app/pvc.yaml b/e2e-test-app/versions/2/pvc.yaml similarity index 100% rename from e2e-test-app/pvc.yaml rename to e2e-test-app/versions/2/pvc.yaml diff --git a/e2e-test-app/service.yaml b/e2e-test-app/versions/2/service.yaml similarity index 100% rename from e2e-test-app/service.yaml rename to e2e-test-app/versions/2/service.yaml diff --git a/example-admin/app.yaml b/example-admin/app.yaml new file mode 100644 index 0000000..0731204 --- /dev/null +++ b/example-admin/app.yaml @@ -0,0 +1,4 @@ +name: example-admin +is: example +description: An example application that is deployed with internal-only access. +latest: "1" diff --git a/example-admin/README.md b/example-admin/versions/1/README.md similarity index 100% rename from example-admin/README.md rename to example-admin/versions/1/README.md diff --git a/example-admin/deployment.yaml b/example-admin/versions/1/deployment.yaml similarity index 100% rename from example-admin/deployment.yaml rename to example-admin/versions/1/deployment.yaml diff --git a/example-admin/ingress.yaml b/example-admin/versions/1/ingress.yaml similarity index 100% rename from example-admin/ingress.yaml rename to example-admin/versions/1/ingress.yaml diff --git a/example-admin/kustomization.yaml b/example-admin/versions/1/kustomization.yaml similarity index 100% rename from example-admin/kustomization.yaml rename to example-admin/versions/1/kustomization.yaml diff --git a/example-admin/manifest.yaml b/example-admin/versions/1/manifest.yaml similarity index 60% rename from example-admin/manifest.yaml rename to example-admin/versions/1/manifest.yaml index ed7067f..21afd8b 100644 --- a/example-admin/manifest.yaml +++ b/example-admin/versions/1/manifest.yaml @@ -1,6 +1,3 @@ -name: example-admin -is: example -description: An example application that is deployed with internal-only access. version: 1.0.0 defaultConfig: namespace: example-admin diff --git a/example-admin/namespace.yaml b/example-admin/versions/1/namespace.yaml similarity index 100% rename from example-admin/namespace.yaml rename to example-admin/versions/1/namespace.yaml diff --git a/example-admin/service.yaml b/example-admin/versions/1/service.yaml similarity index 100% rename from example-admin/service.yaml rename to example-admin/versions/1/service.yaml diff --git a/example-app/app.yaml b/example-app/app.yaml new file mode 100644 index 0000000..fad6474 --- /dev/null +++ b/example-app/app.yaml @@ -0,0 +1,4 @@ +name: example-app +is: example +description: An example application that is deployed with public access. +latest: "1" diff --git a/example-app/README.md b/example-app/versions/1/README.md similarity index 100% rename from example-app/README.md rename to example-app/versions/1/README.md diff --git a/example-app/deployment.yaml b/example-app/versions/1/deployment.yaml similarity index 100% rename from example-app/deployment.yaml rename to example-app/versions/1/deployment.yaml diff --git a/example-app/ingress.yaml b/example-app/versions/1/ingress.yaml similarity index 100% rename from example-app/ingress.yaml rename to example-app/versions/1/ingress.yaml diff --git a/example-app/kustomization.yaml b/example-app/versions/1/kustomization.yaml similarity index 100% rename from example-app/kustomization.yaml rename to example-app/versions/1/kustomization.yaml diff --git a/example-app/manifest.yaml b/example-app/versions/1/manifest.yaml similarity index 63% rename from example-app/manifest.yaml rename to example-app/versions/1/manifest.yaml index f5d566a..d4daf73 100644 --- a/example-app/manifest.yaml +++ b/example-app/versions/1/manifest.yaml @@ -1,6 +1,3 @@ -name: example-app -is: example -description: An example application that is deployed with public access. version: 1.0.0 defaultConfig: namespace: example-app diff --git a/example-app/namespace.yaml b/example-app/versions/1/namespace.yaml similarity index 100% rename from example-app/namespace.yaml rename to example-app/versions/1/namespace.yaml diff --git a/example-app/service.yaml b/example-app/versions/1/service.yaml similarity index 100% rename from example-app/service.yaml rename to example-app/versions/1/service.yaml diff --git a/externaldns/app.yaml b/externaldns/app.yaml new file mode 100644 index 0000000..0d71b0e --- /dev/null +++ b/externaldns/app.yaml @@ -0,0 +1,5 @@ +name: externaldns +is: externaldns +description: Automatically configures DNS records for services +category: infrastructure +latest: "v0" diff --git a/externaldns/README.md b/externaldns/versions/v0/README.md similarity index 100% rename from externaldns/README.md rename to externaldns/versions/v0/README.md diff --git a/externaldns/externaldns-cloudflare.yaml b/externaldns/versions/v0/externaldns-cloudflare.yaml similarity index 100% rename from externaldns/externaldns-cloudflare.yaml rename to externaldns/versions/v0/externaldns-cloudflare.yaml diff --git a/externaldns/externaldns-rbac.yaml b/externaldns/versions/v0/externaldns-rbac.yaml similarity index 100% rename from externaldns/externaldns-rbac.yaml rename to externaldns/versions/v0/externaldns-rbac.yaml diff --git a/externaldns/kustomization.yaml b/externaldns/versions/v0/kustomization.yaml similarity index 100% rename from externaldns/kustomization.yaml rename to externaldns/versions/v0/kustomization.yaml diff --git a/externaldns/manifest.yaml b/externaldns/versions/v0/manifest.yaml similarity index 78% rename from externaldns/manifest.yaml rename to externaldns/versions/v0/manifest.yaml index 69dbe52..2f8687f 100644 --- a/externaldns/manifest.yaml +++ b/externaldns/versions/v0/manifest.yaml @@ -1,9 +1,5 @@ -name: externaldns -is: externaldns -description: Automatically configures DNS records for services version: v0.13.4 deploymentName: external-dns -category: infrastructure requires: - name: cert-manager defaultConfig: diff --git a/externaldns/namespace.yaml b/externaldns/versions/v0/namespace.yaml similarity index 100% rename from externaldns/namespace.yaml rename to externaldns/versions/v0/namespace.yaml diff --git a/ghost/app.yaml b/ghost/app.yaml new file mode 100644 index 0000000..6678249 --- /dev/null +++ b/ghost/app.yaml @@ -0,0 +1,5 @@ +name: ghost +is: ghost +description: Ghost is a powerful app for new-media creators to publish, share, and grow a business around their content. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ghost.png +latest: "5" diff --git a/ghost/README.md b/ghost/versions/5/README.md similarity index 100% rename from ghost/README.md rename to ghost/versions/5/README.md diff --git a/ghost/db-init-job.yaml b/ghost/versions/5/db-init-job.yaml similarity index 100% rename from ghost/db-init-job.yaml rename to ghost/versions/5/db-init-job.yaml diff --git a/ghost/deployment.yaml b/ghost/versions/5/deployment.yaml similarity index 100% rename from ghost/deployment.yaml rename to ghost/versions/5/deployment.yaml diff --git a/ghost/ingress.yaml b/ghost/versions/5/ingress.yaml similarity index 100% rename from ghost/ingress.yaml rename to ghost/versions/5/ingress.yaml diff --git a/ghost/kustomization.yaml b/ghost/versions/5/kustomization.yaml similarity index 100% rename from ghost/kustomization.yaml rename to ghost/versions/5/kustomization.yaml diff --git a/ghost/manifest.yaml b/ghost/versions/5/manifest.yaml similarity index 62% rename from ghost/manifest.yaml rename to ghost/versions/5/manifest.yaml index bf294bd..b2e23e4 100644 --- a/ghost/manifest.yaml +++ b/ghost/versions/5/manifest.yaml @@ -1,12 +1,7 @@ -name: ghost -is: ghost -description: Ghost is a powerful app for new-media creators to publish, share, and - grow a business around their content. version: 5.118.1-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/ghost.png requires: -- name: mysql -- name: smtp + - name: mysql + - name: smtp defaultConfig: namespace: ghost externalDnsDomain: '{{ .cloud.domain }}' @@ -27,8 +22,8 @@ defaultConfig: from: '{{ .apps.smtp.from }}' user: '{{ .apps.smtp.user }}' defaultSecrets: -- key: adminPassword -- key: dbPassword -- key: smtpPassword + - key: adminPassword + - key: dbPassword + - key: smtpPassword requiredSecrets: -- mysql.rootPassword + - mysql.rootPassword diff --git a/ghost/namespace.yaml b/ghost/versions/5/namespace.yaml similarity index 100% rename from ghost/namespace.yaml rename to ghost/versions/5/namespace.yaml diff --git a/ghost/pvc.yaml b/ghost/versions/5/pvc.yaml similarity index 100% rename from ghost/pvc.yaml rename to ghost/versions/5/pvc.yaml diff --git a/ghost/service.yaml b/ghost/versions/5/service.yaml similarity index 100% rename from ghost/service.yaml rename to ghost/versions/5/service.yaml diff --git a/gitea/app.yaml b/gitea/app.yaml new file mode 100644 index 0000000..b45275a --- /dev/null +++ b/gitea/app.yaml @@ -0,0 +1,5 @@ +name: gitea +is: gitea +description: Gitea is a painless self-hosted Git service written in Go +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg +latest: "1" diff --git a/gitea/README.md b/gitea/versions/1/README.md similarity index 100% rename from gitea/README.md rename to gitea/versions/1/README.md diff --git a/gitea/db-init-job.yaml b/gitea/versions/1/db-init-job.yaml similarity index 100% rename from gitea/db-init-job.yaml rename to gitea/versions/1/db-init-job.yaml diff --git a/gitea/deployment.yaml b/gitea/versions/1/deployment.yaml similarity index 100% rename from gitea/deployment.yaml rename to gitea/versions/1/deployment.yaml diff --git a/gitea/gitea.env b/gitea/versions/1/gitea.env similarity index 100% rename from gitea/gitea.env rename to gitea/versions/1/gitea.env diff --git a/gitea/ingress.yaml b/gitea/versions/1/ingress.yaml similarity index 100% rename from gitea/ingress.yaml rename to gitea/versions/1/ingress.yaml diff --git a/gitea/kustomization.yaml b/gitea/versions/1/kustomization.yaml similarity index 100% rename from gitea/kustomization.yaml rename to gitea/versions/1/kustomization.yaml diff --git a/gitea/manifest.yaml b/gitea/versions/1/manifest.yaml similarity index 64% rename from gitea/manifest.yaml rename to gitea/versions/1/manifest.yaml index c9fa7c5..454c46a 100644 --- a/gitea/manifest.yaml +++ b/gitea/versions/1/manifest.yaml @@ -1,11 +1,7 @@ -name: gitea -is: gitea -description: Gitea is a painless self-hosted Git service written in Go version: 1.24.3-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/gitea.svg requires: -- name: postgres -- name: smtp + - name: postgres + - name: smtp defaultConfig: namespace: gitea externalDnsDomain: '{{ .cloud.domain }}' @@ -26,10 +22,10 @@ defaultConfig: user: '{{ .apps.smtp.user }}' from: '{{ .apps.smtp.from }}' defaultSecrets: -- key: adminPassword -- key: dbPassword -- key: secretKey -- key: jwtSecret -- key: smtpPassword + - key: adminPassword + - key: dbPassword + - key: secretKey + - key: jwtSecret + - key: smtpPassword requiredSecrets: -- postgres.password + - postgres.password diff --git a/gitea/namespace.yaml b/gitea/versions/1/namespace.yaml similarity index 100% rename from gitea/namespace.yaml rename to gitea/versions/1/namespace.yaml diff --git a/gitea/pvc.yaml b/gitea/versions/1/pvc.yaml similarity index 100% rename from gitea/pvc.yaml rename to gitea/versions/1/pvc.yaml diff --git a/gitea/service.yaml b/gitea/versions/1/service.yaml similarity index 100% rename from gitea/service.yaml rename to gitea/versions/1/service.yaml diff --git a/headlamp/app.yaml b/headlamp/app.yaml new file mode 100644 index 0000000..11dc0a5 --- /dev/null +++ b/headlamp/app.yaml @@ -0,0 +1,5 @@ +name: headlamp +is: headlamp +description: Modern Kubernetes web UI (SIG UI) with in-cluster authentication +category: infrastructure +latest: "v0" diff --git a/headlamp/deployment.yaml b/headlamp/versions/v0/deployment.yaml similarity index 100% rename from headlamp/deployment.yaml rename to headlamp/versions/v0/deployment.yaml diff --git a/headlamp/ingress.yaml b/headlamp/versions/v0/ingress.yaml similarity index 100% rename from headlamp/ingress.yaml rename to headlamp/versions/v0/ingress.yaml diff --git a/headlamp/kubeconfig-cm.yaml b/headlamp/versions/v0/kubeconfig-cm.yaml similarity index 100% rename from headlamp/kubeconfig-cm.yaml rename to headlamp/versions/v0/kubeconfig-cm.yaml diff --git a/headlamp/kustomization.yaml b/headlamp/versions/v0/kustomization.yaml similarity index 100% rename from headlamp/kustomization.yaml rename to headlamp/versions/v0/kustomization.yaml diff --git a/headlamp/manifest.yaml b/headlamp/versions/v0/manifest.yaml similarity index 62% rename from headlamp/manifest.yaml rename to headlamp/versions/v0/manifest.yaml index 62bf95b..c43a3d4 100644 --- a/headlamp/manifest.yaml +++ b/headlamp/versions/v0/manifest.yaml @@ -1,8 +1,4 @@ -name: headlamp -is: headlamp -description: Modern Kubernetes web UI (SIG UI) with in-cluster authentication version: v0.42.0 -category: infrastructure requires: - name: traefik - name: cert-manager diff --git a/headlamp/namespace.yaml b/headlamp/versions/v0/namespace.yaml similarity index 100% rename from headlamp/namespace.yaml rename to headlamp/versions/v0/namespace.yaml diff --git a/headlamp/service-account.yaml b/headlamp/versions/v0/service-account.yaml similarity index 100% rename from headlamp/service-account.yaml rename to headlamp/versions/v0/service-account.yaml diff --git a/headlamp/service.yaml b/headlamp/versions/v0/service.yaml similarity index 100% rename from headlamp/service.yaml rename to headlamp/versions/v0/service.yaml diff --git a/immich/app.yaml b/immich/app.yaml new file mode 100644 index 0000000..6296b0d --- /dev/null +++ b/immich/app.yaml @@ -0,0 +1,5 @@ +name: immich +is: immich +description: Immich is a self-hosted photo and video backup solution that allows you to store, manage, and share your media files securely. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg +latest: "1" diff --git a/immich/README.md b/immich/versions/1/README.md similarity index 100% rename from immich/README.md rename to immich/versions/1/README.md diff --git a/immich/db-init-job.yaml b/immich/versions/1/db-init-job.yaml similarity index 100% rename from immich/db-init-job.yaml rename to immich/versions/1/db-init-job.yaml diff --git a/immich/deployment-machine-learning.yaml b/immich/versions/1/deployment-machine-learning.yaml similarity index 100% rename from immich/deployment-machine-learning.yaml rename to immich/versions/1/deployment-machine-learning.yaml diff --git a/immich/deployment-microservices.yaml b/immich/versions/1/deployment-microservices.yaml similarity index 100% rename from immich/deployment-microservices.yaml rename to immich/versions/1/deployment-microservices.yaml diff --git a/immich/deployment-server.yaml b/immich/versions/1/deployment-server.yaml similarity index 100% rename from immich/deployment-server.yaml rename to immich/versions/1/deployment-server.yaml diff --git a/immich/ingress.yaml b/immich/versions/1/ingress.yaml similarity index 100% rename from immich/ingress.yaml rename to immich/versions/1/ingress.yaml diff --git a/immich/kustomization.yaml b/immich/versions/1/kustomization.yaml similarity index 100% rename from immich/kustomization.yaml rename to immich/versions/1/kustomization.yaml diff --git a/immich/manifest.yaml b/immich/versions/1/manifest.yaml similarity index 53% rename from immich/manifest.yaml rename to immich/versions/1/manifest.yaml index 081ee8f..509db3b 100644 --- a/immich/manifest.yaml +++ b/immich/versions/1/manifest.yaml @@ -1,12 +1,7 @@ -name: immich -is: immich -description: Immich is a self-hosted photo and video backup solution that allows you - to store, manage, and share your media files securely. version: 1.135.3-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/immich.svg requires: -- name: redis -- name: postgres + - name: redis + - name: postgres defaultConfig: namespace: immich externalDnsDomain: '{{ .cloud.domain }}' @@ -21,7 +16,7 @@ defaultConfig: redis: host: '{{ .apps.redis.host }}' defaultSecrets: -- key: dbPassword + - key: dbPassword requiredSecrets: -- redis.password -- postgres.password + - redis.password + - postgres.password diff --git a/immich/namespace.yaml b/immich/versions/1/namespace.yaml similarity index 100% rename from immich/namespace.yaml rename to immich/versions/1/namespace.yaml diff --git a/immich/pvc.yaml b/immich/versions/1/pvc.yaml similarity index 100% rename from immich/pvc.yaml rename to immich/versions/1/pvc.yaml diff --git a/immich/service.yaml b/immich/versions/1/service.yaml similarity index 100% rename from immich/service.yaml rename to immich/versions/1/service.yaml diff --git a/keila/app.yaml b/keila/app.yaml new file mode 100644 index 0000000..bebc417 --- /dev/null +++ b/keila/app.yaml @@ -0,0 +1,5 @@ +name: keila +is: keila +description: Keila is an open-source email marketing platform that allows you to send newsletters and manage mailing lists with privacy and control. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/keila.svg +latest: "0" diff --git a/keila/README.md b/keila/versions/0/README.md similarity index 100% rename from keila/README.md rename to keila/versions/0/README.md diff --git a/keila/db-init-job.yaml b/keila/versions/0/db-init-job.yaml similarity index 100% rename from keila/db-init-job.yaml rename to keila/versions/0/db-init-job.yaml diff --git a/keila/deployment.yaml b/keila/versions/0/deployment.yaml similarity index 100% rename from keila/deployment.yaml rename to keila/versions/0/deployment.yaml diff --git a/keila/ingress.yaml b/keila/versions/0/ingress.yaml similarity index 100% rename from keila/ingress.yaml rename to keila/versions/0/ingress.yaml diff --git a/keila/kustomization.yaml b/keila/versions/0/kustomization.yaml similarity index 100% rename from keila/kustomization.yaml rename to keila/versions/0/kustomization.yaml diff --git a/keila/manifest.yaml b/keila/versions/0/manifest.yaml similarity index 78% rename from keila/manifest.yaml rename to keila/versions/0/manifest.yaml index 3125c44..2966c8b 100644 --- a/keila/manifest.yaml +++ b/keila/versions/0/manifest.yaml @@ -1,8 +1,4 @@ -name: keila -is: keila -description: Keila is an open-source email marketing platform that allows you to send newsletters and manage mailing lists with privacy and control. version: 0.17.1-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/keila.svg requires: - name: postgres - name: smtp @@ -35,4 +31,4 @@ defaultSecrets: - key: adminPassword - key: smtpPassword requiredSecrets: - - postgres.password \ No newline at end of file + - postgres.password diff --git a/keila/middleware-cors.yaml b/keila/versions/0/middleware-cors.yaml similarity index 100% rename from keila/middleware-cors.yaml rename to keila/versions/0/middleware-cors.yaml diff --git a/keila/namespace.yaml b/keila/versions/0/namespace.yaml similarity index 100% rename from keila/namespace.yaml rename to keila/versions/0/namespace.yaml diff --git a/keila/pvc.yaml b/keila/versions/0/pvc.yaml similarity index 100% rename from keila/pvc.yaml rename to keila/versions/0/pvc.yaml diff --git a/keila/service.yaml b/keila/versions/0/service.yaml similarity index 100% rename from keila/service.yaml rename to keila/versions/0/service.yaml diff --git a/lemmy/app.yaml b/lemmy/app.yaml new file mode 100644 index 0000000..33b00ab --- /dev/null +++ b/lemmy/app.yaml @@ -0,0 +1,5 @@ +name: lemmy +is: lemmy +description: Lemmy is a selfhosted social link aggregation and discussion platform. It is an open source alternative to Reddit, designed for the fediverse. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lemmy.svg +latest: "0" diff --git a/lemmy/README.md b/lemmy/versions/0/README.md similarity index 100% rename from lemmy/README.md rename to lemmy/versions/0/README.md diff --git a/lemmy/configmap.yaml b/lemmy/versions/0/configmap.yaml similarity index 100% rename from lemmy/configmap.yaml rename to lemmy/versions/0/configmap.yaml diff --git a/lemmy/db-init-job.yaml b/lemmy/versions/0/db-init-job.yaml similarity index 100% rename from lemmy/db-init-job.yaml rename to lemmy/versions/0/db-init-job.yaml diff --git a/lemmy/deployment-backend.yaml b/lemmy/versions/0/deployment-backend.yaml similarity index 100% rename from lemmy/deployment-backend.yaml rename to lemmy/versions/0/deployment-backend.yaml diff --git a/lemmy/deployment-pictrs.yaml b/lemmy/versions/0/deployment-pictrs.yaml similarity index 100% rename from lemmy/deployment-pictrs.yaml rename to lemmy/versions/0/deployment-pictrs.yaml diff --git a/lemmy/deployment-ui.yaml b/lemmy/versions/0/deployment-ui.yaml similarity index 100% rename from lemmy/deployment-ui.yaml rename to lemmy/versions/0/deployment-ui.yaml diff --git a/lemmy/ingress.yaml b/lemmy/versions/0/ingress.yaml similarity index 100% rename from lemmy/ingress.yaml rename to lemmy/versions/0/ingress.yaml diff --git a/lemmy/kustomization.yaml b/lemmy/versions/0/kustomization.yaml similarity index 100% rename from lemmy/kustomization.yaml rename to lemmy/versions/0/kustomization.yaml diff --git a/lemmy/manifest.yaml b/lemmy/versions/0/manifest.yaml similarity index 73% rename from lemmy/manifest.yaml rename to lemmy/versions/0/manifest.yaml index 7b5dce0..18450f2 100644 --- a/lemmy/manifest.yaml +++ b/lemmy/versions/0/manifest.yaml @@ -1,8 +1,4 @@ -name: lemmy -is: lemmy -description: Lemmy is a selfhosted social link aggregation and discussion platform. It is an open source alternative to Reddit, designed for the fediverse. version: 0.19.15-2 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/lemmy.svg requires: - name: postgres - name: smtp diff --git a/lemmy/namespace.yaml b/lemmy/versions/0/namespace.yaml similarity index 100% rename from lemmy/namespace.yaml rename to lemmy/versions/0/namespace.yaml diff --git a/lemmy/pvc-pictrs.yaml b/lemmy/versions/0/pvc-pictrs.yaml similarity index 100% rename from lemmy/pvc-pictrs.yaml rename to lemmy/versions/0/pvc-pictrs.yaml diff --git a/lemmy/service-backend.yaml b/lemmy/versions/0/service-backend.yaml similarity index 100% rename from lemmy/service-backend.yaml rename to lemmy/versions/0/service-backend.yaml diff --git a/lemmy/service-pictrs.yaml b/lemmy/versions/0/service-pictrs.yaml similarity index 100% rename from lemmy/service-pictrs.yaml rename to lemmy/versions/0/service-pictrs.yaml diff --git a/lemmy/service-ui.yaml b/lemmy/versions/0/service-ui.yaml similarity index 100% rename from lemmy/service-ui.yaml rename to lemmy/versions/0/service-ui.yaml diff --git a/listmonk/app.yaml b/listmonk/app.yaml new file mode 100644 index 0000000..2cdfd7f --- /dev/null +++ b/listmonk/app.yaml @@ -0,0 +1,5 @@ +name: listmonk +is: listmonk +description: Listmonk is a standalone, self-hosted, newsletter and mailing list manager. It is fast, feature-rich, and packed into a single binary. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/listmonk.svg +latest: "5" diff --git a/listmonk/manifest.yaml b/listmonk/manifest.yaml deleted file mode 100644 index 8c2ba1a..0000000 --- a/listmonk/manifest.yaml +++ /dev/null @@ -1,25 +0,0 @@ -name: listmonk -is: listmonk -description: Listmonk is a standalone, self-hosted, newsletter and mailing list manager. - It is fast, feature-rich, and packed into a single binary. -version: 5.0.3-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/listmonk.svg -requires: -- name: postgres -defaultConfig: - namespace: listmonk - externalDnsDomain: '{{ .cloud.domain }}' - domain: listmonk.{{ .cloud.domain }} - tlsSecretName: wildcard-wild-cloud-tls - storage: 1Gi - db: - host: '{{ .apps.postgres.host }}' - port: '{{ .apps.postgres.port }}' - name: listmonk - user: listmonk -defaultSecrets: -- key: dbPassword -- key: dbUrl - default: 'postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable' -requiredSecrets: -- postgres.password diff --git a/listmonk/README.md b/listmonk/versions/5/README.md similarity index 100% rename from listmonk/README.md rename to listmonk/versions/5/README.md diff --git a/listmonk/db-init-job.yaml b/listmonk/versions/5/db-init-job.yaml similarity index 100% rename from listmonk/db-init-job.yaml rename to listmonk/versions/5/db-init-job.yaml diff --git a/listmonk/deployment.yaml b/listmonk/versions/5/deployment.yaml similarity index 100% rename from listmonk/deployment.yaml rename to listmonk/versions/5/deployment.yaml diff --git a/listmonk/ingress.yaml b/listmonk/versions/5/ingress.yaml similarity index 100% rename from listmonk/ingress.yaml rename to listmonk/versions/5/ingress.yaml diff --git a/listmonk/kustomization.yaml b/listmonk/versions/5/kustomization.yaml similarity index 100% rename from listmonk/kustomization.yaml rename to listmonk/versions/5/kustomization.yaml diff --git a/listmonk/versions/5/manifest.yaml b/listmonk/versions/5/manifest.yaml new file mode 100644 index 0000000..67f58e5 --- /dev/null +++ b/listmonk/versions/5/manifest.yaml @@ -0,0 +1,20 @@ +version: 5.0.3-1 +requires: + - name: postgres +defaultConfig: + namespace: listmonk + externalDnsDomain: '{{ .cloud.domain }}' + domain: listmonk.{{ .cloud.domain }} + tlsSecretName: wildcard-wild-cloud-tls + storage: 1Gi + db: + host: '{{ .apps.postgres.host }}' + port: '{{ .apps.postgres.port }}' + name: listmonk + user: listmonk +defaultSecrets: + - key: dbPassword + - key: dbUrl + default: 'postgres://{{ .app.db.user }}:{{ .secrets.dbPassword }}@{{ .app.db.host }}:{{ .app.db.port }}/{{ .app.db.name }}?sslmode=disable' +requiredSecrets: + - postgres.password diff --git a/listmonk/namespace.yaml b/listmonk/versions/5/namespace.yaml similarity index 100% rename from listmonk/namespace.yaml rename to listmonk/versions/5/namespace.yaml diff --git a/listmonk/pvc.yaml b/listmonk/versions/5/pvc.yaml similarity index 100% rename from listmonk/pvc.yaml rename to listmonk/versions/5/pvc.yaml diff --git a/listmonk/service.yaml b/listmonk/versions/5/service.yaml similarity index 100% rename from listmonk/service.yaml rename to listmonk/versions/5/service.yaml diff --git a/longhorn/app.yaml b/longhorn/app.yaml new file mode 100644 index 0000000..509949f --- /dev/null +++ b/longhorn/app.yaml @@ -0,0 +1,5 @@ +name: longhorn +is: longhorn +description: Cloud-native distributed block storage for Kubernetes +category: infrastructure +latest: "v1" diff --git a/longhorn/README.md b/longhorn/versions/v1/README.md similarity index 100% rename from longhorn/README.md rename to longhorn/versions/v1/README.md diff --git a/longhorn/backup-target.yaml b/longhorn/versions/v1/backup-target.yaml similarity index 100% rename from longhorn/backup-target.yaml rename to longhorn/versions/v1/backup-target.yaml diff --git a/longhorn/ingress.yaml b/longhorn/versions/v1/ingress.yaml similarity index 100% rename from longhorn/ingress.yaml rename to longhorn/versions/v1/ingress.yaml diff --git a/longhorn/kustomization.yaml b/longhorn/versions/v1/kustomization.yaml similarity index 100% rename from longhorn/kustomization.yaml rename to longhorn/versions/v1/kustomization.yaml diff --git a/longhorn/longhorn.yaml b/longhorn/versions/v1/longhorn.yaml similarity index 100% rename from longhorn/longhorn.yaml rename to longhorn/versions/v1/longhorn.yaml diff --git a/longhorn/manifest.yaml b/longhorn/versions/v1/manifest.yaml similarity index 70% rename from longhorn/manifest.yaml rename to longhorn/versions/v1/manifest.yaml index bf711e8..8135b2c 100644 --- a/longhorn/manifest.yaml +++ b/longhorn/versions/v1/manifest.yaml @@ -1,9 +1,5 @@ -name: longhorn -is: longhorn -description: Cloud-native distributed block storage for Kubernetes version: v1.8.1-2 deploymentName: longhorn-ui -category: infrastructure requires: - name: traefik - name: nfs diff --git a/longhorn/volumesnapshotclass-longhorn.yaml b/longhorn/versions/v1/volumesnapshotclass-longhorn.yaml similarity index 100% rename from longhorn/volumesnapshotclass-longhorn.yaml rename to longhorn/versions/v1/volumesnapshotclass-longhorn.yaml diff --git a/loomio/app.yaml b/loomio/app.yaml new file mode 100644 index 0000000..f25e121 --- /dev/null +++ b/loomio/app.yaml @@ -0,0 +1,5 @@ +name: loomio +is: loomio +description: Loomio is a collaborative decision-making tool that makes it easy for groups to make decisions together +icon: https://www.loomio.com/brand/logo_gold.svg +latest: "3" diff --git a/loomio/README.md b/loomio/versions/3/README.md similarity index 100% rename from loomio/README.md rename to loomio/versions/3/README.md diff --git a/loomio/db-init-job.yaml b/loomio/versions/3/db-init-job.yaml similarity index 100% rename from loomio/db-init-job.yaml rename to loomio/versions/3/db-init-job.yaml diff --git a/loomio/deployment-worker.yaml b/loomio/versions/3/deployment-worker.yaml similarity index 100% rename from loomio/deployment-worker.yaml rename to loomio/versions/3/deployment-worker.yaml diff --git a/loomio/deployment.yaml b/loomio/versions/3/deployment.yaml similarity index 100% rename from loomio/deployment.yaml rename to loomio/versions/3/deployment.yaml diff --git a/loomio/ingress.yaml b/loomio/versions/3/ingress.yaml similarity index 100% rename from loomio/ingress.yaml rename to loomio/versions/3/ingress.yaml diff --git a/loomio/kustomization.yaml b/loomio/versions/3/kustomization.yaml similarity index 100% rename from loomio/kustomization.yaml rename to loomio/versions/3/kustomization.yaml diff --git a/loomio/manifest.yaml b/loomio/versions/3/manifest.yaml similarity index 86% rename from loomio/manifest.yaml rename to loomio/versions/3/manifest.yaml index a5bf751..48ed45f 100644 --- a/loomio/manifest.yaml +++ b/loomio/versions/3/manifest.yaml @@ -1,8 +1,4 @@ -name: loomio -is: loomio -description: Loomio is a collaborative decision-making tool that makes it easy for groups to make decisions together version: 3.0.11-2 -icon: https://www.loomio.com/brand/logo_gold.svg requires: - name: postgres installed_as: postgres diff --git a/loomio/namespace.yaml b/loomio/versions/3/namespace.yaml similarity index 100% rename from loomio/namespace.yaml rename to loomio/versions/3/namespace.yaml diff --git a/loomio/pvc-storage.yaml b/loomio/versions/3/pvc-storage.yaml similarity index 100% rename from loomio/pvc-storage.yaml rename to loomio/versions/3/pvc-storage.yaml diff --git a/loomio/pvc-uploads.yaml b/loomio/versions/3/pvc-uploads.yaml similarity index 100% rename from loomio/pvc-uploads.yaml rename to loomio/versions/3/pvc-uploads.yaml diff --git a/loomio/service.yaml b/loomio/versions/3/service.yaml similarity index 100% rename from loomio/service.yaml rename to loomio/versions/3/service.yaml diff --git a/mastodon/app.yaml b/mastodon/app.yaml new file mode 100644 index 0000000..fba8a31 --- /dev/null +++ b/mastodon/app.yaml @@ -0,0 +1,5 @@ +name: mastodon +is: mastodon +description: Mastodon is a free, open-source social network server based on ActivityPub. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mastodon.svg +latest: "4" diff --git a/mastodon/README.md b/mastodon/versions/4/README.md similarity index 100% rename from mastodon/README.md rename to mastodon/versions/4/README.md diff --git a/mastodon/db-init-job.yaml b/mastodon/versions/4/db-init-job.yaml similarity index 100% rename from mastodon/db-init-job.yaml rename to mastodon/versions/4/db-init-job.yaml diff --git a/mastodon/deployment-sidekiq.yaml b/mastodon/versions/4/deployment-sidekiq.yaml similarity index 100% rename from mastodon/deployment-sidekiq.yaml rename to mastodon/versions/4/deployment-sidekiq.yaml diff --git a/mastodon/deployment-streaming.yaml b/mastodon/versions/4/deployment-streaming.yaml similarity index 100% rename from mastodon/deployment-streaming.yaml rename to mastodon/versions/4/deployment-streaming.yaml diff --git a/mastodon/deployment-web.yaml b/mastodon/versions/4/deployment-web.yaml similarity index 100% rename from mastodon/deployment-web.yaml rename to mastodon/versions/4/deployment-web.yaml diff --git a/mastodon/ingress.yaml b/mastodon/versions/4/ingress.yaml similarity index 100% rename from mastodon/ingress.yaml rename to mastodon/versions/4/ingress.yaml diff --git a/mastodon/kustomization.yaml b/mastodon/versions/4/kustomization.yaml similarity index 100% rename from mastodon/kustomization.yaml rename to mastodon/versions/4/kustomization.yaml diff --git a/mastodon/manifest.yaml b/mastodon/versions/4/manifest.yaml similarity index 87% rename from mastodon/manifest.yaml rename to mastodon/versions/4/manifest.yaml index ddbade7..ed1b66d 100644 --- a/mastodon/manifest.yaml +++ b/mastodon/versions/4/manifest.yaml @@ -1,8 +1,4 @@ -name: mastodon -is: mastodon -description: Mastodon is a free, open-source social network server based on ActivityPub. version: 4.5.3-2 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/mastodon.svg requires: - name: postgres - name: redis diff --git a/mastodon/namespace.yaml b/mastodon/versions/4/namespace.yaml similarity index 100% rename from mastodon/namespace.yaml rename to mastodon/versions/4/namespace.yaml diff --git a/mastodon/pvc-assets.yaml b/mastodon/versions/4/pvc-assets.yaml similarity index 100% rename from mastodon/pvc-assets.yaml rename to mastodon/versions/4/pvc-assets.yaml diff --git a/mastodon/pvc-system.yaml b/mastodon/versions/4/pvc-system.yaml similarity index 100% rename from mastodon/pvc-system.yaml rename to mastodon/versions/4/pvc-system.yaml diff --git a/mastodon/service-streaming.yaml b/mastodon/versions/4/service-streaming.yaml similarity index 100% rename from mastodon/service-streaming.yaml rename to mastodon/versions/4/service-streaming.yaml diff --git a/mastodon/service-web.yaml b/mastodon/versions/4/service-web.yaml similarity index 100% rename from mastodon/service-web.yaml rename to mastodon/versions/4/service-web.yaml diff --git a/mastodon/vapid-init-job.yaml b/mastodon/versions/4/vapid-init-job.yaml similarity index 100% rename from mastodon/vapid-init-job.yaml rename to mastodon/versions/4/vapid-init-job.yaml diff --git a/matrix/app.yaml b/matrix/app.yaml new file mode 100644 index 0000000..fde83f3 --- /dev/null +++ b/matrix/app.yaml @@ -0,0 +1,5 @@ +name: matrix +is: matrix +description: Matrix is an open standard for secure, decentralized, real-time communication. This deploys the Synapse homeserver for self-hosted Matrix federation and messaging. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/matrix.svg +latest: "v1" diff --git a/matrix/README.md b/matrix/versions/v1/README.md similarity index 100% rename from matrix/README.md rename to matrix/versions/v1/README.md diff --git a/matrix/configmap.yaml b/matrix/versions/v1/configmap.yaml similarity index 100% rename from matrix/configmap.yaml rename to matrix/versions/v1/configmap.yaml diff --git a/matrix/db-init-job.yaml b/matrix/versions/v1/db-init-job.yaml similarity index 100% rename from matrix/db-init-job.yaml rename to matrix/versions/v1/db-init-job.yaml diff --git a/matrix/deployment.yaml b/matrix/versions/v1/deployment.yaml similarity index 100% rename from matrix/deployment.yaml rename to matrix/versions/v1/deployment.yaml diff --git a/matrix/ingress.yaml b/matrix/versions/v1/ingress.yaml similarity index 100% rename from matrix/ingress.yaml rename to matrix/versions/v1/ingress.yaml diff --git a/matrix/kustomization.yaml b/matrix/versions/v1/kustomization.yaml similarity index 100% rename from matrix/kustomization.yaml rename to matrix/versions/v1/kustomization.yaml diff --git a/matrix/manifest.yaml b/matrix/versions/v1/manifest.yaml similarity index 57% rename from matrix/manifest.yaml rename to matrix/versions/v1/manifest.yaml index 2cb5be1..a72519e 100644 --- a/matrix/manifest.yaml +++ b/matrix/versions/v1/manifest.yaml @@ -1,12 +1,8 @@ -name: matrix -is: matrix -description: Matrix is an open standard for secure, decentralized, real-time communication. This deploys the Synapse homeserver for self-hosted Matrix federation and messaging. version: v1.144.0-2 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/matrix.svg requires: -- name: postgres -- name: redis -- name: smtp + - name: postgres + - name: redis + - name: smtp defaultConfig: namespace: matrix externalDnsDomain: '{{ .cloud.domain }}' @@ -29,11 +25,11 @@ defaultConfig: user: '{{ .apps.smtp.user }}' requireTls: '{{ .apps.smtp.tls }}' defaultSecrets: -- key: dbPassword -- key: registrationSharedSecret -- key: macaroonSecretKey -- key: formSecret + - key: dbPassword + - key: registrationSharedSecret + - key: macaroonSecretKey + - key: formSecret requiredSecrets: -- postgres.password -- redis.password -- smtp.password + - postgres.password + - redis.password + - smtp.password diff --git a/matrix/namespace.yaml b/matrix/versions/v1/namespace.yaml similarity index 100% rename from matrix/namespace.yaml rename to matrix/versions/v1/namespace.yaml diff --git a/matrix/pvc.yaml b/matrix/versions/v1/pvc.yaml similarity index 100% rename from matrix/pvc.yaml rename to matrix/versions/v1/pvc.yaml diff --git a/matrix/service.yaml b/matrix/versions/v1/service.yaml similarity index 100% rename from matrix/service.yaml rename to matrix/versions/v1/service.yaml diff --git a/memcached/app.yaml b/memcached/app.yaml new file mode 100644 index 0000000..07b4f21 --- /dev/null +++ b/memcached/app.yaml @@ -0,0 +1,5 @@ +name: memcached +is: memcached +description: Memcached is an in-memory key-value store for small chunks of arbitrary data, commonly used as a cache layer. +icon: https://www.vectorlogo.zone/logos/memcached/memcached-icon.svg +latest: "1" diff --git a/memcached/manifest.yaml b/memcached/manifest.yaml deleted file mode 100644 index bfa03df..0000000 --- a/memcached/manifest.yaml +++ /dev/null @@ -1,12 +0,0 @@ -name: memcached -is: memcached -description: Memcached is an in-memory key-value store for small chunks of arbitrary - data, commonly used as a cache layer. -version: 1.6.32-1 -icon: https://www.vectorlogo.zone/logos/memcached/memcached-icon.svg -requires: [] -defaultConfig: - namespace: memcached - host: memcached.memcached.svc.cluster.local - memoryLimit: 64m -defaultSecrets: [] diff --git a/memcached/README.md b/memcached/versions/1/README.md similarity index 100% rename from memcached/README.md rename to memcached/versions/1/README.md diff --git a/memcached/deployment.yaml b/memcached/versions/1/deployment.yaml similarity index 100% rename from memcached/deployment.yaml rename to memcached/versions/1/deployment.yaml diff --git a/memcached/kustomization.yaml b/memcached/versions/1/kustomization.yaml similarity index 100% rename from memcached/kustomization.yaml rename to memcached/versions/1/kustomization.yaml diff --git a/memcached/versions/1/manifest.yaml b/memcached/versions/1/manifest.yaml new file mode 100644 index 0000000..c9b441f --- /dev/null +++ b/memcached/versions/1/manifest.yaml @@ -0,0 +1,7 @@ +version: 1.6.32-1 +requires: [] +defaultConfig: + namespace: memcached + host: memcached.memcached.svc.cluster.local + memoryLimit: 64m +defaultSecrets: [] diff --git a/memcached/namespace.yaml b/memcached/versions/1/namespace.yaml similarity index 100% rename from memcached/namespace.yaml rename to memcached/versions/1/namespace.yaml diff --git a/memcached/service.yaml b/memcached/versions/1/service.yaml similarity index 100% rename from memcached/service.yaml rename to memcached/versions/1/service.yaml diff --git a/metallb/app.yaml b/metallb/app.yaml new file mode 100644 index 0000000..ab7742f --- /dev/null +++ b/metallb/app.yaml @@ -0,0 +1,5 @@ +name: metallb +is: metallb +description: Bare metal load-balancer for Kubernetes +category: infrastructure +latest: "v0" diff --git a/metallb/README.md b/metallb/versions/v0/README.md similarity index 100% rename from metallb/README.md rename to metallb/versions/v0/README.md diff --git a/metallb/configuration/kustomization.yaml b/metallb/versions/v0/configuration/kustomization.yaml similarity index 100% rename from metallb/configuration/kustomization.yaml rename to metallb/versions/v0/configuration/kustomization.yaml diff --git a/metallb/configuration/pool.yaml b/metallb/versions/v0/configuration/pool.yaml similarity index 100% rename from metallb/configuration/pool.yaml rename to metallb/versions/v0/configuration/pool.yaml diff --git a/metallb/installation/kustomization.yaml b/metallb/versions/v0/installation/kustomization.yaml similarity index 100% rename from metallb/installation/kustomization.yaml rename to metallb/versions/v0/installation/kustomization.yaml diff --git a/metallb/kustomization.yaml b/metallb/versions/v0/kustomization.yaml similarity index 100% rename from metallb/kustomization.yaml rename to metallb/versions/v0/kustomization.yaml diff --git a/metallb/manifest.yaml b/metallb/versions/v0/manifest.yaml similarity index 74% rename from metallb/manifest.yaml rename to metallb/versions/v0/manifest.yaml index 7918eed..57df2b7 100644 --- a/metallb/manifest.yaml +++ b/metallb/versions/v0/manifest.yaml @@ -1,9 +1,5 @@ -name: metallb -is: metallb -description: Bare metal load-balancer for Kubernetes version: v0.15.0 deploymentName: controller -category: infrastructure defaultConfig: namespace: metallb-system ipAddressPool: "192.168.1.240-192.168.1.250" diff --git a/mysql/app.yaml b/mysql/app.yaml new file mode 100644 index 0000000..2a95b35 --- /dev/null +++ b/mysql/app.yaml @@ -0,0 +1,5 @@ +name: mysql +is: mysql +description: MySQL is an open-source relational database management system +icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png +latest: "9" diff --git a/mysql/manifest.yaml b/mysql/manifest.yaml deleted file mode 100644 index 4b9c5c9..0000000 --- a/mysql/manifest.yaml +++ /dev/null @@ -1,15 +0,0 @@ -name: mysql -is: mysql -description: MySQL is an open-source relational database management system -version: 9.1.0-1 -icon: https://www.mysql.com/common/logos/logo-mysql-170x115.png -requires: [] -defaultConfig: - namespace: mysql - host: mysql.mysql.svc.cluster.local - storage: 20Gi - dbName: mysql - user: mysql -defaultSecrets: -- key: rootPassword -- key: password diff --git a/mysql/README.md b/mysql/versions/9/README.md similarity index 100% rename from mysql/README.md rename to mysql/versions/9/README.md diff --git a/mysql/configmap.yaml b/mysql/versions/9/configmap.yaml similarity index 100% rename from mysql/configmap.yaml rename to mysql/versions/9/configmap.yaml diff --git a/mysql/kustomization.yaml b/mysql/versions/9/kustomization.yaml similarity index 100% rename from mysql/kustomization.yaml rename to mysql/versions/9/kustomization.yaml diff --git a/mysql/versions/9/manifest.yaml b/mysql/versions/9/manifest.yaml new file mode 100644 index 0000000..edb1846 --- /dev/null +++ b/mysql/versions/9/manifest.yaml @@ -0,0 +1,11 @@ +version: 9.1.0-1 +requires: [] +defaultConfig: + namespace: mysql + host: mysql.mysql.svc.cluster.local + storage: 20Gi + dbName: mysql + user: mysql +defaultSecrets: + - key: rootPassword + - key: password diff --git a/mysql/namespace.yaml b/mysql/versions/9/namespace.yaml similarity index 100% rename from mysql/namespace.yaml rename to mysql/versions/9/namespace.yaml diff --git a/mysql/service-headless.yaml b/mysql/versions/9/service-headless.yaml similarity index 100% rename from mysql/service-headless.yaml rename to mysql/versions/9/service-headless.yaml diff --git a/mysql/service.yaml b/mysql/versions/9/service.yaml similarity index 100% rename from mysql/service.yaml rename to mysql/versions/9/service.yaml diff --git a/mysql/statefulset.yaml b/mysql/versions/9/statefulset.yaml similarity index 100% rename from mysql/statefulset.yaml rename to mysql/versions/9/statefulset.yaml diff --git a/nfs/app.yaml b/nfs/app.yaml new file mode 100644 index 0000000..9e50eee --- /dev/null +++ b/nfs/app.yaml @@ -0,0 +1,5 @@ +name: nfs +is: nfs +description: NFS client provisioner for external NFS storage +category: infrastructure +latest: "v4" diff --git a/nfs/README.md b/nfs/versions/v4/README.md similarity index 100% rename from nfs/README.md rename to nfs/versions/v4/README.md diff --git a/nfs/kustomization.yaml b/nfs/versions/v4/kustomization.yaml similarity index 100% rename from nfs/kustomization.yaml rename to nfs/versions/v4/kustomization.yaml diff --git a/nfs/manifest.yaml b/nfs/versions/v4/manifest.yaml similarity index 71% rename from nfs/manifest.yaml rename to nfs/versions/v4/manifest.yaml index 22d00cc..7be9ef6 100644 --- a/nfs/manifest.yaml +++ b/nfs/versions/v4/manifest.yaml @@ -1,8 +1,4 @@ -name: nfs -is: nfs -description: NFS client provisioner for external NFS storage version: v4.0.18-3 -category: infrastructure scripts: - name: check-nfs path: scripts/check-nfs.sh diff --git a/nfs/persistent-volume.yaml b/nfs/versions/v4/persistent-volume.yaml similarity index 100% rename from nfs/persistent-volume.yaml rename to nfs/versions/v4/persistent-volume.yaml diff --git a/nfs/scripts/check-nfs.sh b/nfs/versions/v4/scripts/check-nfs.sh similarity index 100% rename from nfs/scripts/check-nfs.sh rename to nfs/versions/v4/scripts/check-nfs.sh diff --git a/nfs/setup-nfs-host.sh b/nfs/versions/v4/setup-nfs-host.sh similarity index 100% rename from nfs/setup-nfs-host.sh rename to nfs/versions/v4/setup-nfs-host.sh diff --git a/nfs/storage-class.yaml b/nfs/versions/v4/storage-class.yaml similarity index 100% rename from nfs/storage-class.yaml rename to nfs/versions/v4/storage-class.yaml diff --git a/node-feature-discovery/manifest.yaml b/node-feature-discovery/app.yaml similarity index 55% rename from node-feature-discovery/manifest.yaml rename to node-feature-discovery/app.yaml index 5e46b1d..522e59d 100644 --- a/node-feature-discovery/manifest.yaml +++ b/node-feature-discovery/app.yaml @@ -1,8 +1,5 @@ name: node-feature-discovery is: node-feature-discovery description: Detects hardware features available on each node -version: v0.17.3 -deploymentName: node-feature-discovery-master category: infrastructure -defaultConfig: - namespace: node-feature-discovery +latest: "v0" diff --git a/node-feature-discovery/crds.yaml b/node-feature-discovery/versions/v0/crds.yaml similarity index 100% rename from node-feature-discovery/crds.yaml rename to node-feature-discovery/versions/v0/crds.yaml diff --git a/node-feature-discovery/daemonset.yaml b/node-feature-discovery/versions/v0/daemonset.yaml similarity index 100% rename from node-feature-discovery/daemonset.yaml rename to node-feature-discovery/versions/v0/daemonset.yaml diff --git a/node-feature-discovery/kustomization.yaml b/node-feature-discovery/versions/v0/kustomization.yaml similarity index 100% rename from node-feature-discovery/kustomization.yaml rename to node-feature-discovery/versions/v0/kustomization.yaml diff --git a/node-feature-discovery/versions/v0/manifest.yaml b/node-feature-discovery/versions/v0/manifest.yaml new file mode 100644 index 0000000..add42e3 --- /dev/null +++ b/node-feature-discovery/versions/v0/manifest.yaml @@ -0,0 +1,4 @@ +version: v0.17.3 +deploymentName: node-feature-discovery-master +defaultConfig: + namespace: node-feature-discovery diff --git a/node-feature-discovery/master.yaml b/node-feature-discovery/versions/v0/master.yaml similarity index 100% rename from node-feature-discovery/master.yaml rename to node-feature-discovery/versions/v0/master.yaml diff --git a/node-feature-discovery/namespace.yaml b/node-feature-discovery/versions/v0/namespace.yaml similarity index 100% rename from node-feature-discovery/namespace.yaml rename to node-feature-discovery/versions/v0/namespace.yaml diff --git a/node-feature-discovery/rbac.yaml b/node-feature-discovery/versions/v0/rbac.yaml similarity index 100% rename from node-feature-discovery/rbac.yaml rename to node-feature-discovery/versions/v0/rbac.yaml diff --git a/nvidia-device-plugin/app.yaml b/nvidia-device-plugin/app.yaml new file mode 100644 index 0000000..28c25c5 --- /dev/null +++ b/nvidia-device-plugin/app.yaml @@ -0,0 +1,5 @@ +name: nvidia-device-plugin +is: nvidia-device-plugin +description: NVIDIA device plugin for Kubernetes +category: infrastructure +latest: "v0" diff --git a/nvidia-device-plugin/README.md b/nvidia-device-plugin/versions/v0/README.md similarity index 100% rename from nvidia-device-plugin/README.md rename to nvidia-device-plugin/versions/v0/README.md diff --git a/nvidia-device-plugin/daemonset.yaml b/nvidia-device-plugin/versions/v0/daemonset.yaml similarity index 100% rename from nvidia-device-plugin/daemonset.yaml rename to nvidia-device-plugin/versions/v0/daemonset.yaml diff --git a/nvidia-device-plugin/kustomization.yaml b/nvidia-device-plugin/versions/v0/kustomization.yaml similarity index 100% rename from nvidia-device-plugin/kustomization.yaml rename to nvidia-device-plugin/versions/v0/kustomization.yaml diff --git a/nvidia-device-plugin/manifest.yaml b/nvidia-device-plugin/versions/v0/manifest.yaml similarity index 69% rename from nvidia-device-plugin/manifest.yaml rename to nvidia-device-plugin/versions/v0/manifest.yaml index 1efdfad..84d96a0 100644 --- a/nvidia-device-plugin/manifest.yaml +++ b/nvidia-device-plugin/versions/v0/manifest.yaml @@ -1,9 +1,5 @@ -name: nvidia-device-plugin -is: nvidia-device-plugin -description: NVIDIA device plugin for Kubernetes version: v0.17.1 deploymentName: nvidia-device-plugin-daemonset -category: infrastructure requires: - name: node-feature-discovery defaultConfig: diff --git a/nvidia-device-plugin/runtimeclass.yaml b/nvidia-device-plugin/versions/v0/runtimeclass.yaml similarity index 100% rename from nvidia-device-plugin/runtimeclass.yaml rename to nvidia-device-plugin/versions/v0/runtimeclass.yaml diff --git a/open-webui/app.yaml b/open-webui/app.yaml new file mode 100644 index 0000000..c661fa1 --- /dev/null +++ b/open-webui/app.yaml @@ -0,0 +1,5 @@ +name: open-webui +is: open-webui +description: Open WebUI is a comprehensive, open-source web interface for AI models. Features a user-friendly design, supports various LLM runners, and operates entirely offline. Perfect for creating a ChatGPT-like experience with local or hosted models. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui.svg +latest: "0" diff --git a/open-webui/manifest.yaml b/open-webui/manifest.yaml deleted file mode 100644 index bf8fb6f..0000000 --- a/open-webui/manifest.yaml +++ /dev/null @@ -1,18 +0,0 @@ -name: open-webui -is: open-webui -description: Open WebUI is a comprehensive, open-source web interface for AI models. - Features a user-friendly design, supports various LLM runners, and operates entirely - offline. Perfect for creating a ChatGPT-like experience with local or hosted models. -version: 0.9.5-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/open-webui.svg -requires: [] -defaultConfig: - namespace: open-webui - externalDnsDomain: '{{ .cloud.domain }}' - storage: 10Gi - domain: chat.{{ .cloud.domain }} - vllmApiUrl: http://vllm-service.llm.svc.cluster.local:8000/v1 - adminEmail: '{{ .operator.email }}' -defaultSecrets: -- key: secretKey -- key: adminPassword diff --git a/open-webui/README.md b/open-webui/versions/0/README.md similarity index 100% rename from open-webui/README.md rename to open-webui/versions/0/README.md diff --git a/open-webui/deployment.yaml b/open-webui/versions/0/deployment.yaml similarity index 100% rename from open-webui/deployment.yaml rename to open-webui/versions/0/deployment.yaml diff --git a/open-webui/ingress.yaml b/open-webui/versions/0/ingress.yaml similarity index 100% rename from open-webui/ingress.yaml rename to open-webui/versions/0/ingress.yaml diff --git a/open-webui/kustomization.yaml b/open-webui/versions/0/kustomization.yaml similarity index 100% rename from open-webui/kustomization.yaml rename to open-webui/versions/0/kustomization.yaml diff --git a/open-webui/versions/0/manifest.yaml b/open-webui/versions/0/manifest.yaml new file mode 100644 index 0000000..23908cb --- /dev/null +++ b/open-webui/versions/0/manifest.yaml @@ -0,0 +1,12 @@ +version: 0.9.5-1 +requires: [] +defaultConfig: + namespace: open-webui + externalDnsDomain: '{{ .cloud.domain }}' + storage: 10Gi + domain: chat.{{ .cloud.domain }} + vllmApiUrl: http://vllm-service.llm.svc.cluster.local:8000/v1 + adminEmail: '{{ .operator.email }}' +defaultSecrets: + - key: secretKey + - key: adminPassword diff --git a/open-webui/namespace.yaml b/open-webui/versions/0/namespace.yaml similarity index 100% rename from open-webui/namespace.yaml rename to open-webui/versions/0/namespace.yaml diff --git a/open-webui/pvc.yaml b/open-webui/versions/0/pvc.yaml similarity index 100% rename from open-webui/pvc.yaml rename to open-webui/versions/0/pvc.yaml diff --git a/open-webui/service.yaml b/open-webui/versions/0/service.yaml similarity index 100% rename from open-webui/service.yaml rename to open-webui/versions/0/service.yaml diff --git a/openproject/app.yaml b/openproject/app.yaml new file mode 100644 index 0000000..31ff414 --- /dev/null +++ b/openproject/app.yaml @@ -0,0 +1,5 @@ +name: openproject +is: openproject +description: OpenProject is an open-source project management software that provides comprehensive features for project planning, tracking, and collaboration. +icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openproject.svg +latest: "16" diff --git a/openproject/README.md b/openproject/versions/16/README.md similarity index 100% rename from openproject/README.md rename to openproject/versions/16/README.md diff --git a/openproject/configmap_core.yaml b/openproject/versions/16/configmap_core.yaml similarity index 100% rename from openproject/configmap_core.yaml rename to openproject/versions/16/configmap_core.yaml diff --git a/openproject/configmap_memcached.yaml b/openproject/versions/16/configmap_memcached.yaml similarity index 100% rename from openproject/configmap_memcached.yaml rename to openproject/versions/16/configmap_memcached.yaml diff --git a/openproject/db-init-job.yaml b/openproject/versions/16/db-init-job.yaml similarity index 100% rename from openproject/db-init-job.yaml rename to openproject/versions/16/db-init-job.yaml diff --git a/openproject/ingress.yaml b/openproject/versions/16/ingress.yaml similarity index 100% rename from openproject/ingress.yaml rename to openproject/versions/16/ingress.yaml diff --git a/openproject/kustomization.yaml b/openproject/versions/16/kustomization.yaml similarity index 100% rename from openproject/kustomization.yaml rename to openproject/versions/16/kustomization.yaml diff --git a/openproject/manifest.yaml b/openproject/versions/16/manifest.yaml similarity index 59% rename from openproject/manifest.yaml rename to openproject/versions/16/manifest.yaml index 29f9b0e..52677e1 100644 --- a/openproject/manifest.yaml +++ b/openproject/versions/16/manifest.yaml @@ -1,12 +1,7 @@ -name: openproject -is: openproject -description: OpenProject is an open-source project management software that provides - comprehensive features for project planning, tracking, and collaboration. version: 16.1.1-1 -icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/openproject.svg requires: -- name: postgres -- name: memcached + - name: postgres + - name: memcached defaultConfig: namespace: openproject externalDnsDomain: '{{ .cloud.domain }}' @@ -24,7 +19,7 @@ defaultConfig: host: '{{ .apps.memcached.host }}' port: '{{ .apps.memcached.port }}' defaultSecrets: -- key: dbPassword -- key: adminPassword + - key: dbPassword + - key: adminPassword requiredSecrets: -- postgres.password + - postgres.password diff --git a/openproject/namespace.yaml b/openproject/versions/16/namespace.yaml similarity index 100% rename from openproject/namespace.yaml rename to openproject/versions/16/namespace.yaml diff --git a/openproject/persistentvolumeclaim.yaml b/openproject/versions/16/persistentvolumeclaim.yaml similarity index 100% rename from openproject/persistentvolumeclaim.yaml rename to openproject/versions/16/persistentvolumeclaim.yaml diff --git a/openproject/seeder-job.yaml b/openproject/versions/16/seeder-job.yaml similarity index 100% rename from openproject/seeder-job.yaml rename to openproject/versions/16/seeder-job.yaml diff --git a/openproject/service.yaml b/openproject/versions/16/service.yaml similarity index 100% rename from openproject/service.yaml rename to openproject/versions/16/service.yaml diff --git a/openproject/serviceaccount.yaml b/openproject/versions/16/serviceaccount.yaml similarity index 100% rename from openproject/serviceaccount.yaml rename to openproject/versions/16/serviceaccount.yaml diff --git a/openproject/web-deployment.yaml b/openproject/versions/16/web-deployment.yaml similarity index 100% rename from openproject/web-deployment.yaml rename to openproject/versions/16/web-deployment.yaml diff --git a/openproject/worker-deployment.yaml b/openproject/versions/16/worker-deployment.yaml similarity index 100% rename from openproject/worker-deployment.yaml rename to openproject/versions/16/worker-deployment.yaml diff --git a/postgres/app.yaml b/postgres/app.yaml new file mode 100644 index 0000000..fc435e5 --- /dev/null +++ b/postgres/app.yaml @@ -0,0 +1,5 @@ +name: postgres +is: postgres +description: PostgreSQL is a powerful, open source object-relational database system. +icon: https://www.postgresql.org/media/img/about/press/elephant.png +latest: "1" diff --git a/postgres/README.md b/postgres/versions/1/README.md similarity index 100% rename from postgres/README.md rename to postgres/versions/1/README.md diff --git a/postgres/deployment.yaml b/postgres/versions/1/deployment.yaml similarity index 100% rename from postgres/deployment.yaml rename to postgres/versions/1/deployment.yaml diff --git a/postgres/doctor/kustomization.yaml b/postgres/versions/1/doctor/kustomization.yaml similarity index 100% rename from postgres/doctor/kustomization.yaml rename to postgres/versions/1/doctor/kustomization.yaml diff --git a/postgres/doctor/test-job.yaml b/postgres/versions/1/doctor/test-job.yaml similarity index 100% rename from postgres/doctor/test-job.yaml rename to postgres/versions/1/doctor/test-job.yaml diff --git a/postgres/kustomization.yaml b/postgres/versions/1/kustomization.yaml similarity index 100% rename from postgres/kustomization.yaml rename to postgres/versions/1/kustomization.yaml diff --git a/postgres/manifest.yaml b/postgres/versions/1/manifest.yaml similarity index 52% rename from postgres/manifest.yaml rename to postgres/versions/1/manifest.yaml index d70516c..60fc127 100644 --- a/postgres/manifest.yaml +++ b/postgres/versions/1/manifest.yaml @@ -1,8 +1,4 @@ -name: postgres -is: postgres -description: PostgreSQL is a powerful, open source object-relational database system. version: 1.0.0-1 -icon: https://www.postgresql.org/media/img/about/press/elephant.png defaultConfig: namespace: postgres host: postgres.postgres.svc.cluster.local diff --git a/postgres/namespace.yaml b/postgres/versions/1/namespace.yaml similarity index 100% rename from postgres/namespace.yaml rename to postgres/versions/1/namespace.yaml diff --git a/postgres/pvc.yaml b/postgres/versions/1/pvc.yaml similarity index 100% rename from postgres/pvc.yaml rename to postgres/versions/1/pvc.yaml diff --git a/postgres/service.yaml b/postgres/versions/1/service.yaml similarity index 100% rename from postgres/service.yaml rename to postgres/versions/1/service.yaml diff --git a/redis/manifest.yaml b/redis/app.yaml similarity index 53% rename from redis/manifest.yaml rename to redis/app.yaml index cfd3c85..ea31368 100644 --- a/redis/manifest.yaml +++ b/redis/app.yaml @@ -1,12 +1,5 @@ name: redis is: redis description: Redis is an open source, in-memory data structure store, used as a database, cache and message broker. -version: 1.0.0-1 icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/redis.svg -defaultConfig: - namespace: redis - host: redis.redis.svc.cluster.local - port: 6379 - uri: redis://{{ .app.host }}:{{ .app.port }}/0 -defaultSecrets: - - key: password +latest: "1" diff --git a/redis/README.md b/redis/versions/1/README.md similarity index 100% rename from redis/README.md rename to redis/versions/1/README.md diff --git a/redis/deployment.yaml b/redis/versions/1/deployment.yaml similarity index 100% rename from redis/deployment.yaml rename to redis/versions/1/deployment.yaml diff --git a/redis/kustomization.yaml b/redis/versions/1/kustomization.yaml similarity index 100% rename from redis/kustomization.yaml rename to redis/versions/1/kustomization.yaml diff --git a/redis/versions/1/manifest.yaml b/redis/versions/1/manifest.yaml new file mode 100644 index 0000000..24f2b86 --- /dev/null +++ b/redis/versions/1/manifest.yaml @@ -0,0 +1,8 @@ +version: 1.0.0-1 +defaultConfig: + namespace: redis + host: redis.redis.svc.cluster.local + port: 6379 + uri: redis://{{ .app.host }}:{{ .app.port }}/0 +defaultSecrets: + - key: password diff --git a/redis/namespace.yaml b/redis/versions/1/namespace.yaml similarity index 100% rename from redis/namespace.yaml rename to redis/versions/1/namespace.yaml diff --git a/redis/service.yaml b/redis/versions/1/service.yaml similarity index 100% rename from redis/service.yaml rename to redis/versions/1/service.yaml diff --git a/smtp/app.yaml b/smtp/app.yaml new file mode 100644 index 0000000..88944f7 --- /dev/null +++ b/smtp/app.yaml @@ -0,0 +1,5 @@ +name: smtp +is: smtp +description: SMTP relay service for cluster applications +category: infrastructure +latest: "1" diff --git a/smtp/README.md b/smtp/versions/1/README.md similarity index 100% rename from smtp/README.md rename to smtp/versions/1/README.md diff --git a/smtp/manifest.yaml b/smtp/versions/1/manifest.yaml similarity index 54% rename from smtp/manifest.yaml rename to smtp/versions/1/manifest.yaml index 8832f03..9abe9a4 100644 --- a/smtp/manifest.yaml +++ b/smtp/versions/1/manifest.yaml @@ -1,7 +1,4 @@ -name: smtp -is: smtp -description: SMTP relay service for cluster applications -category: infrastructure +version: 1.0.0 defaultConfig: host: "" port: "465" diff --git a/snapshot-controller/manifest.yaml b/snapshot-controller/app.yaml similarity index 61% rename from snapshot-controller/manifest.yaml rename to snapshot-controller/app.yaml index af14349..b6b8ddf 100644 --- a/snapshot-controller/manifest.yaml +++ b/snapshot-controller/app.yaml @@ -1,8 +1,5 @@ name: snapshot-controller is: snapshot-controller description: Kubernetes CSI Snapshot Controller for managing VolumeSnapshots -version: v8.1.0_1 -deploymentName: snapshot-controller category: infrastructure -defaultConfig: - namespace: kube-system +latest: "v8" diff --git a/snapshot-controller/README.md b/snapshot-controller/versions/v8/README.md similarity index 100% rename from snapshot-controller/README.md rename to snapshot-controller/versions/v8/README.md diff --git a/snapshot-controller/deployment.yaml b/snapshot-controller/versions/v8/deployment.yaml similarity index 100% rename from snapshot-controller/deployment.yaml rename to snapshot-controller/versions/v8/deployment.yaml diff --git a/snapshot-controller/kustomization.yaml b/snapshot-controller/versions/v8/kustomization.yaml similarity index 100% rename from snapshot-controller/kustomization.yaml rename to snapshot-controller/versions/v8/kustomization.yaml diff --git a/snapshot-controller/versions/v8/manifest.yaml b/snapshot-controller/versions/v8/manifest.yaml new file mode 100644 index 0000000..1fa2268 --- /dev/null +++ b/snapshot-controller/versions/v8/manifest.yaml @@ -0,0 +1,4 @@ +version: v8.1.0_1 +deploymentName: snapshot-controller +defaultConfig: + namespace: kube-system diff --git a/snapshot-controller/rbac.yaml b/snapshot-controller/versions/v8/rbac.yaml similarity index 100% rename from snapshot-controller/rbac.yaml rename to snapshot-controller/versions/v8/rbac.yaml diff --git a/snapshot-controller/volumesnapshotclasses.yaml b/snapshot-controller/versions/v8/volumesnapshotclasses.yaml similarity index 100% rename from snapshot-controller/volumesnapshotclasses.yaml rename to snapshot-controller/versions/v8/volumesnapshotclasses.yaml diff --git a/snapshot-controller/volumesnapshotcontents.yaml b/snapshot-controller/versions/v8/volumesnapshotcontents.yaml similarity index 100% rename from snapshot-controller/volumesnapshotcontents.yaml rename to snapshot-controller/versions/v8/volumesnapshotcontents.yaml diff --git a/snapshot-controller/volumesnapshots.yaml b/snapshot-controller/versions/v8/volumesnapshots.yaml similarity index 100% rename from snapshot-controller/volumesnapshots.yaml rename to snapshot-controller/versions/v8/volumesnapshots.yaml diff --git a/traefik/app.yaml b/traefik/app.yaml new file mode 100644 index 0000000..244fd7f --- /dev/null +++ b/traefik/app.yaml @@ -0,0 +1,5 @@ +name: traefik +is: traefik +description: Cloud-native reverse proxy and ingress controller +category: infrastructure +latest: "v3" diff --git a/traefik/README.md b/traefik/versions/v3/README.md similarity index 100% rename from traefik/README.md rename to traefik/versions/v3/README.md diff --git a/traefik/deployment.yaml b/traefik/versions/v3/deployment.yaml similarity index 100% rename from traefik/deployment.yaml rename to traefik/versions/v3/deployment.yaml diff --git a/traefik/gateway.yaml b/traefik/versions/v3/gateway.yaml similarity index 100% rename from traefik/gateway.yaml rename to traefik/versions/v3/gateway.yaml diff --git a/traefik/gatewayclass.yaml b/traefik/versions/v3/gatewayclass.yaml similarity index 100% rename from traefik/gatewayclass.yaml rename to traefik/versions/v3/gatewayclass.yaml diff --git a/traefik/ingressclass.yaml b/traefik/versions/v3/ingressclass.yaml similarity index 100% rename from traefik/ingressclass.yaml rename to traefik/versions/v3/ingressclass.yaml diff --git a/traefik/ingressroute.yaml b/traefik/versions/v3/ingressroute.yaml similarity index 100% rename from traefik/ingressroute.yaml rename to traefik/versions/v3/ingressroute.yaml diff --git a/traefik/kustomization.yaml b/traefik/versions/v3/kustomization.yaml similarity index 100% rename from traefik/kustomization.yaml rename to traefik/versions/v3/kustomization.yaml diff --git a/traefik/manifest.yaml b/traefik/versions/v3/manifest.yaml similarity index 85% rename from traefik/manifest.yaml rename to traefik/versions/v3/manifest.yaml index 306dc09..2a59f47 100644 --- a/traefik/manifest.yaml +++ b/traefik/versions/v3/manifest.yaml @@ -1,8 +1,4 @@ -name: traefik -is: traefik -description: Cloud-native reverse proxy and ingress controller version: v3.4 -category: infrastructure requires: - name: metallb defaultConfig: diff --git a/traefik/namespace.yaml b/traefik/versions/v3/namespace.yaml similarity index 100% rename from traefik/namespace.yaml rename to traefik/versions/v3/namespace.yaml diff --git a/traefik/rbac/clusterrole.yaml b/traefik/versions/v3/rbac/clusterrole.yaml similarity index 100% rename from traefik/rbac/clusterrole.yaml rename to traefik/versions/v3/rbac/clusterrole.yaml diff --git a/traefik/rbac/clusterrolebinding.yaml b/traefik/versions/v3/rbac/clusterrolebinding.yaml similarity index 100% rename from traefik/rbac/clusterrolebinding.yaml rename to traefik/versions/v3/rbac/clusterrolebinding.yaml diff --git a/traefik/rbac/serviceaccount.yaml b/traefik/versions/v3/rbac/serviceaccount.yaml similarity index 100% rename from traefik/rbac/serviceaccount.yaml rename to traefik/versions/v3/rbac/serviceaccount.yaml diff --git a/traefik/service.yaml b/traefik/versions/v3/service.yaml similarity index 100% rename from traefik/service.yaml rename to traefik/versions/v3/service.yaml diff --git a/utils/manifest.yaml b/utils/app.yaml similarity index 60% rename from utils/manifest.yaml rename to utils/app.yaml index eaa80d2..a7d66dc 100644 --- a/utils/manifest.yaml +++ b/utils/app.yaml @@ -1,8 +1,5 @@ name: utils is: utils description: Utility tools and scripts for cluster administration -version: v1.0.1 -deploymentName: netdebug category: infrastructure -defaultConfig: - namespace: debug +latest: "v1" diff --git a/utils/README.md b/utils/versions/v1/README.md similarity index 100% rename from utils/README.md rename to utils/versions/v1/README.md diff --git a/utils/kustomization.yaml b/utils/versions/v1/kustomization.yaml similarity index 100% rename from utils/kustomization.yaml rename to utils/versions/v1/kustomization.yaml diff --git a/utils/versions/v1/manifest.yaml b/utils/versions/v1/manifest.yaml new file mode 100644 index 0000000..bfce536 --- /dev/null +++ b/utils/versions/v1/manifest.yaml @@ -0,0 +1,4 @@ +version: v1.0.1 +deploymentName: netdebug +defaultConfig: + namespace: debug diff --git a/utils/netdebug.yaml b/utils/versions/v1/netdebug.yaml similarity index 100% rename from utils/netdebug.yaml rename to utils/versions/v1/netdebug.yaml diff --git a/vllm/app.yaml b/vllm/app.yaml new file mode 100644 index 0000000..fbebe1e --- /dev/null +++ b/vllm/app.yaml @@ -0,0 +1,5 @@ +name: vllm +is: vllm +description: vLLM is a fast and easy-to-use library for LLM inference and serving with OpenAI-compatible API +icon: https://unpkg.com/@lobehub/icons-static-png@latest/dark/vllm.png +latest: "0" diff --git a/vllm/README.md b/vllm/versions/0/README.md similarity index 100% rename from vllm/README.md rename to vllm/versions/0/README.md diff --git a/vllm/deployment.yaml b/vllm/versions/0/deployment.yaml similarity index 100% rename from vllm/deployment.yaml rename to vllm/versions/0/deployment.yaml diff --git a/vllm/ingress.yaml b/vllm/versions/0/ingress.yaml similarity index 100% rename from vllm/ingress.yaml rename to vllm/versions/0/ingress.yaml diff --git a/vllm/kustomization.yaml b/vllm/versions/0/kustomization.yaml similarity index 100% rename from vllm/kustomization.yaml rename to vllm/versions/0/kustomization.yaml diff --git a/vllm/manifest.yaml b/vllm/versions/0/manifest.yaml similarity index 60% rename from vllm/manifest.yaml rename to vllm/versions/0/manifest.yaml index 7acbf7d..83edc01 100644 --- a/vllm/manifest.yaml +++ b/vllm/versions/0/manifest.yaml @@ -1,9 +1,4 @@ -name: vllm -is: vllm -description: vLLM is a fast and easy-to-use library for LLM inference and serving - with OpenAI-compatible API version: 0.5.4-1 -icon: https://unpkg.com/@lobehub/icons-static-png@latest/dark/vllm.png requires: [] defaultConfig: namespace: llm diff --git a/vllm/namespace.yaml b/vllm/versions/0/namespace.yaml similarity index 100% rename from vllm/namespace.yaml rename to vllm/versions/0/namespace.yaml diff --git a/vllm/service.yaml b/vllm/versions/0/service.yaml similarity index 100% rename from vllm/service.yaml rename to vllm/versions/0/service.yaml