name: SgeUpdated Deploy on: push: branches: [ "main" ] workflow_dispatch: concurrency: group: sgeupdated-deploy-${{ github.ref }} cancel-in-progress: true jobs: deploy-frontend: if: contains(github.event.head_commit.message, '[frontend]') || github.event_name == 'workflow_dispatch' runs-on: ubuntu-22.04 steps: - name: Deploy Frontend over SSH uses: appleboy/ssh-action@v1.0.3 env: PROJECT_DIR: /home/ubuntu/sgeUpdated FRONTEND_DIR: /home/ubuntu/sgeUpdated/sge-frontend SERVICE: sgeupdated-frontend SMOKE_URL: http://127.0.0.1:3000 with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} envs: PROJECT_DIR,FRONTEND_DIR,SERVICE,SMOKE_URL script_stop: true script: | set -euo pipefail echo "==== Frontend Deploy ====" cd "$FRONTEND_DIR" git fetch origin main git checkout -B main origin/main echo "Frontend repo now: $(git rev-parse --short HEAD)" cd "$PROJECT_DIR" echo ":: Rebuild & restart $SERVICE" docker compose up -d --build "$SERVICE" echo ":: Health check (retry up to 60s)" for i in $(seq 1 20); do if curl -fsSI --max-time 3 "$SMOKE_URL" >/dev/null; then echo "Frontend healthy ✅" break fi echo "Waiting..." docker compose logs --tail=50 "$SERVICE" || true sleep 3 done docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' deploy-backend: if: contains(github.event.head_commit.message, '[backend]') || github.event_name == 'workflow_dispatch' runs-on: ubuntu-22.04 steps: - name: Deploy Backend over SSH uses: appleboy/ssh-action@v1.0.3 env: PROJECT_DIR: /home/ubuntu/sgeUpdated BACKEND_DIR: /home/ubuntu/sgeUpdated/sge-backend SERVICE: sgeupdated-backend SMOKE_URL: http://127.0.0.1:8080/actuator/health with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} envs: PROJECT_DIR,BACKEND_DIR,SERVICE,SMOKE_URL script_stop: true script: | set -euo pipefail echo "==== Backend Deploy ====" cd "$BACKEND_DIR" git fetch origin main git checkout -B main origin/main echo "Backend repo now: $(git rev-parse --short HEAD)" cd "$PROJECT_DIR" echo ":: Rebuild & restart $SERVICE" docker compose up -d --build "$SERVICE" echo ":: Health check (retry up to 60s)" for i in $(seq 1 20); do if curl -fsSI --max-time 3 "$SMOKE_URL" >/dev/null; then echo "Backend healthy ✅" break fi echo "Waiting..." docker compose logs --tail=50 "$SERVICE" || true sleep 3 done docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'