# yaml-language-server: $schema=https://raw.githubusercontent.com/bjw-s/helm-charts/main/charts/other/app-template/schemas/helmrelease-helm-v2.schema.json
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: ganymede
spec:
  interval: 5m
  chart:
    spec:
      chart: app-template
      version: 3.5.1
      sourceRef:
        kind: HelmRepository
        name: bjws-charts
        namespace: flux-system
  values:
    controllers:
      main:
        containers:
          ganymede:
            image:
              repository: ghcr.io/zibbp/ganymede
              tag: 4.0.2
            envFrom:
              - secretRef:
                  name: ganymede-env
            env:
              PUID: 10555
              PGID: 10555
              TZ: "America/New_York" # Set to your timezone
              DB_HOST: "postgres16-rw.database.svc"
              DB_PORT: "5432"
              DB_USER: "ganymede"
              DB_NAME: "ganymede"
              DB_SSL: "disable"
              # OAUTH
              OAUTH_PROVIDER_URL: "https://auth.${SECRET_NEW_DOMAIN}/application/o/ganymede/.well-known/openid-configuration"
              OAUTH_REDIRECT_URL: "https://twvods.${SECRET_NEW_DOMAIN}/api/v1/auth/oauth/callback"
              # WORKER
              MAX_CHAT_DOWNLOAD_EXECUTIONS: "5"
              MAX_CHAT_RENDER_EXECUTIONS: "3"
              MAX_VIDEO_DOWNLOAD_EXECUTIONS: "5"
              MAX_VIDEO_CONVERT_EXECUTIONS: "3"
              # FRONTEND
              SHOW_SSO_LOGIN_BUTTON: "true" # show/hide SSO login button on login page
              FORCE_SSO_AUTH: "false" # force SSO auth for all users (bypasses login page and redirects to SSO)
              REQUIRE_LOGIN: "false" # require login to view videos

    service:
      app:
        controller: main
        ports:
          http:
            port: 4000

    serviceMonitor:
      app:
        labels:
          release: kube-prometheus-stack
        serviceName: ganymede
        endpoints:
          - port: http
            interval: 1m
            scrapeTimeout: 5s
            path: /metrics
            metricRelabelings:
              # add `ganymede_` prefix to all label metrics
              - sourceLabels: ["__name__"]
                targetLabel: "__name__"
                regex: "(.*)"
                replacement: "ganymede_$${1}"
                action: replace
          
    ingress:
      main:
        annotations:
          cert-manager.io/cluster-issuer: letsencrypt-production
          traefik.ingress.kubernetes.io/router.entrypoints: websecure
        hosts:
        - host: twvods.${SECRET_NEW_DOMAIN}
          paths:
          - path: /
            service:
              identifier: app
              port: http

    persistence:
      vods:
        type: persistentVolumeClaim
        size: 50Gi
        retain: true
        storageClass: mainpool-hostpath
        accessMode: ReadWriteOnce
        globalMounts:
        - path: /data/videos
      ganymede-data:
        type: persistentVolumeClaim
        size: 5Gi
        retain: true
        storageClass: mainpool-hostpath
        accessMode: ReadWriteOnce
        globalMounts:
        - path: /data/temp
      ganymede-logs:
        type: persistentVolumeClaim
        size: 5Gi
        retain: true
        storageClass: mainpool-hostpath
        accessMode: ReadWriteOnce
        globalMounts:
        - path: /data/logs
      ganymede-conf:
        name: ganymede-conf
        type: configMap
        defaultMode: 0777
        globalMounts:
        - path: /data/config/config.json
          subPath: config.json