কনটেন্টে যান

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.