完善借款、编号、付款与预算并发及验收(09-06-release-gate-integrity)
汇总已落盘的借款本金与还款、兼容历史编号的周期化编号、付款责任与回单核验、报销进度和排序、PWA/采购事务、错误原因与日期校验及ERP退役。 统一共享预算池锁序和锁后判断,恢复差旅原预算选择,补原因码固定夹具及反向完整性检查。 纳入配套迁移、测试、受管QA、分层验收合同、规约及任务记录;原始证据留在ignored artifacts。 关联任务:09-17-company-loan-principal-repayment、09-17-erp-exclusive-retirement、09-18-reimbursement-periodic-numbering、09-08-reimbursement-payment-closeout、09-18-local-concurrency-product-fixes、09-19-budget-pool-concurrency、09-05-error-explainability-payment-readiness。 预算补审由Claude定向验证2文件928项通过,原4446/28及r6结果仍仅对应各自历史输入;本轮未重跑测试。 完整新候选门禁、R1真实入口接入与12项公网义务仍开放。生产编号未启用、差旅仍冻结;不推送、不部署,不宣称发布资格。
这个提交包含在:
@@ -6,13 +6,12 @@ ARTIFACT_ROOT="${RELEASE_GATE_ARTIFACT_DIR:-${ROOT_DIR}/artifacts/release-gate/$
|
||||
MODE="${1:-all}"
|
||||
CURRENT_STAGE=""
|
||||
|
||||
mkdir -p "$ARTIFACT_ROOT"
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: bash scripts/qa/run-release-gate.sh <all|static|smoke-local|full-local|project-wide|deploy|ci-release|r66-trialrun|help>
|
||||
Usage: bash scripts/qa/run-release-gate.sh <verify-candidate|all|static|smoke-local|full-local|project-wide|deploy|ci-release|r66-trialrun|help>
|
||||
|
||||
说明:
|
||||
verify-candidate 仅 static + 完整受管 full-local,生成共享回执;绝不部署
|
||||
static 运行部署契约、server Prisma 校验、client typecheck/build
|
||||
smoke-local 运行本地网页 smoke 门禁
|
||||
full-local 运行本地全量门禁(server regression + client full E2E)
|
||||
@@ -28,6 +27,8 @@ Usage: bash scripts/qa/run-release-gate.sh <all|static|smoke-local|full-local|pr
|
||||
LIVE_SMOKE_* 透传给 deploy.sh 与 live smoke
|
||||
PROJECT_WIDE_SKIP_BUSINESS_FLOW=1 跳过业务流 E2E
|
||||
PROJECT_WIDE_SKIP_VISUAL=1 跳过项目级视觉 E2E
|
||||
PROJECT_WIDE_SKIP_REASON / PROJECT_WIDE_SKIP_OPERATOR / PROJECT_WIDE_SKIP_APPROVAL_REF
|
||||
skip 仅限有批准记录的 project-wide 诊断,PARTIAL/退出2
|
||||
DEPLOY_SERVER / REMOTE_DIR / REMOTE_ENV_FILE / SYNC_ENV
|
||||
COMPOSE_PROJECT_NAME / POSTGRES_DATA_DIR / STORAGE_HOST_DIR / DEPLOY_DATA_MODE
|
||||
USAGE
|
||||
@@ -54,7 +55,13 @@ run_stage() {
|
||||
shift
|
||||
CURRENT_STAGE="$stage_name"
|
||||
echo ">>> [release-gate] ${stage_name}"
|
||||
if [[ "$MODE" == "verify-candidate" ]]; then
|
||||
node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" stage-start "$ARTIFACT_ROOT" "$stage_name"
|
||||
fi
|
||||
"$@"
|
||||
if [[ "$MODE" == "verify-candidate" ]]; then
|
||||
node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" stage-end "$ARTIFACT_ROOT" "$stage_name" 0
|
||||
fi
|
||||
}
|
||||
|
||||
stage_static() {
|
||||
@@ -125,10 +132,40 @@ stage_deploy() {
|
||||
bash "$ROOT_DIR/deploy/trialrun/deploy.sh"
|
||||
}
|
||||
|
||||
# This entry does not install enforcement in any existing deployment path.
|
||||
finish_candidate() {
|
||||
local original_status=$? receipt_status=0
|
||||
trap - EXIT ERR INT TERM
|
||||
node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" finish "$ARTIFACT_ROOT" "$original_status" || receipt_status=$?
|
||||
if (( original_status )); then exit "$original_status"; fi
|
||||
exit "$receipt_status"
|
||||
}
|
||||
|
||||
if [[ "$MODE" != "help" && "$MODE" != "-h" && "$MODE" != "--help" ]]; then
|
||||
# Validate before static, remote readiness or deployment side effects.
|
||||
trap - ERR
|
||||
node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" skip "$ARTIFACT_ROOT" "$MODE"
|
||||
if [[ "$MODE" != "verify-candidate" ]]; then trap handle_error ERR; fi
|
||||
fi
|
||||
|
||||
if [[ "$MODE" != "verify-candidate" ]]; then mkdir -p "$ARTIFACT_ROOT"; fi
|
||||
|
||||
case "$MODE" in
|
||||
help|-h|--help)
|
||||
usage
|
||||
;;
|
||||
verify-candidate)
|
||||
node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" init "$ARTIFACT_ROOT"
|
||||
trap finish_candidate EXIT
|
||||
trap 'exit 130' INT
|
||||
trap 'exit 143' TERM
|
||||
unset QA_ENVIRONMENT_CONTEXT QA_DIAGNOSTIC_REPORT_DIR QA_DIAGNOSTIC_STAGE
|
||||
QA_FULL_REPORT_DIR="$(node "$ROOT_DIR/scripts/qa/release-gate-result.mjs" full-path "$ARTIFACT_ROOT")"
|
||||
export QA_FULL_REPORT_DIR
|
||||
run_stage static stage_static
|
||||
run_stage full-local stage_full_local
|
||||
exit 0
|
||||
;;
|
||||
static)
|
||||
run_stage static stage_static
|
||||
;;
|
||||
@@ -170,5 +207,10 @@ case "$MODE" in
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ "$MODE" == "project-wide" && ( "${PROJECT_WIDE_SKIP_BUSINESS_FLOW:-0}" == "1" || "${PROJECT_WIDE_SKIP_VISUAL:-0}" == "1" ) ]]; then
|
||||
echo "[release-gate][PARTIAL] 诊断跳过不具备发布资格"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo "[release-gate][PASS] 模式 ${MODE} 通过"
|
||||
echo "[release-gate] 产物目录:${ARTIFACT_ROOT}"
|
||||
|
||||
在新工单中引用
屏蔽一个用户