Files
dingtalk-workspace-cli/scripts/policy/check-interface-baseline.sh

59 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
set -eu
# Compare the public Cobra command tree with the reviewed interface baseline.
# The Go snapshot helper builds the tree once in-process, so this remains fast
# even when the CLI has hundreds of command nodes.
ROOT="$(CDPATH= cd -- "$(dirname -- "$0")/../.." && pwd)"
BASELINE="${INTERFACE_BASELINE:-$ROOT/test/fixtures/cli-interface-baseline.txt}"
cd "$ROOT"
. "$ROOT/scripts/policy/policy-runtime.sh"
policy_prepare_runtime "$ROOT"
TMP_ROOT="$(policy_runtime_mktemp_dir dws-interface-baseline)"
SNAPSHOT_HOME="$TMP_ROOT/home"
SNAPSHOT_BIN="$TMP_ROOT/interface-baseline"
CURRENT="$TMP_ROOT/current.txt"
mkdir -p "$SNAPSHOT_HOME"
trap 'rm -rf "$TMP_ROOT"' EXIT HUP INT TERM
# Compile with the caller's normal Go cache, then isolate only the execution
# HOME so user-installed DWS plugins cannot alter the public command tree.
go build -o "$SNAPSHOT_BIN" ./scripts/policy/interface-baseline
if [ "${1:-}" = "--reset" ]; then
mkdir -p "$(dirname "$BASELINE")"
HOME="$SNAPSHOT_HOME" DWS_LANG=zh "$SNAPSHOT_BIN" >"$CURRENT"
cp "$CURRENT" "$BASELINE"
printf 'WARNING: interface compatibility history replaced: %s (%s command nodes)\n' \
"${BASELINE#"$ROOT"/}" "$(grep -c '^\[' "$BASELINE")"
exit 0
fi
if [ "${1:-}" = "--update" ]; then
mkdir -p "$(dirname "$BASELINE")"
if [ -f "$BASELINE" ]; then
HOME="$SNAPSHOT_HOME" DWS_LANG=zh "$SNAPSHOT_BIN" --merge "$BASELINE" >"$CURRENT"
else
HOME="$SNAPSHOT_HOME" DWS_LANG=zh "$SNAPSHOT_BIN" >"$CURRENT"
fi
cp "$CURRENT" "$BASELINE"
printf 'interface baseline extended: %s (%s historical command nodes)\n' \
"${BASELINE#"$ROOT"/}" "$(grep -c '^\[' "$BASELINE")"
exit 0
fi
if [ "$#" -gt 0 ]; then
printf 'error: unknown option: %s\n' "$1" >&2
exit 2
fi
if [ ! -f "$BASELINE" ]; then
printf 'error: baseline missing at %s — run make update-interface-baseline\n' \
"${BASELINE#"$ROOT"/}" >&2
exit 1
fi
HOME="$SNAPSHOT_HOME" DWS_LANG=zh "$SNAPSHOT_BIN" --check "$BASELINE"