مواد پر جائیں

ArgoCD

ArgoCD ایپلیکیشن سنکس کو اپنے iPhone Lock Screen پر Live Activity کے طور پر دیکھیں — Syncing سے Rolling out ہوتے ہوئے Deployed تک تین مراحل کی پائپ لائن، جس میں سنک کی ناکامیاں اور ہیلتھ ریگریشنز ریئل ٹائم میں نمایاں ہوتی ہیں۔

معلومات

ArgoCD delivers through the hosted Relay — point ArgoCD's built-in notifications at relay.pushward.app/argocd with your integration key. No container to deploy and no self-hosting.

Get Your Integration Key

اپنی ڈیفالٹ hlk_ کلید تلاش کرنے کے لیے PushWard ایپ کھولیں → Settings → Integration Key۔

اس انٹیگریشن کے لیے ایک مخصوص کلید بنانے کے لیے:

  1. Settings → Manage Keys پر جائیں
  2. + پر ٹیپ کریں
  3. نام سیٹ کریں (مثلاً "ArgoCD")، منتخب کریں , مکمل انتظام دائرہ کار، اور محدود کریں اِن تکargocd-*
  4. بنائی گئی hlk_ کلید کاپی کریں

How It Works

ArgoCD's notifications controller posts a small JSON body to the relay on each lifecycle event. The relay maps them onto one steps Live Activity per application — a three-step pipeline:

EventStep
sync-running1/3 — Syncing
sync-succeeded2/3 — Rolling out
deployed3/3 — Deployed (ends the activity)
sync-failedSync Failed
health-degradedDegraded (transient warning during rollout)

The activity slug is derived from the app name (the pushward-server app becomes argocd-pushward-server), so repeated syncs of the same app reuse one activity instead of stacking up. Fast syncs that finish within the relay's grace period (10 seconds by default) are suppressed entirely, so a quick no-op sync never wakes your phone.

Configure ArgoCD Notifications

First store your hlk_ key in argocd-notifications-secret so it never lands in a committed manifest:

argocd-notifications-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
stringData:
  pushward-key: hlk_YOUR_INTEGRATION_KEY

Then add the PushWard webhook service, one template per event, and the matching triggers to argocd-notifications-cm. Each template sends the JSON body the relay expects (app, event, revision, repo_url) with the event name as a literal string:

argocd-notifications-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-notifications-cm
data:
  service.webhook.pushward: |
    url: https://relay.pushward.app/argocd
    headers:
    - name: Authorization
      value: Bearer $pushward-key
    - name: Content-Type
      value: application/json
  template.pushward-sync-running: |
    webhook:
      pushward:
        method: POST
        body: |
          {"app":"{{.app.metadata.name}}","event":"sync-running","revision":"{{.app.status.sync.revision}}","repo_url":"{{.app.spec.source.repoURL}}"}
  template.pushward-sync-succeeded: |
    webhook:
      pushward:
        method: POST
        body: |
          {"app":"{{.app.metadata.name}}","event":"sync-succeeded","revision":"{{.app.status.sync.revision}}","repo_url":"{{.app.spec.source.repoURL}}"}
  template.pushward-deployed: |
    webhook:
      pushward:
        method: POST
        body: |
          {"app":"{{.app.metadata.name}}","event":"deployed","revision":"{{.app.status.sync.revision}}","repo_url":"{{.app.spec.source.repoURL}}"}
  template.pushward-sync-failed: |
    webhook:
      pushward:
        method: POST
        body: |
          {"app":"{{.app.metadata.name}}","event":"sync-failed","revision":"{{.app.status.sync.revision}}","repo_url":"{{.app.spec.source.repoURL}}"}
  template.pushward-health-degraded: |
    webhook:
      pushward:
        method: POST
        body: |
          {"app":"{{.app.metadata.name}}","event":"health-degraded","revision":"{{.app.status.sync.revision}}","repo_url":"{{.app.spec.source.repoURL}}"}
  trigger.on-pushward-sync-running: |
    - when: app.status.operationState != nil and app.status.operationState.phase in ['Running']
      oncePer: app.status.operationState.startedAt
      send: [pushward-sync-running]
  trigger.on-pushward-sync-succeeded: |
    - when: app.status.operationState != nil and app.status.operationState.phase in ['Succeeded']
      oncePer: app.status.operationState.startedAt
      send: [pushward-sync-succeeded]
  trigger.on-pushward-deployed: |
    - when: app.status.operationState != nil and app.status.operationState.phase in ['Succeeded'] and app.status.health.status == 'Healthy'
      oncePer: app.status.operationState.startedAt
      send: [pushward-deployed]
  trigger.on-pushward-sync-failed: |
    - when: app.status.operationState != nil and app.status.operationState.phase in ['Error', 'Failed']
      oncePer: app.status.operationState.startedAt
      send: [pushward-sync-failed]
  trigger.on-pushward-health-degraded: |
    - when: app.status.health.status == 'Degraded'
      send: [pushward-health-degraded]
معلومات

oncePer: app.status.operationState.startedAt makes every sync fire the full event sequence — without it ArgoCD deduplicates repeat notifications and later syncs never reach your phone.

Finally, subscribe the applications you want to track — either per Application or on the ArgoCD project to cover everything in it:

application.yaml
metadata:
  annotations:
    notifications.argoproj.io/subscribe.on-pushward-sync-running.pushward: ""
    notifications.argoproj.io/subscribe.on-pushward-sync-succeeded.pushward: ""
    notifications.argoproj.io/subscribe.on-pushward-deployed.pushward: ""
    notifications.argoproj.io/subscribe.on-pushward-sync-failed.pushward: ""
    notifications.argoproj.io/subscribe.on-pushward-health-degraded.pushward: ""
💡 ٹِپ

Trigger a sync of any subscribed application and watch it move through Syncing, Rolling out, and Deployed on your Lock Screen. If nothing arrives, check the notifications controller logs — a wrong event string is reported by the relay as an unknown event.