-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.yml
More file actions
129 lines (125 loc) · 4.83 KB
/
action.yml
File metadata and controls
129 lines (125 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
name: "ReviewForge"
description: "AI-powered code reviewer with personality — supports OpenAI, Anthropic, and Gemini"
author: "AxeForging"
inputs:
GITHUB_TOKEN:
description: "GitHub token for API access"
required: true
AI_PROVIDER:
description: "AI provider: openai, anthropic, gemini"
required: true
default: "gemini"
AI_MODEL:
description: "AI model to use (e.g. gpt-4, claude-sonnet-4-20250514, gemini-pro)"
required: true
default: "gemini-2.5-flash"
AI_API_KEY:
description: "API key for the chosen AI provider"
required: true
AI_TEMPERATURE:
description: "Temperature for AI model (0-1, higher = more creative)"
required: false
default: "0"
APPROVE_REVIEWS:
description: "Allow approving/requesting changes on PRs"
required: false
default: "true"
MAX_COMMENTS:
description: "Maximum number of line comments (0 = unlimited)"
required: false
default: "5"
INCREMENTAL:
description: "Only review new changes since last bot review"
required: false
default: "false"
EXCLUDE_PATTERNS:
description: "Comma-separated glob patterns to exclude"
required: false
default: "**/*.lock,**/*.json,**/*.md"
CONTEXT_FILES:
description: "Comma-separated files to include as AI context"
required: false
default: "package.json,README.md"
PROJECT_CONTEXT:
description: "Additional context about the project for the AI"
required: false
PERSONA:
description: "Reviewer persona: bob, robert, maya, eli, or leave empty for default expert reviewer"
required: false
CUSTOM_PERSONA:
description: 'Custom persona JSON: {"name":"...","prompt":"..."}'
required: false
CUSTOM_PERSONA_FILE:
description: "Path to custom persona JSON file"
required: false
STRICT_CHANGES:
description: "Only request changes for syntax errors or degradation of existing functionality"
required: false
default: "false"
REVIEW_RULES:
description: "Built-in comment rules preset: concise, thorough"
required: false
CUSTOM_RULES:
description: "Custom review rules text (what to comment on, what to ignore)"
required: false
SHOW_TOKEN_USAGE:
description: "Append AI token usage metrics to the review summary"
required: false
default: "false"
CUSTOM_RULES_FILE:
description: "Path to a file containing custom review rules"
required: false
LANGUAGE:
description: "Language for review comments and summary (e.g. pt-br, es, fr)"
required: false
runs:
using: "composite"
steps:
- name: Download ReviewForge
shell: bash
run: |
OS="linux"
ARCH="amd64"
if [[ "${{ runner.os }}" == "macOS" ]]; then OS="darwin"; fi
if [[ "${{ runner.arch }}" == "ARM64" ]]; then ARCH="arm64"; fi
VERSION="${{ github.action_ref }}"
if [ -z "$VERSION" ] || [ "$VERSION" == "main" ]; then
# Fetch latest release tag
VERSION=$(curl -sS -o /dev/null -w '%{redirect_url}' \
"https://github.com/AxeForging/reviewforge/releases/latest" | grep -oP '[^/]+$')
echo "Resolved latest version: ${VERSION}"
fi
# Download and extract the specific binary (Public asset, no token needed)
URL="https://github.com/AxeForging/reviewforge/releases/download/${VERSION}/reviewforge-${OS}-${ARCH}.tar.gz"
echo "Downloading $URL..."
curl -sSL "$URL" -o /tmp/reviewforge.tar.gz
tar -xzf /tmp/reviewforge.tar.gz -C /tmp
mv /tmp/reviewforge reviewforge_bin
chmod +x reviewforge_bin
- name: Run ReviewForge
shell: bash
env:
INPUT_GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}
INPUT_AI_PROVIDER: ${{ inputs.AI_PROVIDER }}
INPUT_AI_MODEL: ${{ inputs.AI_MODEL }}
INPUT_AI_API_KEY: ${{ inputs.AI_API_KEY }}
INPUT_AI_TEMPERATURE: ${{ inputs.AI_TEMPERATURE }}
INPUT_APPROVE_REVIEWS: ${{ inputs.APPROVE_REVIEWS }}
INPUT_MAX_COMMENTS: ${{ inputs.MAX_COMMENTS }}
INPUT_INCREMENTAL: ${{ inputs.INCREMENTAL }}
INPUT_EXCLUDE_PATTERNS: ${{ inputs.EXCLUDE_PATTERNS }}
INPUT_CONTEXT_FILES: ${{ inputs.CONTEXT_FILES }}
INPUT_PROJECT_CONTEXT: ${{ inputs.PROJECT_CONTEXT }}
INPUT_PERSONA: ${{ inputs.PERSONA }}
INPUT_CUSTOM_PERSONA: ${{ inputs.CUSTOM_PERSONA }}
INPUT_CUSTOM_PERSONA_FILE: ${{ inputs.CUSTOM_PERSONA_FILE }}
INPUT_STRICT_CHANGES: ${{ inputs.STRICT_CHANGES }}
INPUT_REVIEW_RULES: ${{ inputs.REVIEW_RULES }}
INPUT_CUSTOM_RULES: ${{ inputs.CUSTOM_RULES }}
INPUT_CUSTOM_RULES_FILE: ${{ inputs.CUSTOM_RULES_FILE }}
INPUT_SHOW_TOKEN_USAGE: ${{ inputs.SHOW_TOKEN_USAGE }}
INPUT_LANGUAGE: ${{ inputs.LANGUAGE }}
run: |
./reviewforge_bin review \
--repo "${{ github.repository }}" \
--pr "${{ github.event.pull_request.number }}"