name: ArgoCD Sync on Main on: push: branches: - main paths: - 'k8s/**' jobs: argocd-sync: runs-on: docker steps: - name: Checkout uses: actions/checkout@v4 - name: Install ArgoCD CLI run: | curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64 chmod +x /usr/local/bin/argocd - name: Configure ArgoCD Access env: ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }} ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_AUTH_TOKEN }} run: | echo "Configured ArgoCD credentials" - name: Sync Root Application env: ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }} ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_AUTH_TOKEN }} run: | echo "=== Syncing homelab-root ===" argocd app sync homelab-root --force argocd app wait homelab-root --timeout 5m - name: Check Sync Status env: ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }} ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_AUTH_TOKEN }} run: | echo "=== ArgoCD Applications Status ===" argocd app list -o table # Verify root app is synced STATUS=$(argocd app get homelab-root -o jsonpath='{.status.syncStatus}') if [ "$STATUS" != "Synced" ]; then echo "❌ Root app sync failed: $STATUS" exit 1 fi echo "✓ Root app synced successfully" - name: Health Check env: ARGOCD_SERVER: ${{ secrets.ARGOCD_SERVER }} ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_AUTH_TOKEN }} run: | echo "=== Checking Application Health ===" argocd app get homelab-root -o wide