#!/usr/bin/env bash # 契约闸门:openapi.json 与 packages/apiclient 都必须与源码当前状态一致。 # # scripts/contract-check.sh # spec + 客户端 # scripts/contract-check.sh --spec-only # 只比 openapi.json(需要 cargo) # scripts/contract-check.sh --client-only# 只比生成客户端(需要 pnpm) set -euo pipefail cd "$(dirname "$0")/.." check_spec() { cargo run -q -p kenapi -- openapi --check } check_client() { local snapshot snapshot="$(mktemp -d)" cp -R packages/apiclient "$snapshot/committed" pnpm exec orval if ! diff -ru "$snapshot/committed" packages/apiclient; then echo "packages/apiclient is out of date; run \`just openapi\` to regenerate" >&2 exit 1 fi rm -rf "$snapshot" } case "${1:-all}" in --spec-only) check_spec ;; --client-only) check_client ;; all) check_spec && check_client ;; *) echo "usage: $0 [--spec-only|--client-only]" >&2 exit 2 ;; esac