The problem:
ArgoCD showed the app as Progressing forever. No error, no sync failure — just spinning. The pods were actually running fine on the cluster.
The fix:
# Check what ArgoCD thinks is happening
kubectl describe application my-app -n argocd | grep -A20 "Health Status"
# The issue: a Deployment had a custom health check annotation that ArgoCD
# couldn't evaluate — it kept waiting for "healthy" status that never came.
# Fix: add ignoreDifferences or force a health override in ArgoCD app:
kubectl patch application my-app -n argocd --type merge -p '
{
"spec": {
"ignoreDifferences": [
{
"group": "apps",
"kind": "Deployment",
"jsonPointers": ["/status"]
}
]
}
}'
# Or force a hard refresh to reset the stuck state:
argocd app get my-app --hard-refreshWhy it happens:
ArgoCD evaluates resource health using Lua scripts. If a resource has a status field ArgoCD doesn't recognize (custom operators, some CRDs), it stays in Progressing instead of marking Healthy. Hard refresh clears the cached state and re-evaluates.