#!/usr/bin/env bash # Runs the browser suites against a running InkNote. # # ./e2e/run.sh # all suites # ./e2e/run.sh editor drawing # only these # # Needs the dev stack up (docker compose -f docker-compose.dev.yml up -d) and an # admin account to create throwaway users with — marc/geheim123 by default, # override with INKNOTE_ADMIN / INKNOTE_ADMIN_PASS. set -uo pipefail cd "$(dirname "$0")" IMAGE="mcr.microsoft.com/playwright:v1.49.0-noble" URL="${INKNOTE_URL:-http://localhost:3000}" SUITES=("$@") [ ${#SUITES[@]} -eq 0 ] && SUITES=(admin editor search-attachments history drawing export conflict pdf) mkdir -p shots if [ ! -d node_modules ]; then echo "→ installing playwright once" docker run --rm -v "$PWD:/w" -w /w "$IMAGE" npm install --no-audit --no-fund >/dev/null fi if ! curl -sf -o /dev/null "$URL"; then echo "✗ $URL is not answering — start the stack first:" echo " docker compose -f docker-compose.dev.yml up -d --build" exit 1 fi failed=() for s in "${SUITES[@]}"; do echo echo "═══ $s ═══" docker run --rm --network host \ -v "$PWD:/w" -v "$PWD/shots:/out" -w /w \ -e INKNOTE_URL="$URL" \ -e INKNOTE_ADMIN="${INKNOTE_ADMIN:-marc}" \ -e INKNOTE_ADMIN_PASS="${INKNOTE_ADMIN_PASS:-geheim123}" \ "$IMAGE" node "$s.mjs" || failed+=("$s") done echo if [ ${#failed[@]} -eq 0 ]; then echo "═══ all suites passed ═══" else echo "═══ FAILED: ${failed[*]} ═══" exit 1 fi