Two corrections on top of the naming pass, both found by checking the live cluster rather than the source. The rename had silently changed the user-facing annotation key from argocd.argoproj.io/sync-wave to cd.argoproj.io/sync-wave — 63 live Applications carry the old key, so deploying that would have ignored every sync-wave and broken fleet deploy ordering. The key is now cd.hanzo.ai/*, and universe 575650286 moves the ApplicationSet template that stamps it, so the controller regenerates all 63 consistently. The API group in code said argoproj.io/v1alpha1 in 157 places while the cluster has served apps.hanzo.ai/v1alpha1 since 2026-07-23 (the CRDs are applications.apps.hanzo.ai). Code now matches what is actually served. The legacy applications.argoproj.io/app-name label had ZERO live users, so it went with the rest. foo.argoproj.io test fixtures became foo.example.com — arbitrary test domains should not carry a vendor name. go build ./... exit 0. Co-authored-by: Hanzo Dev <[email protected]>
2.1 KiB
The subscription to Hanzo CD application events can be defined using notifications.apps.hanzo.ai/subscribe.<trigger>.<service>: <recipient> annotation.
For example, the following annotation subscribes two Slack channels to notifications about every successful synchronization of the Hanzo CD application:
apiVersion: apps.hanzo.ai/v1alpha1
kind: Application
metadata:
annotations:
notifications.apps.hanzo.ai/subscribe.on-sync-succeeded.slack: my-channel1;my-channel2
Annotation key consists of following parts:
on-sync-succeeded- trigger nameslack- notification service namemy-channel1;my-channel2- a semicolon separated list of recipients
You can create subscriptions for all applications of the Hanzo CD project by adding the same annotation to AppProject CRD:
apiVersion: apps.hanzo.ai/v1alpha1
kind: AppProject
metadata:
annotations:
notifications.apps.hanzo.ai/subscribe.on-sync-succeeded.slack: my-channel1;my-channel2
Default Subscriptions
The subscriptions might be configured globally in the cd-notifications-cm ConfigMap using subscriptions field. The default subscriptions
are applied to all applications. The trigger and applications might be configured using the
triggers and selector fields:
apiVersion: v1
kind: ConfigMap
metadata:
name: cd-notifications-cm
data:
# Contains centrally managed global application subscriptions
subscriptions: |
# subscription for on-sync-status-unknown trigger notifications
- recipients:
- slack:test2
- email:[email protected]
triggers:
- on-sync-status-unknown
# subscription restricted to applications with matching labels only
- recipients:
- slack:test3
selector: test=true
triggers:
- on-sync-status-unknown
If you want to use webhook in subscriptions, you need to store the custom name to recipients.
apiVersion: v1
kind: ConfigMap
metadata:
name: cd-notifications-cm
data:
service.webhook.<webhook-name>: |
(snip)
subscriptions: |
- recipients:
- <webhook-name>
triggers:
- on-sync-status-unknown