98 lines
3.1 KiB
Bash
Executable file
98 lines
3.1 KiB
Bash
Executable file
#!/bin/bash
|
|
# install-ots-hook.sh - Install OpenTimestamp post-commit hook
|
|
# Usage: install-ots-hook.sh [repository-path] [backfill]
|
|
|
|
set -e
|
|
|
|
REPO_PATH="${1:-.}"
|
|
ENABLE_BACKFILL="${2:-}" # Second arg: "backfill" to enable pre-commit backfill hook
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
cd "$REPO_PATH"
|
|
|
|
# Verify we're in a git repository
|
|
if ! git rev-parse --git-dir > /dev/null 2>&1; then
|
|
echo "Error: not a git repository" >&2
|
|
exit 1
|
|
fi
|
|
|
|
HOOKS_DIR="$(git rev-parse --git-dir)/hooks"
|
|
POST_COMMIT_HOOK="$HOOKS_DIR/post-commit"
|
|
|
|
echo "Installing OpenTimestamp hooks in: $REPO_PATH"
|
|
|
|
# Create the post-commit hook
|
|
cat > "$POST_COMMIT_HOOK" << 'HOOK_SCRIPT'
|
|
#!/bin/bash
|
|
# Post-commit hook: generate OpenTimestamp proof for each commit
|
|
|
|
set -e
|
|
|
|
# Get the commit hash
|
|
COMMIT_HASH=$(git rev-parse HEAD)
|
|
|
|
# Find the generate-proof.sh script
|
|
# Try relative paths first, then check common locations
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
GENERATE_SCRIPT=""
|
|
|
|
# Check if generate-proof.sh is in the same directory as this hook
|
|
if [ -f "$SCRIPT_DIR/generate-proof.sh" ]; then
|
|
GENERATE_SCRIPT="$SCRIPT_DIR/generate-proof.sh"
|
|
# Check in .git/hooks directory
|
|
elif [ -f ".git/hooks/generate-proof.sh" ]; then
|
|
GENERATE_SCRIPT=".git/hooks/generate-proof.sh"
|
|
# Check in repository root
|
|
elif [ -f "generate-proof.sh" ]; then
|
|
GENERATE_SCRIPT="./generate-proof.sh"
|
|
# Check if skill is installed globally (common OpenClaw path)
|
|
elif [ -f "$HOME/.openclaw/workspace/skills/git-ots-hook/scripts/generate-proof.sh" ]; then
|
|
GENERATE_SCRIPT="$HOME/.openclaw/workspace/skills/git-ots-hook/scripts/generate-proof.sh"
|
|
else
|
|
echo "Warning: generate-proof.sh not found, skipping OpenTimestamp proof" >&2
|
|
exit 0
|
|
fi
|
|
|
|
# Make sure the script is executable
|
|
chmod +x "$GENERATE_SCRIPT"
|
|
|
|
# Generate the proof
|
|
echo "[ots] Generating proof for commit: $COMMIT_HASH"
|
|
"$GENERATE_SCRIPT" "$COMMIT_HASH"
|
|
|
|
echo "[ots] Proof generated successfully"
|
|
HOOK_SCRIPT
|
|
|
|
# Make the hook executable
|
|
chmod +x "$POST_COMMIT_HOOK"
|
|
|
|
echo "✓ Post-commit hook installed successfully"
|
|
|
|
# Optionally install pre-commit backfill hook
|
|
if [ "$ENABLE_BACKFILL" = "backfill" ]; then
|
|
PRE_COMMIT_HOOK="$HOOKS_DIR/pre-commit"
|
|
cp "$SCRIPT_DIR/pre-commit-backfill" "$PRE_COMMIT_HOOK"
|
|
chmod +x "$PRE_COMMIT_HOOK"
|
|
echo "✓ Pre-commit backfill hook installed (will backfill proofs before each commit)"
|
|
fi
|
|
|
|
# Optionally setup .gitignore
|
|
if [ -f "$SCRIPT_DIR/setup-gitignore.sh" ]; then
|
|
"$SCRIPT_DIR/setup-gitignore.sh" "$REPO_PATH"
|
|
elif [ -f "$HOME/.openclaw/workspace/skills/git-ots-hook/scripts/setup-gitignore.sh" ]; then
|
|
"$HOME/.openclaw/workspace/skills/git-ots-hook/scripts/setup-gitignore.sh" "$REPO_PATH"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Ensure scripts are accessible (copy to repo root or install skill globally)"
|
|
echo "2. Verify ots CLI or @opentimestamps/ots is installed"
|
|
echo "3. Add .ots/ to git tracking: git add .ots/"
|
|
echo "4. Commit proofs: git commit -m 'Add OpenTimestamp proofs'"
|
|
echo "5. Make a test commit to verify the hooks work"
|
|
echo ""
|
|
echo "To uninstall:"
|
|
echo " rm $POST_COMMIT_HOOK"
|
|
if [ "$ENABLE_BACKFILL" = "backfill" ]; then
|
|
echo " rm $PRE_COMMIT_HOOK"
|
|
fi
|