#!/usr/bin/env bash # Joue une partie complète par l'interface dans Chromium et Firefox sans # écran (tests/browser/play.mjs), sur le site servi par l'image de production # construite en local, comme tests/test_site.sh. Les captures d'écran vont # dans build/browser-shots/. # # Outils : l'image de Playwright (navigateurs) et le paquet playwright, # installé une fois par npm dans build/browser-tools/ (réseau nécessaire la # première fois). Lent (plusieurs minutes) : lancé par make test-browser, # pas par make test. set -euo pipefail cd "$(dirname "$0")/.." image="${PLAYWRIGHT_IMAGE:?lancer via make test-browser}" browsers="${BROWSERS:-chromium firefox}" unset MAKEFLAGS MFLAGS MAKELEVEL make -s package >/dev/null site_image="ustagammon/site-test:local" docker build -q -t "$site_image" build/deploy >/dev/null container="$(docker run -d --rm -p 127.0.0.1::80 "$site_image")" trap 'docker stop "$container" >/dev/null' EXIT port="$(docker port "$container" 80/tcp | head -n1 | sed 's/.*://')" # Le paquet playwright, à la version des navigateurs de l'image. tools=build/browser-tools version="${image##*:v}" version="${version%%-*}" if [ ! -f "$tools/node_modules/playwright/package.json" ]; then mkdir -p "$tools" docker run --rm --user "$(id -u):$(id -g)" -e HOME=/tmp -v "$PWD/$tools:/tools" -w /tools \ "$image" npm install --no-audit --no-fund --save-exact "playwright@$version" >/dev/null fi rm -rf build/browser-shots mkdir -p build/browser-shots cp tests/browser/play.mjs "$tools/" status=0 for browser in $browsers; do # Réseau de l'hôte : le site est sur 127.0.0.1. Le service worker # demande un contexte sûr, ce qu'est localhost. docker run --rm --init --ipc=host --network host --user "$(id -u):$(id -g)" -e HOME=/tmp \ -e TRACE -v "$PWD/$tools:/tools" -v "$PWD/build/browser-shots:/shots" -w /tools "$image" \ node play.mjs "http://localhost:$port/" "$browser" /shots || status=1 done exit "$status"