文件
hyb-oa/scripts/qa/full-local-diagnostic-stage.sh

82 行
2.9 KiB
Bash

#!/usr/bin/env bash
qa_diagnostic_cleanup() {
local command_status=$?
local cleanup_status=0
local owned_server="$QA_SERVER_OWNED"
trap - EXIT
qa_cleanup_server || cleanup_status=1
if [[ "$owned_server" == "1" ]]; then
qa_wait_port_free 15 || cleanup_status=1
fi
if [[ "$QA_DB_CREATED" == "1" ]]; then
qa_dropdb || cleanup_status=1
local remaining
remaining="$(qa_psql -Atc "SELECT count(*) FROM pg_database WHERE datname = '$QA_DB_NAME'")" || cleanup_status=1
[[ "$remaining" == "0" ]] || cleanup_status=1
fi
node -e 'require("node:fs").writeFileSync(process.argv[1], JSON.stringify({phase:process.argv[2],commandExit:Number(process.argv[3]),cleanupExit:Number(process.argv[4]),database:process.argv[5]}))' \
"$QA_DIAGNOSTIC_STAGE_DIR/outcome.json" "$QA_DIAGNOSTIC_PHASE" "$command_status" "$cleanup_status" "$QA_DB_NAME"
if [[ "$command_status" != "0" ]]; then exit "$command_status"; fi
exit "$cleanup_status"
}
qa_run_diagnostic_stage() {
local stage="$1"
[[ -d "${QA_DIAGNOSTIC_STAGE_DIR:-}" && "$QA_DB_NAME" =~ ^hyb_oa_diag_[a-z0-9_]+$ ]] || exit 2
[[ "$QA_DB_HOST" == "127.0.0.1" && "$QA_DB_CLIENT" == "host" && "$QA_KEEP_DB" == "0" ]] || exit 2
[[ -n "${QA_DIAGNOSTIC_REASON:-}" && -n "${QA_DIAGNOSTIC_OPERATOR:-}" && -n "${QA_DIAGNOSTIC_APPROVAL_REF:-}" ]] || exit 2
QA_DIAGNOSTIC_PHASE=prepare
trap qa_diagnostic_cleanup EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
qa_require_cmd node
qa_require_cmd npm
qa_select_port
qa_export_app_env
case "$stage" in
inputs)
qa_prepare_full_inputs
node -e 'require("node:fs").writeFileSync(process.argv[1], JSON.stringify({root:process.argv[2],buildA:process.argv[3],buildB:process.argv[4],shaA:process.argv[5],shaB:process.argv[6]}))' \
"$QA_DIAGNOSTIC_STAGE_DIR/pwa-fixture.json" "$PWA_FIXTURE_ROOT" "$PWA_BUILD_A_DIR" "$PWA_BUILD_B_DIR" "$PWA_BUILD_A_SHA" "$PWA_BUILD_B_SHA"
;;
tools)
cd "$SERVER_DIR"
npm run prisma:generate
npm run prisma:check-generated
npm run prisma:validate
;;
server-unit)
cd "$SERVER_DIR"
QA_DIAGNOSTIC_PHASE=test
npm test
;;
typecheck)
cd "$CLIENT_DIR"
QA_DIAGNOSTIC_PHASE=test
npx tsc --noEmit --pretty false --extendedDiagnostics
;;
client-build)
qa_build_client
;;
workflow-actions|server-regressions|browser)
qa_require_cmd curl
qa_require_db_client
qa_prepare_db
if [[ "$stage" == "browser" ]]; then export JOBS_ENABLED="${JOBS_ENABLED_FOR_E2E:-true}"; else export JOBS_ENABLED=false; fi
qa_start_server
QA_DIAGNOSTIC_PHASE=test
cd "$SERVER_DIR"
case "$stage" in
workflow-actions) ./scripts/regression-workflow-actions.sh ;;
server-regressions) ./scripts/regression-all.sh ;;
browser)
PWA_FIXTURE_ROOT="$QA_DIAGNOSTIC_PWA_ROOT"
qa_run_full_browser --trace=on
;;
esac
;;
*) exit 2 ;;
esac
}