# ArgoCD Application — Auto-generated by hmcmkit infra-architect # GitOps: Git Repo → ArgoCD Sync → Kubernetes Apply apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: ${project_name}-${environment} namespace: argocd labels: app.kubernetes.io/managed-by: hmcmkit finalizers: - resources-finalizer.argocd.argoproj.io spec: project: default source: repoURL: ${git_repo_url} targetRevision: ${target_branch} path: infra/k8s/overlays/${environment} helm: valueFiles: - values.yaml destination: server: https://kubernetes.default.svc namespace: ${environment} syncPolicy: automated: prune: true selfHeal: true allowEmpty: false syncOptions: - CreateNamespace=true - PrunePropagationPolicy=foreground retry: limit: 3 backoff: duration: 5s factor: 2 maxDuration: 3m --- # Argo Rollout for Canary Deploy (Production only) apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: ${project_name}-api namespace: ${environment} spec: replicas: 3 strategy: canary: steps: - setWeight: 10 - pause: { duration: 2m } - setWeight: 25 - pause: { duration: 2m } - setWeight: 50 - pause: { duration: 5m } - setWeight: 100 canaryService: ${project_name}-api-canary stableService: ${project_name}-api-stable analysis: templates: - templateName: success-rate startingStep: 2 args: - name: service-name value: ${project_name}-api selector: matchLabels: app: ${project_name}-api template: metadata: labels: app: ${project_name}-api spec: containers: - name: api image: ${ecr_registry}/${project_name}:latest ports: - containerPort: 3000 resources: requests: { cpu: "250m", memory: "256Mi" } limits: { cpu: "500m", memory: "512Mi" } livenessProbe: httpGet: { path: /health, port: 3000 } initialDelaySeconds: 10 readinessProbe: httpGet: { path: /ready, port: 3000 } initialDelaySeconds: 5