a cache for slack profile pictures and emojis
at main 2.4 kB view raw
1name: Deploy Cachet 2 3on: 4 push: 5 branches: 6 - main 7 workflow_dispatch: 8 9jobs: 10 deploy: 11 runs-on: ubuntu-latest 12 steps: 13 - uses: actions/checkout@v3 14 15 - name: Setup Tailscale 16 uses: tailscale/github-action@v3 17 with: 18 oauth-client-id: ${{ secrets.TS_OAUTH_CLIENT_ID }} 19 oauth-secret: ${{ secrets.TS_OAUTH_SECRET }} 20 tags: tag:ci 21 use-cache: "true" 22 23 - name: Configure SSH 24 run: | 25 mkdir -p ~/.ssh 26 echo "StrictHostKeyChecking no" >> ~/.ssh/config 27 28 - name: Deploy to server 29 run: | 30 ssh cachet@terebithia << 'EOF' 31 cd /var/lib/cachet/app 32 git fetch --all 33 git reset --hard origin/main 34 bun install 35 sudo /run/current-system/sw/bin/systemctl restart cachet.service 36 EOF 37 38 - name: Wait for service to start 39 run: sleep 10 40 41 - name: Health check 42 run: | 43 HEALTH_URL="https://cachet.dunkirk.sh/health?detailed=true" 44 MAX_RETRIES=6 45 RETRY_DELAY=5 46 47 for i in $(seq 1 $MAX_RETRIES); do 48 echo "Health check attempt $i/$MAX_RETRIES..." 49 50 RESPONSE=$(curl -s -w "\n%{http_code}" "$HEALTH_URL" || echo "000") 51 HTTP_CODE=$(echo "$RESPONSE" | tail -n1) 52 BODY=$(echo "$RESPONSE" | sed '$d') 53 54 if [ "$HTTP_CODE" = "200" ]; then 55 STATUS=$(echo "$BODY" | jq -r '.status // "unknown"') 56 57 if [ "$STATUS" = "healthy" ]; then 58 echo "✅ Service is healthy" 59 echo "$BODY" | jq '.' 60 exit 0 61 elif [ "$STATUS" = "degraded" ]; then 62 echo "⚠️ Service is degraded but responding" 63 echo "$BODY" | jq '.' 64 exit 0 65 else 66 echo "⚠️ Service returned HTTP 200 but status is: $STATUS" 67 echo "$BODY" | jq '.' 68 fi 69 fi 70 71 echo "❌ Health check failed with HTTP $HTTP_CODE" 72 echo "$BODY" 73 74 if [ $i -lt $MAX_RETRIES ]; then 75 echo "Retrying in ${RETRY_DELAY}s..." 76 sleep $RETRY_DELAY 77 fi 78 done 79 80 echo "❌ Health check failed after $MAX_RETRIES attempts" 81 exit 1