#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" CLIENT_DIR="$ROOT_DIR/client" TEMP_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/hyb-pwa-cross-version.XXXXXX")" BUILD_A_DIR="$TEMP_ROOT/build-a" BUILD_B_DIR="$TEMP_ROOT/build-b" BUILD_A_LOG="$TEMP_ROOT/build-a.log" BUILD_B_LOG="$TEMP_ROOT/build-b.log" BUILD_A_SHA="111111111111" BUILD_B_SHA="222222222222" cleanup() { local original_status="$?" trap - EXIT if [[ -d "$TEMP_ROOT" ]]; then find "$TEMP_ROOT" -depth -delete fi exit "$original_status" } trap cleanup EXIT build_candidate() { local label="$1" local build_sha="$2" local output_dir="$3" local log_file="$4" local build_status=0 ( cd "$CLIENT_DIR" VITE_BUILD_SHA="$build_sha" npx vite build --outDir "$output_dir" --emptyOutDir ) >"$log_file" 2>&1 || build_status="$?" if [[ "$build_status" -ne 0 ]]; then local log_lines=0 log_lines="$(wc -l <"$log_file" | tr -d ' ')" echo "[pwa-cross-version][ERROR] build=${label} exit=${build_status} log_lines=${log_lines}" >&2 exit "$build_status" fi if [[ ! -f "$output_dir/index.html" || ! -f "$output_dir/sw.js" ]]; then echo "[pwa-cross-version][ERROR] build=${label} required_artifact_missing" >&2 exit 1 fi echo "[pwa-cross-version] build=${label} status=PASS" } build_candidate "A" "$BUILD_A_SHA" "$BUILD_A_DIR" "$BUILD_A_LOG" build_candidate "B" "$BUILD_B_SHA" "$BUILD_B_DIR" "$BUILD_B_LOG" ( cd "$CLIENT_DIR" PWA_BUILD_A_DIR="$BUILD_A_DIR" \ PWA_BUILD_B_DIR="$BUILD_B_DIR" \ PWA_BUILD_A_SHA="$BUILD_A_SHA" \ PWA_BUILD_B_SHA="$BUILD_B_SHA" \ npx playwright test tests/e2e/pwa-cross-version-upgrade.spec.ts \ --workers=1 \ --retries=0 \ --reporter=list ) echo "[pwa-cross-version] status=PASS path=A_TO_B_SAME_CONTEXT"