apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: awoooi-prod
  namespace: argocd
  # ADR-069 Sprint B-2: ArgoCD 管控 awoooi-prod namespace
  # 建立時間: 2026-04-11 (台北時間)
  # 建立者: Claude Sonnet 4.6
  annotations:
    argocd.argoproj.io/sync-wave: "0"
spec:
  project: default

  source:
    repoURL: http://192.168.0.110:3001/wooo/awoooi.git
    targetRevision: main
    path: k8s/awoooi-prod

    # kustomize 模式
    kustomize:
      # image tag 由 CD pipeline 寫入 kustomization.yaml 後觸發 ArgoCD sync
      # 不在此設定 images，避免覆蓋 CD 注入的 tag
      {}

  destination:
    server: https://kubernetes.default.svc
    namespace: awoooi-prod

  syncPolicy:
    automated:
      # prune: 刪除 Git 中已移除的資源
      prune: true
      # selfHeal: Git 與 K8s 狀態偏離時自動修復（防止手動 kubectl 污染）
      selfHeal: true
      # 允許在尚未同步時也自動同步
      allowEmpty: false
    syncOptions:
      # 命名空間不存在時自動建立
      - CreateNamespace=true
      # 使用 server-side apply（支援 CRD 大型資源）
      - ServerSideApply=true
      # 不強制替換 secrets（避免誤刪敏感資料）
      - RespectIgnoreDifferences=true
    retry:
      limit: 3
      backoff:
        duration: 10s
        factor: 2
        maxDuration: 3m

  # 忽略差異項目
  # ADR-073 修復 (2026-04-12 ogt): 移除 Deployment image ignoreDifferences
  #   原設計意圖: 防止 drift 偵測；但副作用是 CD 更新 kustomization.yaml 後 ArgoCD 不更新 image
  #   現在 kustomization.yaml newTag 是 image 更新的唯一驅動，必須讓 ArgoCD 讀取並 apply
  ignoreDifferences:
    # secrets 由 CD 管理，不進入 ArgoCD drift 偵測
    - group: ""
      kind: Secret
      jsonPointers:
        - /data
