feat(deploy): configure vps-monitor deployment #8
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: Trigger update via vps-monitor | |
| run: | | |
| curl -sf -c cookies.txt \ | |
| -X POST "${{ secrets.VPS_MONITOR_URL }}/auth/login" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"username":"${{ secrets.VPS_MONITOR_USER }}","password":"${{ secrets.VPS_MONITOR_PASS }}"}' \ | |
| | grep -q '"ok":true' || { echo "Échec login vps-monitor"; exit 1; } | |
| curl -sf -b cookies.txt \ | |
| -X POST "${{ secrets.VPS_MONITOR_URL }}/api/deploy/update" \ | |
| -H "Content-Type: application/json" \ | |
| -d '{"name":"Lucky7"}' \ | |
| | grep -q '"ok":true' || { echo "Échec update vps-monitor"; exit 1; } | |
| echo "Déploiement déclenché : http://78.138.58.95/Lucky7/" |