Skip to the content.

A Kubernetes controller that closes a bookkeeping gap in Kargo (≤ v1.10): Kargo Stages only display the last Freight promoted through Kargo, so when someone commits an image-tag bump directly to the GitOps repository and ArgoCD syncs it, the cluster runs the new version while Kargo keeps showing the stale one.

kargo-argocd-observer watches ArgoCD Application resources, detects when the deployed image tag no longer matches the Stage’s current Freight, finds the Freight that corresponds to what is actually deployed, and creates a Kargo Promotion — the only supported way to move a Stage’s state — so Kargo converges on reality. The Promotion is a git no-op (the tag is already in git); hand-bumps become auditable <stage>-observer-* entries in promotion history instead of invisible drift.

It requires zero per-application configuration: it keys off the kargo.akuity.io/authorized-stage annotation that Kargo’s ArgoCD integration already requires. See How it works for the full design.

Quick start

Install the Helm chart (published as an OCI artifact). Chart defaults are scoped for a safe rollout: observeMode=opt-in (only annotated-and-opted-in Applications are considered) and dryRun=true (intended Promotions are logged and emitted as Events, never created):

helm install kargo-argocd-observer oci://ghcr.io/mkutlak/charts/kargo-argocd-observer \
  --namespace kargo-observer --create-namespace

Annotate one Application to opt it in:

kubectl annotate application <app> -n <namespace> kargo-observer.kutlak.cc/observe=true

Watch the logs and the Events emitted on Stages; once the Promotions it would create match expectations, let it act for real:

helm upgrade kargo-argocd-observer oci://ghcr.io/mkutlak/charts/kargo-argocd-observer \
  --namespace kargo-observer --reuse-values --set dryRun=false

Once you trust the controller with everything (not just the Applications you opted in), widen scope to every annotated Application, unless ignored:

helm upgrade kargo-argocd-observer oci://ghcr.io/mkutlak/charts/kargo-argocd-observer \
  --namespace kargo-observer --reuse-values --set observeMode=opt-out

Documentation

Document Contents
How it works Architecture, design constraints, RBAC, limitations
Reference Flags, metrics, Events, annotations, labels
Chart values All Helm chart configuration options
Development Toolchain, quality gate, testing
Releases Application and chart release processes

Source, issues, and releases live on GitHub.