mirror of
https://github.com/nearai/ironclaw.git
synced 2026-05-19 16:24:32 +08:00
* feat: add pre-push git hook with delta lint mode Add pre-push hook and CI quality gate scripts: - .githooks/pre-push: runs quality gate before push - scripts/ci/quality_gate.sh: baseline fmt + clippy correctness + tests - scripts/ci/delta_lint.sh: clippy warnings filtered to changed lines only - Updated dev-setup.sh to install pre-push hook Supports environment-gated modes: - IRONCLAW_STRICT_LINT=1: deny all clippy warnings - IRONCLAW_STRICT_DELTA_LINT=1: deny warnings only on changed lines Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: use git rev-parse for SCRIPT_DIR, add python3 check - Fix SCRIPT_DIR resolution in pre-push hook to work correctly with symlinks by using git rev-parse --show-toplevel - Add python3 availability check in delta_lint.sh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: delta lint stderr handling, --locked flag, path normalization - Stop suppressing clippy stderr; capture it and show compilation errors if clippy produces no JSON output - Add --locked flag to clippy for lockfile consistency - Use repo root (via git rev-parse) for path normalization instead of os.getcwd() which may differ from repo root Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: dynamically detect upstream base branch in delta_lint.sh Instead of hard-coding `origin/main`, derive the base ref by checking `refs/remotes/origin/HEAD`, then falling back to `origin/main` and `origin/master`. If none can be resolved, skip delta lint gracefully with a warning and exit 0. Addresses PR #833 review feedback. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * chore: re-trigger CI after adding skip-regression-check label Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: address PR #833 review feedback for delta lint - Pass remote name ($1) from pre-push hook to delta_lint.sh - Accept optional remote name arg, fall back to dynamic detection - Treat error-level diagnostics as always blocking - Check span overlap [line_start, line_end] vs changed ranges - Handle +++ /dev/null (file deletions) in parse_diff - Catch git merge-base failure with graceful skip - Add CLIPPY_STDERR to EXIT trap cleanup Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix: drop -D warnings from delta lint, scope pre-push tests to --lib 1. Remove `-D warnings` from the clippy invocation in delta_lint.sh. With -D warnings, all warnings are promoted to error level in JSON output, which bypasses the delta filter entirely (errors are always blocking). The Python filter already handles the blocking decision for warnings based on changed-line overlap. 2. Scope pre-push tests to `cargo test --lib` (unit tests only) instead of the full test suite. Full integration tests can take minutes and will train developers to use --no-verify. The full suite runs in CI. Skip tests entirely with IRONCLAW_PREPUSH_TEST=0. Addresses zmanian's review feedback on PR #833. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.4 KiB
Bash
Executable File
74 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Developer setup script for IronClaw.
|
|
#
|
|
# Gets a fresh checkout ready for development without requiring
|
|
# Docker, PostgreSQL, or any external services.
|
|
#
|
|
# Usage:
|
|
# ./scripts/dev-setup.sh
|
|
#
|
|
# After running, you can:
|
|
# cargo check # default features (postgres + libsql)
|
|
# cargo test # default test suite (uses libsql temp DB)
|
|
# cargo test --all-features # full test suite
|
|
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
echo "=== IronClaw Developer Setup ==="
|
|
echo ""
|
|
|
|
# 1. Check rustup
|
|
if ! command -v rustup &>/dev/null; then
|
|
echo "ERROR: rustup not found. Install from https://rustup.rs"
|
|
exit 1
|
|
fi
|
|
echo "[1/6] rustup found: $(rustup --version 2>/dev/null | head -1)"
|
|
|
|
# 2. Add WASM target (required by build.rs for channel compilation)
|
|
echo "[2/6] Adding wasm32-wasip2 target..."
|
|
rustup target add wasm32-wasip2
|
|
|
|
# 3. Install wasm-tools (required by build.rs for WASM component model)
|
|
echo "[3/6] Installing wasm-tools..."
|
|
if command -v wasm-tools &>/dev/null; then
|
|
echo " wasm-tools already installed: $(wasm-tools --version)"
|
|
else
|
|
cargo install wasm-tools --locked
|
|
fi
|
|
|
|
# 4. Verify the project compiles
|
|
echo "[4/6] Running cargo check..."
|
|
cargo check
|
|
|
|
# 5. Run tests using libsql temp DB (no Docker/external DB needed)
|
|
echo "[5/6] Running tests (no external DB required)..."
|
|
cargo test
|
|
|
|
# 6. Install git hooks
|
|
echo "[6/6] Installing git hooks..."
|
|
HOOKS_DIR=$(git rev-parse --git-path hooks 2>/dev/null) || true
|
|
if [ -n "$HOOKS_DIR" ]; then
|
|
mkdir -p "$HOOKS_DIR"
|
|
SCRIPTS_ABS="$(cd "$(dirname "$0")" && pwd)"
|
|
ln -sf "$SCRIPTS_ABS/commit-msg-regression.sh" "$HOOKS_DIR/commit-msg"
|
|
echo " commit-msg hook installed (regression test enforcement)"
|
|
ln -sf "$SCRIPTS_ABS/pre-commit-safety.sh" "$HOOKS_DIR/pre-commit"
|
|
echo " pre-commit hook installed (UTF-8, case-sensitivity, /tmp, redaction checks)"
|
|
REPO_ROOT="$(git rev-parse --show-toplevel)"
|
|
ln -sf "$REPO_ROOT/.githooks/pre-push" "$HOOKS_DIR/pre-push"
|
|
echo " pre-push hook installed (quality gate + optional delta lint)"
|
|
else
|
|
echo " Skipped: not a git repository"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Setup complete ==="
|
|
echo ""
|
|
echo "Quick start:"
|
|
echo " cargo run # Run with default features"
|
|
echo " cargo test # Test suite (libsql temp DB)"
|
|
echo " cargo test --all-features # Full test suite"
|
|
echo " cargo clippy --all-features # Lint all code"
|