Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
name: CI

on:
push:
branches-ignore:
- staging # géré par deploy-staging.yml qui inclut ces checks
pull_request:
branches:
- main
- staging
- dev

concurrency:
group: ci-${{ github.ref }}
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 run test:coverage
working-directory: lucky7-app/frontend

- name: Upload coverage
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-report
path: lucky7-app/frontend/coverage/
retention-days: 7

# ─────────────────────────────────────────────
# 3. Tests E2E (Playwright)
# ─────────────────────────────────────────────
test-e2e:
name: Tests E2E
runs-on: ubuntu-latest
needs: [lint, test-unit] # ne lance l'E2E que si lint + unit passent

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
105 changes: 105 additions & 0 deletions .github/workflows/deploy-staging.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,115 @@ on:
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
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ next-env.d.ts
dist/
build/

# ── Tests ─────────────────────────────────────────────────────────────────────
coverage/
playwright-report/
test-results/

# ── TypeScript ────────────────────────────────────────────────────────────────
*.tsbuildinfo

Expand Down
39 changes: 39 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,45 @@ Toutes les modifications notables de ce projet seront documentées dans ce fichi
Le format est basé sur Keep a Changelog et ce projet adhère au Semantic Versioning.

## [Unreleased]
---

## [0.2.0] - 2026-04-08

### Added

* **Phase de lancer — tableau permanent** — tous les joueurs sont affichés dans un tableau dès le début du tour. Les joueurs en attente apparaissent en grisé avec `—`. L'animation des dés se déroule directement dans la ligne du joueur concerné (plus de dés centraux séparés).
* **Phase de prolongation** — même refonte que la phase de lancer : tableau permanent, animation inline, joueurs en attente grisés.
* **Titre dynamique** — le header des phases roll et prolongation affiche en temps réel qui doit lancer (`Au tour de X de lancer` / `X lance les dés…` / `X — Double 1, relance disponible` / `Tous les joueurs ont lancé`).
* **Points des dés** — rayon des points passé de `size × 0.09` (trop petit aux petites tailles) à `9` unités SVG fixes pour une lisibilité constante quelle que soit la taille d'affichage.
* **Règle Relance (Double 1)** — nouvelle règle optionnelle : un joueur qui fait 1•1 peut relancer ses deux dés une fois. Activable dans la configuration de partie. Si le joueur relance, son résultat est remplacé et un badge « Relancé » s'affiche dans le tableau. S'il garde le 1•1, la règle Double classique s'applique.
* **Dialog de configuration des règles (lobby)** — les règles ne sont plus affichées inline dans l'écran de configuration. Un bouton ⚙️ Configurer ouvre un bottom sheet (glisse depuis le bas sur mobile, centré sur desktop) permettant d'activer/désactiver chaque règle. Les règles actives sont résumées sous forme de badges dans le lobby.
* **Dialog des paramètres en jeu (GameScreen)** — un bouton ⚙️ dans le header de chaque phase (annonce, lancer, prolongation, résultats) affiche les règles actives de la partie en cours (✓ vert / ✗ grisé).
* **Pipeline CI GitHub Actions** (`ci.yml`) — déclenché sur chaque push et pull request : lint & format → tests unitaires → tests E2E (les E2E n'attendent que si lint + unit passent).
* **Tests unitaires** — Vitest + Testing Library, 11 tests couvrant `cn`, `generateId` et le composant `RulesPage`.
* **Tests E2E** — Playwright (Chromium), 7 scénarios couvrant l'accueil, la navigation vers les règles, le lobby et le lancement de partie.
* **Formatage** — Prettier intégré avec `.prettierrc.json` et les scripts `format` et `format:check`.

### Changed

* **Déploiement staging** — le job `deploy` est désormais conditionné par les jobs `lint`, `test-unit` et `test-e2e` via `needs`. Un déploiement échoue automatiquement si l'un des checks ne passe pas.
* **Scripts `package.json`** — ajout de `typecheck`, `format`, `format:check`, `test`, `test:watch`, `test:coverage`, `test:e2e`, `test:e2e:ui`.

### Fixed

* **ESLint** — désactivation de `react/no-unescaped-entities` (incompatible avec les apostrophes du français) ; ajout des répertoires `e2e/`, `coverage/`, `playwright-report/` aux ignores.
* **État `lastRolledId`** — supprimé car devenu inutilisé après la refonte du tableau de la phase de lancer.

---

## [0.1.1] - 2026-04-07

### Added

* Environnements : dev / staging
* Pipelines :
* Tests unitaires & e2e
* Lint / format
* Build & déploiement automatique

---

Expand Down
Loading
Loading