Add automated setup system for easy installation
All checks were successful
AI Codebase Quality Review / ai-codebase-review (push) Successful in 36s
All checks were successful
AI Codebase Quality Review / ai-codebase-review (push) Successful in 36s
- Add setup.sh interactive wizard for 5-minute setup - Add INSTALL.md comprehensive installation guide - Add templates/workflows/ directory with parameterized workflow templates - Update README.md with prominent Installation section - Update docs/README.md with installation links The setup wizard automates: - Platform selection (Gitea/GitHub) - Bot configuration - LLM provider setup - Workflow file generation - Configuration file creation Users can now add OpenRabbit to any repository in under 5 minutes. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
300
setup.sh
Executable file
300
setup.sh
Executable file
@@ -0,0 +1,300 @@
|
||||
#!/bin/bash
|
||||
# OpenRabbit Setup Wizard
|
||||
# This script helps you set up OpenRabbit AI code review for your Gitea or GitHub repository
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
echo "🐰 OpenRabbit Setup Wizard"
|
||||
echo "==========================="
|
||||
echo ""
|
||||
|
||||
# Get the directory where this script is located
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TEMPLATE_DIR="$SCRIPT_DIR/templates/workflows"
|
||||
|
||||
# Check if templates directory exists
|
||||
if [ ! -d "$TEMPLATE_DIR" ]; then
|
||||
echo "❌ Error: Template directory not found at $TEMPLATE_DIR"
|
||||
echo "Please run this script from the OpenRabbit repository root."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. Detect platform
|
||||
echo "Step 1: Platform Configuration"
|
||||
echo "------------------------------"
|
||||
read -p "Platform? [gitea/github] (default: gitea): " PLATFORM
|
||||
PLATFORM=${PLATFORM:-gitea}
|
||||
|
||||
# Validate platform
|
||||
if [ "$PLATFORM" != "gitea" ] && [ "$PLATFORM" != "github" ]; then
|
||||
echo "❌ Error: Invalid platform. Please choose 'gitea' or 'github'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Platform: $PLATFORM"
|
||||
echo ""
|
||||
|
||||
# 2. Bot configuration
|
||||
echo "Step 2: Bot Configuration"
|
||||
echo "-------------------------"
|
||||
read -p "Bot mention name (e.g., codebot): " BOT_NAME
|
||||
while [ -z "$BOT_NAME" ]; do
|
||||
echo "❌ Bot name cannot be empty"
|
||||
read -p "Bot mention name (e.g., codebot): " BOT_NAME
|
||||
done
|
||||
|
||||
# Validate bot name (alphanumeric, dash, underscore only)
|
||||
if ! echo "$BOT_NAME" | grep -qE '^[a-zA-Z0-9_-]+$'; then
|
||||
echo "❌ Error: Bot name must contain only letters, numbers, dashes, and underscores"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -p "Bot account username (default: same as mention name): " BOT_USERNAME
|
||||
BOT_USERNAME=${BOT_USERNAME:-$BOT_NAME}
|
||||
|
||||
echo "✅ Bot: @$BOT_NAME (account: $BOT_USERNAME)"
|
||||
echo ""
|
||||
|
||||
# 3. LLM Provider
|
||||
echo "Step 3: LLM Provider"
|
||||
echo "--------------------"
|
||||
echo "Available providers:"
|
||||
echo " 1) openai - OpenAI GPT models (default)"
|
||||
echo " 2) anthropic - Anthropic Claude models"
|
||||
echo " 3) azure - Azure OpenAI Service"
|
||||
echo " 4) gemini - Google Gemini API"
|
||||
echo " 5) ollama - Self-hosted Ollama"
|
||||
read -p "Choose provider [1-5] (default: 1): " PROVIDER_CHOICE
|
||||
PROVIDER_CHOICE=${PROVIDER_CHOICE:-1}
|
||||
|
||||
case "$PROVIDER_CHOICE" in
|
||||
1) PROVIDER="openai" ;;
|
||||
2) PROVIDER="anthropic" ;;
|
||||
3) PROVIDER="azure" ;;
|
||||
4) PROVIDER="gemini" ;;
|
||||
5) PROVIDER="ollama" ;;
|
||||
*)
|
||||
echo "❌ Invalid choice. Using openai."
|
||||
PROVIDER="openai"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "✅ Provider: $PROVIDER"
|
||||
echo ""
|
||||
|
||||
# 4. Platform-specific settings
|
||||
if [ "$PLATFORM" = "gitea" ]; then
|
||||
echo "Step 4: Gitea Configuration"
|
||||
echo "---------------------------"
|
||||
read -p "Gitea API URL (e.g., https://gitea.example.com/api/v1): " API_URL
|
||||
while [ -z "$API_URL" ]; do
|
||||
echo "❌ API URL cannot be empty"
|
||||
read -p "Gitea API URL: " API_URL
|
||||
done
|
||||
|
||||
# Validate URL format
|
||||
if ! echo "$API_URL" | grep -qE '^https?://'; then
|
||||
echo "❌ Error: API URL must start with http:// or https://"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ API URL: $API_URL"
|
||||
else
|
||||
echo "Step 4: GitHub Configuration"
|
||||
echo "----------------------------"
|
||||
API_URL="https://api.github.com"
|
||||
echo "✅ Using GitHub API: $API_URL"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# 5. OpenRabbit repository location
|
||||
echo "Step 5: OpenRabbit Repository"
|
||||
echo "-----------------------------"
|
||||
read -p "OpenRabbit repo location (e.g., YourOrg/openrabbit): " OPENRABBIT_REPO
|
||||
while [ -z "$OPENRABBIT_REPO" ]; do
|
||||
echo "❌ Repository cannot be empty"
|
||||
read -p "OpenRabbit repo location: " OPENRABBIT_REPO
|
||||
done
|
||||
|
||||
# Validate repo format
|
||||
if ! echo "$OPENRABBIT_REPO" | grep -qE '^[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$'; then
|
||||
echo "❌ Error: Repository must be in format 'owner/repo'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ OpenRabbit: $OPENRABBIT_REPO"
|
||||
echo ""
|
||||
|
||||
# 6. Create workflow directory
|
||||
echo "Step 6: Creating Workflow Files"
|
||||
echo "--------------------------------"
|
||||
WORKFLOW_DIR=".${PLATFORM}/workflows"
|
||||
mkdir -p "$WORKFLOW_DIR"
|
||||
|
||||
# Replace template variables in workflow files
|
||||
for template in "$TEMPLATE_DIR"/*.yml; do
|
||||
filename=$(basename "$template")
|
||||
output="$WORKFLOW_DIR/$filename"
|
||||
|
||||
echo "Creating $output..."
|
||||
|
||||
# Use sed to replace template variables
|
||||
sed -e "s|{{OPENRABBIT_REPO}}|$OPENRABBIT_REPO|g" \
|
||||
-e "s|{{API_URL}}|$API_URL|g" \
|
||||
-e "s|{{BOT_NAME}}|$BOT_NAME|g" \
|
||||
-e "s|{{BOT_USERNAME}}|$BOT_USERNAME|g" \
|
||||
-e "s|{{PLATFORM}}|$PLATFORM|g" \
|
||||
"$template" > "$output"
|
||||
done
|
||||
|
||||
echo "✅ Created 5 workflow files in $WORKFLOW_DIR/"
|
||||
echo ""
|
||||
|
||||
# 7. Create basic config.yml if it doesn't exist
|
||||
CONFIG_FILE="tools/ai-review/config.yml"
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
echo "Step 7: Creating Configuration File"
|
||||
echo "------------------------------------"
|
||||
mkdir -p "$(dirname "$CONFIG_FILE")"
|
||||
|
||||
cat > "$CONFIG_FILE" <<EOF
|
||||
# OpenRabbit Configuration
|
||||
# This is a basic configuration - see docs/configuration.md for full options
|
||||
|
||||
provider: $PROVIDER
|
||||
|
||||
model:
|
||||
openai: gpt-4.1-mini
|
||||
anthropic: claude-3.5-sonnet
|
||||
azure: gpt-4
|
||||
gemini: gemini-1.5-pro
|
||||
ollama: codellama:13b
|
||||
|
||||
interaction:
|
||||
mention_prefix: "@$BOT_NAME"
|
||||
commands:
|
||||
- help
|
||||
- explain
|
||||
- suggest
|
||||
- security
|
||||
- summarize
|
||||
- triage
|
||||
- changelog
|
||||
- explain-diff
|
||||
- review-again
|
||||
- setup-labels
|
||||
|
||||
review:
|
||||
fail_on_severity: HIGH
|
||||
max_diff_lines: 800
|
||||
security_scan: true
|
||||
|
||||
agents:
|
||||
issue:
|
||||
enabled: true
|
||||
pr:
|
||||
enabled: true
|
||||
security_scan: true
|
||||
auto_summary:
|
||||
enabled: true
|
||||
post_as_comment: true
|
||||
codebase:
|
||||
enabled: true
|
||||
chat:
|
||||
enabled: true
|
||||
max_iterations: 5
|
||||
|
||||
labels:
|
||||
priority:
|
||||
critical: "priority: critical"
|
||||
high: "priority: high"
|
||||
medium: "priority: medium"
|
||||
low: "priority: low"
|
||||
type:
|
||||
bug: "type: bug"
|
||||
feature: "type: feature"
|
||||
question: "type: question"
|
||||
documentation: "type: documentation"
|
||||
security: "type: security"
|
||||
status:
|
||||
approved: "ai-approved"
|
||||
changes_required: "ai-changes-required"
|
||||
reviewed: "ai-reviewed"
|
||||
EOF
|
||||
|
||||
echo "✅ Created $CONFIG_FILE"
|
||||
echo ""
|
||||
else
|
||||
echo "Step 7: Configuration File"
|
||||
echo "--------------------------"
|
||||
echo "ℹ️ $CONFIG_FILE already exists (not overwriting)"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# 8. Display next steps
|
||||
echo "✅ Setup Complete!"
|
||||
echo "=================="
|
||||
echo ""
|
||||
echo "📋 Next Steps:"
|
||||
echo ""
|
||||
echo "1️⃣ Create Bot Account"
|
||||
echo " - Create a new $PLATFORM user account: '$BOT_USERNAME'"
|
||||
if [ "$PLATFORM" = "gitea" ]; then
|
||||
echo " - Generate an access token with 'repo' and 'issue' permissions"
|
||||
else
|
||||
echo " - The built-in GITHUB_TOKEN will be used automatically"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "2️⃣ Add Repository/Organization Secrets"
|
||||
if [ "$PLATFORM" = "gitea" ]; then
|
||||
echo " Required secrets:"
|
||||
echo " • AI_REVIEW_TOKEN = <bot access token>"
|
||||
echo " • OPENAI_API_KEY = <your LLM API key>"
|
||||
echo ""
|
||||
echo " Optional secrets:"
|
||||
echo " • OPENROUTER_API_KEY = <if using OpenRouter>"
|
||||
echo " • OLLAMA_HOST = <if using Ollama>"
|
||||
echo " • SEARXNG_URL = <if using web search>"
|
||||
else
|
||||
echo " Required secrets:"
|
||||
echo " • OPENAI_API_KEY = <your LLM API key>"
|
||||
echo ""
|
||||
echo " Optional secrets:"
|
||||
echo " • AI_REVIEW_TOKEN = <if using private OpenRabbit repo>"
|
||||
echo " • OPENROUTER_API_KEY = <if using OpenRouter>"
|
||||
echo " • OLLAMA_HOST = <if using Ollama>"
|
||||
echo " • SEARXNG_URL = <if using web search>"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
echo "3️⃣ Commit and Push Workflow Files"
|
||||
echo " git add $WORKFLOW_DIR/"
|
||||
if [ ! -f "$CONFIG_FILE.orig" ]; then
|
||||
echo " git add $CONFIG_FILE"
|
||||
fi
|
||||
echo " git commit -m \"Add OpenRabbit AI code review workflows\""
|
||||
echo " git push"
|
||||
echo ""
|
||||
|
||||
echo "4️⃣ Set Up Labels (Automatic)"
|
||||
echo " Create an issue in your repository and comment:"
|
||||
echo " @$BOT_NAME setup-labels"
|
||||
echo ""
|
||||
echo " The bot will automatically detect your label schema and create missing labels."
|
||||
echo ""
|
||||
|
||||
echo "5️⃣ Test the Setup"
|
||||
echo " • Create a pull request to test PR review"
|
||||
echo " • Comment '@$BOT_NAME help' on any issue to see available commands"
|
||||
echo " • Comment '@$BOT_NAME How does authentication work?' for chat"
|
||||
echo ""
|
||||
|
||||
echo "📚 Documentation:"
|
||||
echo " • Installation Guide: INSTALL.md"
|
||||
echo " • Configuration: docs/configuration.md"
|
||||
echo " • Agent Reference: docs/agents.md"
|
||||
echo " • Troubleshooting: docs/troubleshooting.md"
|
||||
echo ""
|
||||
|
||||
echo "🎉 Happy reviewing with OpenRabbit!"
|
||||
Reference in New Issue
Block a user