Skip to content

Merge pull request #2316 from Giveth/hotfix/trusted-create-user-rate-… #766

Merge pull request #2316 from Giveth/hotfix/trusted-create-user-rate-…

Merge pull request #2316 from Giveth/hotfix/trusted-create-user-rate-… #766

name: master-pipeline
on:
push:
branches:
- master
jobs:
run-linters:
name: Run linters
runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Set up Node.js
uses: actions/setup-node@v5
with:
node-version: 20.11.0
# ESLint and Prettier must be in `package.json`
- name: Install Node.js dependencies
run: npm ci
- name: Run linters
uses: wearerequired/lint-action@v2
with:
eslint: true
#prettier: true
continue_on_error: true
publish:
# needs: test
runs-on: ubuntu-latest
if: github.event_name == 'push'
permissions:
contents: read
packages: write
steps:
- name: Check out the repo
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Login to GitHub Container Registry
run: echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Build image and push to GitHub Packages
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
push: true
pull: true
no-cache: true
tags: |
ghcr.io/giveth/impact-graph:master
ghcr.io/giveth/impact-graph:${{ github.sha }}
deploy:
needs: publish
runs-on: ubuntu-latest
steps:
- name: SSH and Redeploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
cd giveth-all
docker compose pull
rollout-deploy-1:
needs: deploy
runs-on: ubuntu-latest
steps:
- name: SSH and Redeploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
cd giveth-all
## Update each backend service one by one
## First Deployment (images were pulled earlier)
docker compose up -d --no-deps --force-recreate impact-graph-ql1
docker compose up -d --no-deps --force-recreate impact-graph-jobs
echo "First deployment phase triggered. Deep health checks deferred to verify-health job."
rollout-deploy-2:
needs: rollout-deploy-1
runs-on: ubuntu-latest
steps:
- name: SSH and Redeploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
cd giveth-all
## Update each backend service one by one
## Second Deployment (images were pulled earlier)
docker compose up -d --no-deps --force-recreate impact-graph-ql2
echo "Second deployment phase triggered. Health checks deferred to verify-health job."
rollout-deploy-3:
needs: rollout-deploy-2
runs-on: ubuntu-latest
steps:
- name: SSH and Redeploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
cd giveth-all
## Update each backend service one by one
## Third Deployment (images were pulled earlier)
docker compose up -d --no-deps --force-recreate impact-graph-ql3
echo "Third deployment phase triggered. Health checks deferred to verify-health job."
rollout-deploy-4:
needs: rollout-deploy-3
runs-on: ubuntu-latest
steps:
- name: SSH and Redeploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
cd giveth-all
## Update each backend service one by one
## Fourth Deployment (images were pulled earlier)
docker compose up -d --no-deps --force-recreate impact-graph-ql4
echo "Fourth deployment phase triggered. Health checks deferred to verify-health job."
verify-health:
needs:
- rollout-deploy-1
- rollout-deploy-2
- rollout-deploy-3
- rollout-deploy-4
runs-on: ubuntu-latest
steps:
- name: Wait for services to stabilize
run: sleep 180
- name: SSH and Verify Health
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_HOST_ALL }}
username: ${{ secrets.PROD_USERNAME_ALL }}
key: ${{ secrets.PROD_PRIVATE_KEY_ALL }}
port: ${{ secrets.SSH_PORT }}
script: |
set -e
cd giveth-all
services=("impact-graph-ql1" "impact-graph-ql2" "impact-graph-ql3" "impact-graph-ql4")
for svc in "${services[@]}"; do
echo "Checking health for $svc ..."
ok=0
for i in {1..12}; do
status=$(docker inspect --format='{{json .State.Health.Status}}' "$svc" 2>/dev/null || echo '""')
if [ "$status" = "\"healthy\"" ]; then
echo "$svc is healthy"
ok=1
break
fi
echo "Current health: $status; waiting..."
sleep 10
done
if [ $ok -ne 1 ]; then
echo "::error::$svc did not reach healthy status"
exit 1
fi
done
echo "Checking impact-graph-jobs is running ..."
job_status=$(docker inspect --format='{{json .State.Status}}' impact-graph-jobs 2>/dev/null || echo '""')
if [ "$job_status" != "\"running\"" ]; then
echo "::error::impact-graph-jobs is not running (status: $job_status)"
exit 1
fi
echo "All services healthy."
docker image prune -f