#!/usr/bin/env bash set -euo pipefail : "${OPENAPI_SCHEMA_URL:=https://cfw-auth.bowong.cc/api/auth/open-api/generate-schema}" : "${OPENAPI_SCHEMA:=reports/openapi/cfw-auth-openapi.json}" : "${API_BASE_URL:?Set API_BASE_URL, for example https://cfw-auth.bowong.cc/api/auth or http://localhost:8788/api/auth}" : "${REPORT_DIR:=reports/schemathesis}" : "${MAX_EXAMPLES:=25}" : "${TEST_SEED:=12345}" : "${REQUEST_TIMEOUT:=10}" : "${SCHEMATHESIS_PHASES:=examples,coverage}" : "${SCHEMATHESIS_CHECKS:=all}" mkdir -p "$(dirname "$OPENAPI_SCHEMA")" "$REPORT_DIR" curl -fsSL "$OPENAPI_SCHEMA_URL" -o "$OPENAPI_SCHEMA" if command -v npx >/dev/null 2>&1; then npx --yes @redocly/cli lint "$OPENAPI_SCHEMA" fi AUTH_ARGS=() if [[ -n "${API_TOKEN:-}" ]]; then AUTH_ARGS=(-H "Authorization: Bearer ${API_TOKEN}") fi SCHEMATHESIS_CMD=() if command -v schemathesis >/dev/null 2>&1; then SCHEMATHESIS_CMD=(schemathesis) elif command -v uvx >/dev/null 2>&1; then SCHEMATHESIS_CMD=(uvx schemathesis) else echo "Install schemathesis or uv first." >&2 exit 127 fi "${SCHEMATHESIS_CMD[@]}" run "$OPENAPI_SCHEMA" \ --url "$API_BASE_URL" \ --checks "$SCHEMATHESIS_CHECKS" \ --phases "$SCHEMATHESIS_PHASES" \ --max-examples "$MAX_EXAMPLES" \ --seed "$TEST_SEED" \ --request-timeout "$REQUEST_TIMEOUT" \ --report junit,har,vcr \ --report-dir "$REPORT_DIR" \ "${AUTH_ARGS[@]}"