diff --git a/CLAUDE.md b/CLAUDE.md index c832d03..36b23b9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,6 +24,7 @@ Le `Makefile` est le seul point d'entrée pour les opérations système. Tenir c - `make export-linux` / `make export-windows` : exports dans `build/` - `make screenshot SCENE=… OUT=… ARGS=…` : capture le rendu réel d'une scène dans une fenêtre (outil de développement, ouvre brièvement une fenêtre) - `make export-android` / `make export-macos` / `make export-web` : APK Android (arm64 + x86_64, aussi pour ChromeOS), application macOS universelle (zip, signature ad hoc), version web +- `make serve-web` : exporte puis sert la version web en local (127.0.0.1) et ouvre le navigateur (`tools/serve_web.py`) - `make package` : réexporte puis produit les archives distribuables (Linux, Windows, Android, macOS, ChromeOS ; licence + crédits + notice) et `SHA256SUMS` dans `dist/` ## Conventions de code diff --git a/Makefile b/Makefile index 48a7728..109953c 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ GD_SOURCES := autoload scripts tests .DEFAULT_GOAL := help -.PHONY: help setup import run lint format validate-data test check content-review generate-dictation-audio generate-sounds export-linux export-windows export-android export-macos export-web package screenshot +.PHONY: serve-web help setup import run lint format validate-data test check content-review generate-dictation-audio generate-sounds export-linux export-windows export-android export-macos export-web package screenshot # Liste les commandes : toute cible suivie de « ## description » y figure. help: ## Affiche cette aide @@ -91,3 +91,6 @@ export-macos: import ## Exporte l'application macOS (zip) dans build/macos/ export-web: import ## Exporte la version Web (navigateur, ChromeOS) dans build/web/ mkdir -p build/web $(GODOT_BIN) --headless --path . --export-release "Web" build/web/index.html + +serve-web: export-web ## Exporte puis sert la version web en local et ouvre le navigateur + $(PYTHON) tools/serve_web.py build/web diff --git a/README-EN.md b/README-EN.md index 1d17938..fd29374 100644 --- a/README-EN.md +++ b/README-EN.md @@ -30,6 +30,7 @@ make run # runs the game | `make content-review` | regenerates `docs/review/content-review.md` (content validation document) | | `make generate-dictation-audio` | generates the placeholder dictation audio | | `make help` | lists the available commands | +| `make serve-web` | exports, then serves the web build locally and opens the browser | | `make export-linux` / `make export-windows` / `make export-android` / `make export-macos` / `make export-web` | exports into `build/` | | `make package` | builds the distributable archives in `dist/` (single executable + license + credits) | diff --git a/README.md b/README.md index 774b847..2522e22 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ make run # lance le jeu | `make content-review` | régénère `docs/review/content-review.md` (document de validation du contenu) | | `make generate-dictation-audio` | génère l'audio provisoire des dictées | | `make help` | liste les commandes disponibles | +| `make serve-web` | exporte puis sert la version web en local et ouvre le navigateur | | `make export-linux` / `make export-windows` / `make export-android` / `make export-macos` / `make export-web` | exports dans `build/` | | `make package` | produit les archives distribuables dans `dist/` (exécutable unique + licence + crédits) | diff --git a/docs/testing/manual-checklist.md b/docs/testing/manual-checklist.md index 7dff90a..041b429 100644 --- a/docs/testing/manual-checklist.md +++ b/docs/testing/manual-checklist.md @@ -82,3 +82,4 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a - `make export-macos` : archive vérifiée (structure .app, signature ad hoc) ; **jamais lancée** (pas de Mac). Au premier lancement : clic droit > Ouvrir. - `make export-web` : fichiers générés ; **jamais ouvert dans un navigateur**. Servir `build/web/` avec `python3 -m http.server`, ouvrir dans Chrome, vérifier son (le navigateur exige un premier clic), sauvegarde et plein écran. - Touche Entrée : en dictée et en correction, Entrée valide ; une seconde pression sur Entrée pendant le retour ne doit pas compter une réponse de plus. +- Version web : `make serve-web` (ou `lancer-web.sh` / `lancer-web.bat` de l'archive ChromeOS) ; son confirmé à la main après un clic dans la page (0.9.1). diff --git a/export_presets.cfg b/export_presets.cfg index 07194cd..1da342f 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -71,8 +71,8 @@ gradle_build/use_gradle_build=false package/unique_name="org.deunix.aventuriersdesmots" package/name="Les Aventuriers des mots" package/signed=true -version/code=901 -version/name="0.9.1" +version/code=902 +version/name="0.9.2" architectures/armeabi-v7a=false architectures/arm64-v8a=true architectures/x86=false @@ -107,8 +107,8 @@ script_export_mode=2 binary_format/architecture="universal" application/bundle_identifier="org.deunix.aventuriersdesmots" -application/short_version="0.9.1" -application/version="0.9.1" +application/short_version="0.9.2" +application/version="0.9.2" application/min_macos_version_x86_64="10.12" application/min_macos_version_arm64="11.0" codesign/codesign=1 diff --git a/project.godot b/project.godot index 0a1c0a4..20078de 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Les Aventuriers des mots" -config/version="0.9.1" +config/version="0.9.2" run/main_scene="res://scenes/boot/boot.tscn" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="res://icon.svg" diff --git a/tools/package.sh b/tools/package.sh index ccfaa98..2b6ea9e 100755 --- a/tools/package.sh +++ b/tools/package.sh @@ -84,13 +84,23 @@ stage "${CHROMEOS}" build/android/aventuriers_des_mots.apk \ "stockage privé de l'application, ou du navigateur pour la version web" mkdir -p "dist/${CHROMEOS}/web" cp build/web/* "dist/${CHROMEOS}/web/" +cp tools/serve_web.py "dist/${CHROMEOS}/lancer-web.py" +cat > "dist/${CHROMEOS}/lancer-web.sh" <<'LAUNCH' +#!/usr/bin/env bash +cd "$(dirname "$0")" && exec python3 lancer-web.py +LAUNCH +chmod +x "dist/${CHROMEOS}/lancer-web.sh" +printf '@echo off\r\ncd /d "%%~dp0"\r\npy lancer-web.py || python lancer-web.py\r\n' \ + > "dist/${CHROMEOS}/lancer-web.bat" cat > "dist/${CHROMEOS}/LISEZMOI-WEB.txt" < int: + root = Path(sys.argv[1]) if len(sys.argv) > 1 else Path(__file__).resolve().parent / "web" + if not (root / "index.html").is_file(): + print(f"index.html introuvable dans {root}", file=sys.stderr) + return 1 + handler = functools.partial(http.server.SimpleHTTPRequestHandler, directory=str(root)) + for port in PORTS: + try: + server = http.server.ThreadingHTTPServer(("127.0.0.1", port), handler) + except OSError: + continue + url = f"http://localhost:{port}/index.html" + print(f"Les Aventuriers des mots : {url}") + print("Cliquer une fois dans la page pour activer le son. Ctrl+C pour arreter.") + webbrowser.open(url) + try: + server.serve_forever() + except KeyboardInterrupt: + pass + return 0 + print("Aucun port libre entre 8080 et 8099.", file=sys.stderr) + return 1 + + +if __name__ == "__main__": + sys.exit(main())