67 行
1.8 KiB
Bash
可执行文件
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"
|