文件
hyb-oa/scripts/qa/run-pwa-cross-version-upgrade.sh
T

67 行
1.8 KiB
Bash
可执行文件

#!/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"