#!/usr/bin/env bash # Construit l'image de production (build/deploy, voir make package) sous une # étiquette propre à ce dépôt, et la lance. À sourcer depuis la racine du # dépôt ; définit site_image, container et port, et arrête le conteneur puis # supprime l'image à la sortie du script. # # Plusieurs copies de travail (worktrees) peuvent lancer leurs tests en même # temps : avec une étiquette commune, docker échouait (« parent snapshot ... # does not exist »). Le suffixe est un hachage court du chemin du dépôt. site_image="ustagammon/site-test:$(pwd -P | sha1sum | cut -c1-12)" docker build -q -t "$site_image" build/deploy >/dev/null container="$(docker run -d --rm -p 127.0.0.1::80 "$site_image")" # docker rm -f, et non docker stop : avec --rm, stop rend la main avant que # le conteneur soit supprimé, et l'image serait encore utilisée. site_cleanup() { docker rm -f "$container" >/dev/null 2>&1 || true docker rmi "$site_image" >/dev/null 2>&1 || true } trap site_cleanup EXIT port="$(docker port "$container" 80/tcp | head -n1 | sed 's/.*://')" export site_image container port