Merge pull request #40 from RustyRory/dev #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy to VPS (staging) | |
| on: | |
| push: | |
| branches: | |
| - staging | |
| concurrency: | |
| group: deploy-staging | |
| cancel-in-progress: true | |
| jobs: | |
| # ───────────────────────────────────────────── | |
| # 1. Lint & Format | |
| # ───────────────────────────────────────────── | |
| lint: | |
| name: Lint & Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: lucky7-app/frontend/package-lock.json | |
| - name: Installer les dépendances | |
| run: npm ci | |
| working-directory: lucky7-app/frontend | |
| - name: TypeScript — vérification des types | |
| run: npm run typecheck | |
| working-directory: lucky7-app/frontend | |
| - name: ESLint | |
| run: npm run lint | |
| working-directory: lucky7-app/frontend | |
| - name: Prettier — vérification du format | |
| run: npm run format:check | |
| working-directory: lucky7-app/frontend | |
| # ───────────────────────────────────────────── | |
| # 2. Tests unitaires (Vitest) | |
| # ───────────────────────────────────────────── | |
| test-unit: | |
| name: Tests unitaires | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: lucky7-app/frontend/package-lock.json | |
| - name: Installer les dépendances | |
| run: npm ci | |
| working-directory: lucky7-app/frontend | |
| - name: Vitest | |
| run: npm test | |
| working-directory: lucky7-app/frontend | |
| # ───────────────────────────────────────────── | |
| # 3. Tests E2E (Playwright) | |
| # ───────────────────────────────────────────── | |
| test-e2e: | |
| name: Tests E2E | |
| runs-on: ubuntu-latest | |
| needs: [lint, test-unit] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| cache-dependency-path: lucky7-app/frontend/package-lock.json | |
| - name: Installer les dépendances | |
| run: npm ci | |
| working-directory: lucky7-app/frontend | |
| - name: Installer Playwright (Chromium uniquement) | |
| run: npx playwright install --with-deps chromium | |
| working-directory: lucky7-app/frontend | |
| - name: Build Next.js (prod) | |
| run: npm run build | |
| working-directory: lucky7-app/frontend | |
| - name: Tests Playwright | |
| run: npm run test:e2e | |
| working-directory: lucky7-app/frontend | |
| - name: Upload rapport Playwright | |
| uses: actions/upload-artifact@v4 | |
| if: always() | |
| with: | |
| name: playwright-report | |
| path: lucky7-app/frontend/playwright-report/ | |
| retention-days: 7 | |
| # ───────────────────────────────────────────── | |
| # 4. Déploiement (bloqué par lint + tests) | |
| # ───────────────────────────────────────────── | |
| deploy: | |
| name: Déploiement Lucky7 — staging | |
| runs-on: ubuntu-latest | |
| needs: [lint, test-unit, test-e2e] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Deploy via SSH | |
| uses: appleboy/ssh-action@v1.0.3 | |
| with: | |
| host: ${{ secrets.VPS_HOST }} | |
| username: ${{ secrets.VPS_USER }} | |
| key: ${{ secrets.VPS_SSH_KEY }} | |
| port: 22 | |
| command_timeout: 30m | |
| script: | | |
| set -e | |
| echo "🚀 Déploiement Lucky7 — staging" | |
| REPO_DIR="/var/www/Lucky7" | |
| COMPOSE_FILE="/var/www/docker-compose.yml" | |
| # ── Cloner ou mettre à jour le repo ────────────────────────── | |
| if [ ! -d "$REPO_DIR/.git" ]; then | |
| echo "📥 Premier déploiement — clonage du repo..." | |
| git clone https://github.com/${{ github.repository }}.git "$REPO_DIR" | |
| git -C "$REPO_DIR" checkout staging | |
| else | |
| echo "🔄 Mise à jour du code..." | |
| git -C "$REPO_DIR" fetch origin staging | |
| git -C "$REPO_DIR" reset --hard origin/staging | |
| fi | |
| echo "✅ Code à jour" | |
| # ── Vérifier que le .env backend existe ─────────────────────── | |
| ENV_FILE="$REPO_DIR/lucky7-app/backend/.env" | |
| if [ ! -f "$ENV_FILE" ]; then | |
| echo "❌ Fichier .env manquant : $ENV_FILE" | |
| echo " Créez-le manuellement sur le VPS avant de déployer." | |
| exit 1 | |
| fi | |
| echo "✅ Fichier .env backend trouvé" | |
| # ── Rebuild et restart uniquement les services Lucky7 ───────── | |
| echo "🔨 Build des images..." | |
| docker-compose -f "$COMPOSE_FILE" build lucky7-back lucky7-front | |
| echo "🔄 Redémarrage des containers..." | |
| docker-compose -f "$COMPOSE_FILE" up -d --remove-orphans lucky7-back lucky7-front | |
| echo "✅ Containers démarrés" | |
| # ── Nettoyage des images obsolètes ──────────────────────────── | |
| docker image prune -f | |
| # ── Vérification finale ─────────────────────────────────────── | |
| echo "" | |
| echo "📊 État des containers Lucky7 :" | |
| docker ps --filter "name=lucky7-" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | |
| echo "" | |
| echo "🎉 Déploiement terminé !" |