Squelette du dépôt : Makefile, tests, lint, crédits, journal

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Pierre MARTIN
2026-11-02 12:56:46 +01:00
co-authored by Claude Opus 5.5
parent 6d4ff4e7b4
commit 7fd23031ca
9 changed files with 250 additions and 1 deletions
+18
View File
@@ -0,0 +1,18 @@
# Artefacts de build
/build/
# Éditeurs et système
*.swp
*~
.DS_Store
.vscode/
.idea/
# Android (pour plus tard)
.gradle/
local.properties
*.apk
*.aab
# Web (pour plus tard)
node_modules/
+27
View File
@@ -0,0 +1,27 @@
# Crédits
Ustagammon est un logiciel libre sous licence GPLv3 (voir `LICENSE`).
Les contenus pédagogiques (leçons, textes) sont sous licence CC BY-SA 4.0.
## Moteur
- **GNU Backgammon** — https://www.gnu.org/software/gnubg/
Copyright © les auteurs de GNU Backgammon. Licence GPLv3 ou ultérieure.
Ustagammon s'appuie entièrement sur son moteur pour les règles, les coups,
le videau et les évaluations.
Les projets suivants sont étudiés comme points de départ ; ils seront crédités
précisément ici dès que du code en sera repris :
- **gnubg-nn**, bibliothèque d'évaluation de GNU Backgammon —
https://git.savannah.gnu.org/cgit/gnubg/gnubg-nn.git
- **CBG**, portage Android de GNU Backgammon (GPLv3) —
https://github.com/clavierhaus/gnubg-android
## Outils de développement
- **ShellCheck** (GPLv3), analyse des scripts shell, utilisé via Docker.
## Remerciements
À l'Atelier du Huit, café associatif de Cugnaux, et à Philippe, qui y transmet le jeu.
+44
View File
@@ -0,0 +1,44 @@
# Makefile d'Ustagammon : toutes les opérations du projet passent par ici.
# Chaque cible documentée par « ## » apparaît dans `make help`.
SHELL := /bin/bash
.DEFAULT_GOAL := help
# Machine de développement modeste : jamais plus de deux tâches en parallèle.
MAKEFLAGS += -j2 --no-print-directory
BUILD_DIR := build
# Outils lancés dans Docker (aucune installation sur le PC).
SHELLCHECK_IMAGE := koalaman/shellcheck-alpine:v0.10.0
export SHELLCHECK_IMAGE
.PHONY: help setup build test lint deploy clean
help: ## Liste les commandes disponibles
@echo "Ustagammon : commandes disponibles"
@grep -E '^[a-zA-Z0-9_-]+:.*## ' $(MAKEFILE_LIST) \
| awk 'BEGIN { FS = ":.*## " } { printf " make %-12s %s\n", $$1, $$2 }'
setup: ## Installe la chaîne d'outils (images Docker) ; sans effet si déjà fait
@command -v docker >/dev/null || { echo "Docker est requis : sudo apt install docker.io"; exit 1; }
@docker image inspect $(SHELLCHECK_IMAGE) >/dev/null 2>&1 \
|| docker pull $(SHELLCHECK_IMAGE)
@echo "Chaîne d'outils prête."
build: ## Compile le moteur (si nécessaire) puis l'application
@echo "Rien à compiler pour l'instant : le moteur arrive à l'étape 0a."
test: ## Lance tous les tests
@tests/run.sh
lint: ## Vérifie le style et les erreurs courantes
@tests/lint.sh
deploy: ## Installe l'application sur le téléphone (pas encore disponible)
@echo "Pas encore disponible : le socle (PWA ou Android) sera choisi à la fin de l'étape 0."
@exit 1
clean: ## Supprime les artefacts de build (garde les images Docker)
rm -rf $(BUILD_DIR)
+25 -1
View File
@@ -1,3 +1,27 @@
# Ustagammon
Ustagammon est une application mobile de backgammon, gratuite, libre (GPLv3) et entièrement hors ligne, qui apprend le jeu du premier lancer de dés jusqu'au niveau expert.
<<<<<<< HEAD
Ustagammon est une application mobile de backgammon, gratuite, libre (GPLv3) et entièrement hors ligne, qui apprend le jeu du premier lancer de dés jusqu'au niveau expert.
=======
Application de backgammon libre et hors ligne pour apprendre le jeu, du premier
lancer de dés jusqu'au niveau expert, avec le moteur GNU Backgammon.
Projet en cours : étape 0, prototype technique. Le cadrage est dans
`docs/cadrage.md`, les décisions dans `docs/decisions.md`.
## Démarrer
Prérequis : `git`, `make`, `docker` (et `adb` pour le téléphone).
```
make setup # une fois : prépare les outils
make help # liste des commandes
make lint
make test
```
## Licence
Code sous GPLv3 (`LICENSE`), contenus pédagogiques sous CC BY-SA 4.0.
Crédits dans `CREDITS.md`.
>>>>>>> 8398f29 (Squelette du dépôt : Makefile, tests, lint, crédits, journal)
+18
View File
@@ -0,0 +1,18 @@
# Décisions
Les décisions structurantes du projet, la plus récente en bas. Chacune donne son
contexte, le choix, les raisons et ce qu'elle implique.
## 2026-11-01 — Nom de l'application : Ustagammon
**Contexte** : le nom était une question ouverte du cadrage.
**Choix** : Ustagammon (« usta », le maître artisan en turc, et « gammon »).
**Référence** : le brief créatif, https://claude.ai/artifact/36WMwZWqvMxXvSSVBJTgwd
## 2026-11-02 — Outils de lint dans Docker
**Contexte** : la machine de développement doit rester légère ; rien n'est
installé en dehors de Docker, git, make et adb.
**Choix** : ShellCheck (GPLv3) tourne dans l'image `koalaman/shellcheck-alpine`,
version figée, récupérée par `make setup`.
**Conséquence** : `make lint` demande d'avoir lancé `make setup` une fois.
+25
View File
@@ -0,0 +1,25 @@
# Journal
Une entrée datée par session : ce qui a été fait, décidé, et la suite.
## 2026-11-02
**Fait**
- Dépôt initialisé (branche `main`) avec le kit de démarrage : `CLAUDE.md`,
`docs/cadrage.md`, `docs/etape-0.md`, `PROMPTS.md`.
- Nom de l'application reporté partout : Ustagammon (lien vers le brief créatif
dans `CLAUDE.md` et `docs/cadrage.md`).
- Squelette : `Makefile` (help, setup, build, test, lint, deploy, clean),
`LICENSE` (GPLv3), `CREDITS.md`, `README.md`, `.gitignore`, ce journal,
`docs/decisions.md`.
- Premiers tests : contrat du Makefile (`tests/test_makefile.sh`) ; lint du dépôt
(`tests/lint.sh`, avec ShellCheck dans Docker).
**Décidé**
- Les outils de lint tournent dans Docker, comme les autres chaînes d'outils.
**Reste à faire**
- Ajouter le dépôt Gitea comme `origin` et pousser `main`.
- Étape 0a : choisir la source du moteur (gnubg, gnubg-nn ou CBG), à valider.
- `adb` n'est pas installé sur le PC : `sudo apt install adb` avant les tests sur
le téléphone.
Executable
+50
View File
@@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Vérifications de style communes à tout le dépôt :
# - fichiers texte en UTF-8, fins de ligne Unix, sans espaces en fin de ligne,
# terminés par un saut de ligne ;
# - scripts shell analysés par ShellCheck (dans Docker).
set -euo pipefail
cd "$(dirname "$0")/.."
erreurs=0
signaler() {
echo "$1"
erreurs=$((erreurs + 1))
}
# Fichiers suivis par git, plus les nouveaux fichiers non ignorés.
mapfile -t fichiers < <(git ls-files --cached --others --exclude-standard | grep -v '^LICENSE$')
for f in "${fichiers[@]}"; do
[ -f "$f" ] || continue
case "$(file --brief --mime-encoding "$f")" in
binary) continue ;;
us-ascii | utf-8) ;;
*) signaler "$f : encodage autre que UTF-8" ;;
esac
if grep -q $'\r' "$f"; then
signaler "$f : fins de ligne Windows (CRLF)"
fi
if grep -nE '[[:blank:]]+$' "$f" >/dev/null; then
signaler "$f : espaces en fin de ligne (lignes $(grep -nE '[[:blank:]]+$' "$f" | cut -d: -f1 | paste -sd, -))"
fi
if [ -s "$f" ] && [ -n "$(tail -c1 "$f")" ]; then
signaler "$f : pas de saut de ligne final"
fi
done
mapfile -t scripts < <(printf '%s\n' "${fichiers[@]}" | grep -E '\.sh$' || true)
if [ "${#scripts[@]}" -gt 0 ]; then
if ! docker image inspect "${SHELLCHECK_IMAGE:?lancer via make lint}" >/dev/null 2>&1; then
signaler "ShellCheck absent : lancer d'abord make setup"
elif ! docker run --rm -v "$PWD:/src:ro" -w /src "$SHELLCHECK_IMAGE" shellcheck "${scripts[@]}"; then
signaler "ShellCheck a trouvé des problèmes (voir ci-dessus)"
fi
fi
if [ "$erreurs" -gt 0 ]; then
echo "Lint : $erreurs problème(s)."
exit 1
fi
echo "Lint : aucun problème."
Executable
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# Lance tous les tests du projet : chaque fichier tests/test_*.sh est un test.
# Sort en erreur si au moins un test échoue.
set -euo pipefail
cd "$(dirname "$0")/.."
echecs=0
total=0
for t in tests/test_*.sh; do
total=$((total + 1))
if bash "$t"; then
echo "OK $t"
else
echo "ÉCHEC $t"
echecs=$((echecs + 1))
fi
done
echo "$((total - echecs))/$total tests réussis."
[ "$echecs" -eq 0 ]
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Vérifie le contrat du Makefile décrit dans CLAUDE.md :
# toutes les commandes obligatoires existent et apparaissent dans `make help`,
# et `make clean` peut être relancé sans erreur.
set -euo pipefail
cd "$(dirname "$0")/.."
# Lancé depuis `make test` : repartir d'un make indépendant du make parent.
unset MAKEFLAGS MFLAGS MAKELEVEL
aide="$(make help)"
for cible in setup build test lint deploy clean help; do
if ! grep -qE "^ make $cible " <<<"$aide"; then
echo "make help ne mentionne pas « $cible »"
exit 1
fi
done
make clean >/dev/null
make clean >/dev/null
[ ! -e build ] || { echo "make clean n'a pas supprimé build/"; exit 1; }