name: AI Comment Reply # WORKFLOW ROUTING: # This workflow handles SPECIFIC commands: help, explain, suggest, security, summarize, changelog, explain-diff, review-again, setup-labels # Other workflows: ai-issue-triage.yml (@{{BOT_NAME}} triage), ai-chat.yml (free-form questions) on: issue_comment: types: [created] # CUSTOMIZE YOUR BOT NAME: # Change '@{{BOT_NAME}}' in the 'if' condition below to match your config.yml mention_prefix # Examples: '@bartender', '@uni', '@joey', '@codebot' jobs: ai-reply: runs-on: ubuntu-latest # Only run for specific commands (not free-form chat or triage) # This prevents duplicate runs with ai-chat.yml and ai-issue-triage.yml # CRITICAL: Ignore bot's own comments to prevent infinite loops (bot username: {{BOT_USERNAME}}) if: | {{PLATFORM}}.event.comment.user.login != '{{BOT_USERNAME}}' && (contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} help') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} explain') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} suggest') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} security') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} summarize') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} changelog') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} explain-diff') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} review-again') || contains({{PLATFORM}}.event.comment.body, '@{{BOT_NAME}} setup-labels')) steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: {{OPENRABBIT_REPO}} path: .ai-review token: ${{ secrets.AI_REVIEW_TOKEN }} - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Comment Response env: AI_REVIEW_TOKEN: ${{ secrets.AI_REVIEW_TOKEN }} AI_REVIEW_API_URL: {{API_URL}} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }} OLLAMA_HOST: ${{ secrets.OLLAMA_HOST }} run: | cd .ai-review/tools/ai-review # Determine if this is a PR or issue comment IS_PR="${{ {{PLATFORM}}.event.issue.pull_request != null }}" REPO="${{ {{PLATFORM}}.repository }}" ISSUE_NUMBER="${{ {{PLATFORM}}.event.issue.number }}" # Validate inputs if [ -z "$REPO" ] || [ -z "$ISSUE_NUMBER" ]; then echo "Error: Missing required parameters" exit 1 fi # Validate repository format (owner/repo) if ! echo "$REPO" | grep -qE '^[a-zA-Z0-9_-]+/[a-zA-Z0-9_-]+$'; then echo "Error: Invalid repository format: $REPO" exit 1 fi if [ "$IS_PR" = "true" ]; then # This is a PR comment - use safe dispatch with minimal event data # Build minimal event payload (does not include sensitive user data) EVENT_DATA=$(cat <