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:
co-authored by
Claude Opus 5.5
parent
6d4ff4e7b4
commit
7fd23031ca
+18
@@ -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
@@ -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.
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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.
|
||||
@@ -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
@@ -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
@@ -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 ]
|
||||
Executable
+22
@@ -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; }
|
||||
Reference in New Issue
Block a user