#!/usr/bin/env bash # Vérifie l'image de production (deploy/) avec le site assemblé (make package) : # construit l'image en local, la lance, et contrôle ce que reçoit un # navigateur (pages, types MIME du moteur, compression, version). set -euo pipefail cd "$(dirname "$0")/.." unset MAKEFLAGS MFLAGS MAKELEVEL make -s package >/dev/null image="ustagammon/site-test:local" docker build -q -t "$image" build/deploy >/dev/null container="$(docker run -d --rm -p 127.0.0.1::80 "$image")" trap 'docker stop "$container" >/dev/null' EXIT port="$(docker port "$container" 80/tcp | head -n1 | sed 's/.*://')" base="http://127.0.0.1:$port" # Caddy démarre en une fraction de seconde : on attend qu'il réponde. for _ in $(seq 1 50); do curl -sf -o /dev/null "$base/" && break sleep 0.1 done errors=0 report() { echo "$1" errors=$((errors + 1)) } # check check() { local headers headers="$(curl -s -D - -o /dev/null "$base/$1")" grep -qE "^HTTP/1.1 200" <<<"$headers" || report "/$1 : pas de réponse 200" grep -qiE "^Content-Type: $2" <<<"$headers" || report "/$1 : type MIME attendu $2" } check "" "text/html" check "bench.html" "text/html" check "engine-worker.mjs" "text/javascript" check "wasm/engine.mjs" "text/javascript" check "wasm/engine.wasm" "application/wasm" check "wasm/engine.data" "application/octet-stream" check "version.json" "application/json" curl -s -H "Accept-Encoding: gzip" -D - -o /dev/null "$base/wasm/engine.data" \ | grep -qi "^Content-Encoding: gzip" || report "/wasm/engine.data : pas de compression gzip" curl -s -D - -o /dev/null "$base/" | grep -qi "^Cache-Control: no-cache" \ || report "/ : en-tête Cache-Control absent" [ "$(curl -s "$base/version.json" | sed -n 's/.*"commit": "\([0-9a-f]*\)".*/\1/p')" = "$(git rev-parse HEAD)" ] \ || report "version.json ne donne pas le commit courant" [ "$errors" -eq 0 ]