diff --git a/.gitea/workflows/sgeupdated.yml b/.gitea/workflows/sgeupdated.yml index 23de4e8..f60c5e1 100644 --- a/.gitea/workflows/sgeupdated.yml +++ b/.gitea/workflows/sgeupdated.yml @@ -1,57 +1,97 @@ -# .gitea/workflows/sgeupdated.yml -name: sgeUpdated CI/CD +name: SgeUpdated Deploy on: push: - branches: - - main # trigger only when code is merged into main + branches: [ "main" ] + workflow_dispatch: + +concurrency: + group: sgeupdated-deploy-${{ github.ref }} + cancel-in-progress: true jobs: - deploy: - runs-on: ubuntu-latest + deploy-frontend: + if: contains(github.event.head_commit.message, '[frontend]') || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-22.04 steps: - - name: Checkout repo - uses: actions/checkout@v3 - - - name: Deploy over SSH + - 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: | - cd /home/ubuntu/sgeUpdated - git fetch origin main - git reset --hard origin/main + script: | + set -euo pipefail - echo "🔍 Detecting changes..." - CHANGED_FILES=$(git diff --name-only HEAD^ HEAD || true) - echo "Changed files: $CHANGED_FILES" + 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)" - # --- Backend --- - if echo "$CHANGED_FILES" | grep -E "(^|/)sge-backend/"; then - echo "⚙️ Backend changes detected. Rebuilding backend..." - cd sge-backend - mvn clean install -DskipTests - cd .. - docker compose build --no-cache backend - docker compose up -d --force-recreate backend - else - echo "✅ No backend changes detected." - fi + cd "$PROJECT_DIR" + echo ":: Rebuild & restart $SERVICE" + docker compose up -d --build "$SERVICE" - # --- Frontend --- - if echo "$CHANGED_FILES" | grep -E "(^|/)sge-frontend/"; then - echo "⚙️ Frontend changes detected. Rebuilding frontend..." - cd sge-frontend - npm install - npm run build - cd .. - docker compose build --no-cache frontend - docker compose up -d --force-recreate frontend - else - echo "✅ No frontend changes detected." - fi + 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}}'