fix: 补齐候选诊断环境与证据保护(09-06-release-gate-integrity)

这个提交包含在:
2026-09-08 07:21:19 +08:00
父节点 66f25b1fa8
当前提交 99167127b5
共修改 33 个文件,包含 2915 行新增和 67 行删除
+58 -2
查看文件
@@ -4,8 +4,17 @@ set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
SERVER_DIR="$ROOT_DIR/server"
CLIENT_DIR="$ROOT_DIR/client"
source "$ROOT_DIR/scripts/qa/pwa-cross-version-fixture.sh"
MODE="${1:-}"
if [[ "$MODE" == "full-local" || "$MODE" == "full-local-diagnostic" ]]; then
if [[ -z "${QA_ENVIRONMENT_CONTEXT:-}" ]]; then
exec node "$ROOT_DIR/scripts/qa/full-local-environment.mjs" "$MODE"
fi
node "$ROOT_DIR/scripts/qa/full-local-environment.mjs" verify
elif [[ "$MODE" == "__full-local-diagnostic-stage" ]]; then
node "$ROOT_DIR/scripts/qa/full-local-environment.mjs" verify
fi
QA_HOST="${QA_HOST:-127.0.0.1}"
QA_PORT_INPUT="${QA_PORT:-}"
QA_PORT="${QA_PORT_INPUT:-3000}"
@@ -56,6 +65,10 @@ Usage: bash scripts/qa/run-web-gates.sh <smoke-local|full-local|auth-security-lo
QA_DB_CLIENT=host|docker
QA_DB_DOCKER_CONTAINER / QA_DOCKER_USE_SG=1
QA_DB_PREFIX / QA_DB_NAME / QA_KEEP_DB
QA_FULL_REPORT_DIR full-local 独立发现、构建日志与浏览器结果目录
full-local-diagnostic 仅本地诊断,始终 PARTIAL/退出 2,无发布资格
QA_DIAGNOSTIC_REASON / QA_DIAGNOSTIC_OPERATOR / QA_DIAGNOSTIC_APPROVAL_REF
QA_DIAGNOSTIC_REPORT_DIR 本次诊断专用空目录;禁止覆盖历史报告
QA_SKIP_CLIENT_BUILD=1 复用已有 client/dist(低内存远程机排查视觉问题时使用)
QA_ISSUE_ID / VISUAL_MATRIX_REPORT_DIR
LIVE_SMOKE_BASE_URL / LIVE_SMOKE_ADMIN_* / LIVE_SMOKE_EMPLOYEE_* / LIVE_EXPECT_WECOM_STATUS
@@ -283,6 +296,9 @@ qa_cleanup() {
if ! qa_cleanup_server; then
cleanup_status=1
fi
if ! pwa_cleanup_fixture; then
cleanup_status=1
fi
if [[ "$QA_DB_CREATED" == "1" && "$MODE" != "smoke-live" ]]; then
if ! qa_dropdb; then
cleanup_status=1
@@ -534,10 +550,31 @@ qa_run_smoke_local() {
)
}
qa_prepare_full_inputs() {
QA_FULL_REPORT_DIR="${QA_FULL_REPORT_DIR:-$ROOT_DIR/artifacts/qa-flow/full-local/$QA_RUN_ID}"
mkdir -p "$QA_FULL_REPORT_DIR"
QA_FULL_REPORT_DIR="$(cd "$QA_FULL_REPORT_DIR" && pwd)"
echo ">>> 准备 full-local PWA 双构建输入"
pwa_prepare_fixture "$CLIENT_DIR" "$QA_FULL_REPORT_DIR"
echo ">>> 发现并核对全部非 manual Playwright spec"
(
cd "$CLIENT_DIR"
pwa_with_fixture env E2E_MODE=local \
PLAYWRIGHT_JSON_OUTPUT_FILE="$QA_FULL_REPORT_DIR/discovery.json" \
QA_VISUAL_OUTPUT_DIR="$QA_FULL_REPORT_DIR/visual" \
npx playwright test --list --retries=0 --reporter=json \
> "$QA_FULL_REPORT_DIR/discovery.stdout.log" 2> "$QA_FULL_REPORT_DIR/discovery.stderr.log"
)
node "$ROOT_DIR/scripts/qa/verify-full-local-discovery.mjs" "$QA_FULL_REPORT_DIR/discovery.json" \
> "$QA_FULL_REPORT_DIR/discovery-coverage.json"
}
qa_run_full_local() {
qa_select_port
export JOBS_ENABLED="${JOBS_ENABLED:-false}"
qa_export_app_env
qa_prepare_full_inputs
qa_prepare_db
echo ">>> 执行 server Prisma 校验"
@@ -578,11 +615,22 @@ qa_run_full_local() {
export JOBS_ENABLED="${JOBS_ENABLED_FOR_E2E:-true}"
qa_start_server
qa_run_full_browser
}
qa_run_full_browser() {
if [[ -n "${QA_DIAGNOSTIC_STAGE:-}" ]]; then QA_DIAGNOSTIC_PHASE=environment; fi
node "$ROOT_DIR/scripts/qa/browser-environment-probe.mjs" guest "$QA_BASE_URL"
node "$ROOT_DIR/scripts/qa/full-local-environment.mjs" report-guest > "$QA_FULL_REPORT_DIR/environment-before-browser.json"
if [[ -n "${QA_DIAGNOSTIC_STAGE:-}" ]]; then QA_DIAGNOSTIC_PHASE=test; fi
echo ">>> 执行 Playwright full E2E"
(
cd "$CLIENT_DIR"
rm -rf test-results playwright-report
E2E_MODE=local npm run test:e2e:full
pwa_with_fixture env E2E_MODE=local \
PLAYWRIGHT_JSON_OUTPUT_FILE="$QA_FULL_REPORT_DIR/playwright-results.json" \
QA_VISUAL_OUTPUT_DIR="$QA_FULL_REPORT_DIR/visual" \
PLAYWRIGHT_HTML_OUTPUT_DIR="$QA_FULL_REPORT_DIR/playwright-report" PLAYWRIGHT_HTML_OPEN=never \
npm run test:e2e:full -- "$@" --retries=0 --reporter=list,json,html --output="$QA_FULL_REPORT_DIR/test-results"
)
}
@@ -759,6 +807,14 @@ case "$MODE" in
trap qa_cleanup EXIT
qa_run_smoke_local
;;
full-local-diagnostic)
qa_require_cmd node
node "$ROOT_DIR/scripts/qa/full-local-diagnostic.mjs"
;;
__full-local-diagnostic-stage)
source "$ROOT_DIR/scripts/qa/full-local-diagnostic-stage.sh"
qa_run_diagnostic_stage "${2:-}"
;;
full-local)
qa_require_cmd curl
qa_require_db_client