#!/bin/sh set -eu cd "$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)" : "${CI_TEST_DB_URL:?isolated empty MySQL schema URL is required}" case "$CI_TEST_DB_URL" in */flowcenter_ci_invalid\?*|*/flowcenter_ci_invalid_*\?*) ;; *) echo 'Negative guard requires its own invalid test schema' >&2; exit 2 ;; esac log=$(mktemp /tmp/flow-ci-negative.XXXXXX) trap 'rm -f "$log"' EXIT set +e sh ci/test-gate.sh clean package >"$log" 2>&1 code=$? set -e cat "$log" echo "NEGATIVE_MVN_EXIT=$code" [ "$code" -ne 0 ] || { echo 'Empty schema unexpectedly passed' >&2; exit 1; } grep -q 'Schema-validation: missing table' "$log" # 只钉“缺表必须让真实库用例报 error、其余断言不得失败”这一契约,不钉具体用例总数: # 门禁类会随被测类新增用例而变化(2026-10-27 已由 92 增至 101),写死总数会把正常演进变成红灯。 summary=$(sed -n 's/.*Tests run: \([0-9]*\), Failures: \([0-9]*\), Errors: \([0-9]*\), Skipped: \([0-9]*\).*/\1 \2 \3 \4/p' "$log" | tail -1) [ -n "$summary" ] || { echo 'Negative gate produced no Surefire summary' >&2; exit 1; } set -- $summary echo "NEGATIVE_SUMMARY tests=$1 failures=$2 errors=$3 skipped=$4" [ "$1" -gt 0 ] || { echo 'No tests ran' >&2; exit 1; } [ "$2" -eq 0 ] || { echo 'Empty schema caused assertion failures, not schema errors' >&2; exit 1; } [ "$3" -gt 0 ] || { echo 'Empty schema did not produce any schema error' >&2; exit 1; } [ -z "$(find target -maxdepth 1 -name '*.jar' -print -quit 2>/dev/null)" ] || { echo 'Failed gate produced a JAR' >&2; exit 1; } echo 'CI_EMPTY_SCHEMA_FAILURE_GUARD=PASS'