# k8s/frontend.yaml
# ============================================
# Chat Switchboard - Frontend Deployment
# ============================================
# nginx serving the SPA + proxying page routes
# to the backend for Go template rendering.
#
# v0.22.6+: BACKEND_URL enables proxy_pass for
# /, /login, /admin, /editor, /notes, /settings.
# ============================================
apiVersion: apps/v1
kind: Deployment
metadata:
  name: switchboard-fe${DEPLOY_SUFFIX}
  namespace: ${NAMESPACE}
  labels:
    app: switchboard
    component: frontend
    env: ${ENVIRONMENT}
spec:
  replicas: ${FE_REPLICAS}
  selector:
    matchLabels:
      app: switchboard
      component: frontend
      env: ${ENVIRONMENT}
  template:
    metadata:
      labels:
        app: switchboard
        component: frontend
        env: ${ENVIRONMENT}
    spec:
      containers:
      - name: frontend
        image: ${FE_IMAGE}:${IMAGE_TAG}
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          name: http
        env:
        - name: BASE_PATH
          value: "${BASE_PATH}"
        - name: ENVIRONMENT
          value: "${ENVIRONMENT}"
        - name: BACKEND_URL
          value: "http://switchboard-be${DEPLOY_SUFFIX}:8080"
        volumeMounts:
        - name: branding
          mountPath: /branding
          readOnly: true
        resources:
          requests:
            memory: "${FE_MEMORY_REQUEST}"
            cpu: "${FE_CPU_REQUEST}"
          limits:
            memory: "${FE_MEMORY_LIMIT}"
            cpu: "${FE_CPU_LIMIT}"
        readinessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 10
          timeoutSeconds: 3
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 30
          timeoutSeconds: 5
          failureThreshold: 3
      volumes:
      - name: branding
        configMap:
          name: switchboard-branding
          optional: true
---
apiVersion: v1
kind: Service
metadata:
  name: switchboard-fe${DEPLOY_SUFFIX}
  namespace: ${NAMESPACE}
  labels:
    app: switchboard
    component: frontend
    env: ${ENVIRONMENT}
spec:
  selector:
    app: switchboard
    component: frontend
    env: ${ENVIRONMENT}
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name: http
