#!/usr/bin/env bash set -euo pipefail # 统一串联 Rust workspace 的格式、lint、编译与测试校验,保证本地和 CI 使用同一条检查链路。 usage() { cat <<'EOF' 用法: ./server-rs/scripts/check.sh SERVER_RS_CHECK_CRATE=api-server ./server-rs/scripts/check.sh 说明: 1. 先执行整个 `server-rs` workspace 的 `cargo fmt --all --check` 2. 默认继续执行整个 workspace 的 `cargo clippy`、`cargo check`、`cargo test` 3. 可通过 `SERVER_RS_CHECK_CRATE` 将 clippy/check/test 收窄到单个 crate 4. `cargo fmt --all --check` 始终覆盖整个 workspace,避免多 crate 下格式口径漂移 EOF } if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then usage exit 0 fi SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" SERVER_RS_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)" MANIFEST_PATH="${SERVER_RS_DIR}/Cargo.toml" if [[ ! -f "${MANIFEST_PATH}" ]]; then echo "[server-rs:check] 未找到 ${MANIFEST_PATH},无法启动检查脚本。" >&2 exit 1 fi echo "[server-rs:check] 工作目录: ${SERVER_RS_DIR}" echo "[server-rs:check] 步骤: cargo fmt --all --check" cd "${SERVER_RS_DIR}" cargo fmt --all --check --manifest-path "${MANIFEST_PATH}" TARGET_CRATE="${SERVER_RS_CHECK_CRATE:-${SERVER_RS_CHECK_PACKAGE:-}}" if [[ -n "${TARGET_CRATE}" ]]; then echo "[server-rs:check] 目标 crate: ${TARGET_CRATE}" echo "[server-rs:check] 步骤: cargo clippy -p ${TARGET_CRATE} --all-targets --all-features -D warnings" cargo clippy -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" --all-targets --all-features -- -D warnings echo "[server-rs:check] 步骤: cargo check -p ${TARGET_CRATE}" cargo check -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" echo "[server-rs:check] 步骤: cargo test -p ${TARGET_CRATE}" cargo test -p "${TARGET_CRATE}" --manifest-path "${MANIFEST_PATH}" else echo "[server-rs:check] 步骤: cargo clippy --workspace --all-targets --all-features -D warnings" cargo clippy --workspace --manifest-path "${MANIFEST_PATH}" --all-targets --all-features -- -D warnings echo "[server-rs:check] 步骤: cargo check --workspace" cargo check --workspace --manifest-path "${MANIFEST_PATH}" echo "[server-rs:check] 步骤: cargo test --workspace" cargo test --workspace --manifest-path "${MANIFEST_PATH}" fi