#!/usr/bin/env bash PWA_FIXTURE_ROOT="" pwa_build_candidate() { local client_dir="$1" local label="$2" local build_sha="$3" local output_dir="$4" local log_file="$5" local build_status=0 ( cd "$client_dir" NODE_ENV=production VITE_BUILD_SHA="$build_sha" npx vite build --outDir "$output_dir" --emptyOutDir ) > "$log_file" 2>&1 || build_status="$?" if [[ "$build_status" -ne 0 ]]; then echo "[pwa-cross-version][ERROR] build=${label} exit=${build_status}" >&2 return "$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 return 1 fi echo "[pwa-cross-version] build=${label} status=PASS" } pwa_prepare_fixture() { local client_dir="$1" local report_dir="$2" if [[ -n "$PWA_FIXTURE_ROOT" ]]; then echo "[pwa-cross-version][ERROR] fixture_already_owned" >&2 return 1 fi mkdir -p "$report_dir" || return "$?" PWA_FIXTURE_ROOT="$(mktemp -d "${TMPDIR:-/tmp}/hyb-pwa-cross-version.XXXXXX")" || return "$?" PWA_BUILD_A_DIR="$PWA_FIXTURE_ROOT/build-a" PWA_BUILD_B_DIR="$PWA_FIXTURE_ROOT/build-b" PWA_BUILD_A_SHA="111111111111" PWA_BUILD_B_SHA="222222222222" pwa_build_candidate "$client_dir" A "$PWA_BUILD_A_SHA" "$PWA_BUILD_A_DIR" "$report_dir/pwa-build-a.log" || return "$?" pwa_build_candidate "$client_dir" B "$PWA_BUILD_B_SHA" "$PWA_BUILD_B_DIR" "$report_dir/pwa-build-b.log" || return "$?" } pwa_with_fixture() { if [[ -z "$PWA_FIXTURE_ROOT" || ! -f "${PWA_BUILD_A_DIR:-}/sw.js" || ! -f "${PWA_BUILD_B_DIR:-}/sw.js" ]]; then echo "[pwa-cross-version][ERROR] fixture_not_ready" >&2 return 1 fi PWA_BUILD_A_DIR="$PWA_BUILD_A_DIR" PWA_BUILD_B_DIR="$PWA_BUILD_B_DIR" \ PWA_BUILD_A_SHA="$PWA_BUILD_A_SHA" PWA_BUILD_B_SHA="$PWA_BUILD_B_SHA" "$@" } pwa_cleanup_fixture() { if [[ -z "$PWA_FIXTURE_ROOT" ]]; then return 0 fi if [[ "$(basename "$PWA_FIXTURE_ROOT")" != hyb-pwa-cross-version.* ]]; then echo "[pwa-cross-version][ERROR] fixture_cleanup_refused" >&2 return 1 fi if [[ -d "$PWA_FIXTURE_ROOT" ]]; then find "$PWA_FIXTURE_ROOT" -xdev -depth -delete || return "$?" fi PWA_FIXTURE_ROOT="" }