fix(ci): le controle de restauration cree ses propres donnees

Le test de fumee supprime son arbre a la fin : le controle partait d'une base
sans arbre. Il cree maintenant un compte, un arbre et une personne par l'API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
IliesAllaliandClaude Opus 5.5 committed 2026-10-19 00:11:28 +02:00
1 parent 217d503e20
commit 6fa86d6716
2 files changed
+18 -5

No files matched your search

+1 -1
View File
@@ -186,7 +186,7 @@ jobs:
- name: Sauvegarde puis restauration
run: |
set -euo pipefail
bash tools/docker-restore-check.sh
bash tools/docker-restore-check.sh http://localhost:8080
bash tools/docker-smoke.sh http://localhost:8080
# Un second front qui joint l'API par le nom de son conteneur (API_UPSTREAM), comme sur Umbrel.
+17 -4
View File
@@ -2,12 +2,14 @@
# Sauvegarde puis restauration d'une installation compose avec les commandes du README, et contrôle
# que rien ne s'est perdu : comptes, arbres, personnes, migrations et fichiers des médias.
#
# Usage : bash tools/docker-restore-check.sh (depuis le dossier du dépôt, installation démarrée)
# La CI le lance après le test de fumée, qui a déjà créé un compte et un arbre.
# Usage : bash tools/docker-restore-check.sh [http://localhost:8080] (depuis le dossier du dépôt, installation démarrée)
# Nécessite curl et jq. La CI le lance après le test de fumée.
# Attention : la base et les médias sont effacés puis restaurés. Jamais sur une installation en service.
set -euo pipefail
cd "$(dirname "$0")/.."
BASE_URL="${1:-http://localhost}"
BASE_URL="${BASE_URL%/}"
DB_USER="${POSTGRES_USER:-parenthese}"
DB_NAME="${POSTGRES_DB:-parenthese}"
MEDIA_VOLUME="parenthese_media"
@@ -18,10 +20,21 @@ fail() { echo "ÉCHEC : $*" >&2; exit 1; }
sql() { docker compose exec -T db psql -U "$DB_USER" -d "$DB_NAME" -v ON_ERROR_STOP=1 -At -c "$1"; }
counts() { sql "SELECT (SELECT count(*) FROM users) || ' ' || (SELECT count(*) FROM trees) || ' ' || (SELECT count(*) FROM persons) || ' ' || (SELECT count(*) FROM _prisma_migrations)"; }
# Données à retrouver : un compte, un arbre et une personne créés par l'API, un fichier dans les médias
api() {
local method="$1" path="$2" body="$3" token="${4:-}"
curl -fsS --max-time 30 -X "$method" "$BASE_URL$path" -H 'Content-Type: application/json' \
${token:+-H "Authorization: Bearer $token"} --data "$body"
}
stamp="$(date +%s)-$RANDOM"
token="$(api POST /auth/register "$(jq -nc --arg e "restore-$stamp@example.com" '{firstName: "Test", email: $e, password: "restauration-test-1"}')" | jq -r .token)"
tree_id="$(api POST /trees "$(jq -nc --arg s "restore-$stamp" '{name: "Arbre de restauration", slug: $s, visitorPassword: "visiteur-test-1", contributorPassword: "contributeur-test-1"}')" "$token" | jq -r .tree.id)"
api POST "/trees/$tree_id/persons" '{"firstName": "Jeanne", "lastName": "Test"}' "$token" >/dev/null
docker run --rm -v "$MEDIA_VOLUME":/data alpine sh -c 'echo "souvenir de test" > /data/restore-check.txt'
before="$(counts)"
read -r users trees _ _ <<< "$before"
[ "$users" -ge 1 ] && [ "$trees" -ge 1 ] || fail "il faut au moins un compte et un arbre avant la sauvegarde (lancer d'abord tools/docker-smoke.sh)"
read -r users trees persons _ <<< "$before"
[ "$users" -ge 1 ] && [ "$trees" -ge 1 ] && [ "$persons" -ge 1 ] || fail "données de test absentes avant la sauvegarde ($before)"
echo "Avant : $before (comptes, arbres, personnes, migrations)"
# Sauvegarde, mêmes commandes que le README (fichiers écrits dans un dossier temporaire)