உள்ளடக்கத்திற்குச் செல்லவும்

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

PushWard பயன்பாட்டைத் திறக்கவும் → Settings → Integration Key உங்கள் இயல்புநிலை hlk_ key ஐக் கண்டறியவும்.

இந்த integration க்கு ஒரு பிரத்யேக key ஐ உருவாக்க:

  1. Settings → Manage Keys க்குச் செல்லவும்
  2. + ஐத் தட்டவும்
  3. பெயரை அமைக்கவும் (எ.கா. "ArgoCD"), தேர்வு செய்யவும் , முழு நிர்வாகம் scope, மேலும் இவற்றிற்கு கட்டுப்படுத்தவும்argocd-*
  4. உருவாக்கப்பட்ட hlk_ key ஐ நகலெடுக்கவும்

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.