Skip to content

Merge pull request #40 from RustyRory/dev #7

Merge pull request #40 from RustyRory/dev

Merge pull request #40 from RustyRory/dev #7

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é !"