name: 'AI Code Review' description: 'Run AI-powered code review on a pull request using review-bot' inputs: gitea-url: description: 'Gitea instance URL (defaults to server_url)' required: false default: '' repo: description: 'Repository (owner/name, defaults to current)' required: false default: '' pr-number: description: 'Pull request number (defaults to current PR)' required: false default: '' reviewer-token: description: 'Gitea token for posting the review' required: true reviewer-name: description: 'Display name for the reviewer' required: false default: '' llm-base-url: description: 'OpenAI-compatible LLM API base URL' required: true llm-api-key: description: 'LLM API key' required: true llm-model: description: 'LLM model name' required: true conventions-file: description: 'Path to conventions file in the repo (e.g. CLAUDE.md)' required: false default: '' temperature: description: 'LLM temperature (0 = server default)' required: false default: '0' version: description: 'review-bot version to install (e.g. v0.1.0, defaults to latest)' required: false default: 'latest' dry-run: description: 'Print review to stdout instead of posting' required: false default: 'false' runs: using: 'composite' steps: - name: Determine version id: version shell: bash run: | GITEA_URL="${{ inputs.gitea-url || github.server_url }}" if [ "${{ inputs.version }}" = "latest" ]; then VERSION=$(curl -sSf "${GITEA_URL}/api/v1/repos/rodin/review-bot/releases?limit=1" | sed -n 's/.*"tag_name":"\([^"]*\)".*/\1/p' | head -1) if [ -z "$VERSION" ]; then echo "Failed to determine latest version" >&2 exit 1 fi else VERSION="${{ inputs.version }}" fi echo "version=${VERSION}" >> "$GITHUB_OUTPUT" - name: Cache review-bot binary id: cache uses: actions/cache@v4 with: path: ${{ runner.temp }}/review-bot key: review-bot-linux-amd64-${{ steps.version.outputs.version }} - name: Install review-bot if: steps.cache.outputs.cache-hit != 'true' shell: bash run: | GITEA_URL="${{ inputs.gitea-url || github.server_url }}" VERSION="${{ steps.version.outputs.version }}" curl -sSfL "${GITEA_URL}/rodin/review-bot/releases/download/${VERSION}/review-bot-linux-amd64" -o ${{ runner.temp }}/review-bot chmod +x ${{ runner.temp }}/review-bot - name: Run review shell: bash env: GITEA_URL: ${{ inputs.gitea-url || github.server_url }} GITEA_REPO: ${{ inputs.repo || github.repository }} PR_NUMBER: ${{ inputs.pr-number || github.event.pull_request.number }} REVIEWER_TOKEN: ${{ inputs.reviewer-token }} REVIEWER_NAME: ${{ inputs.reviewer-name }} LLM_BASE_URL: ${{ inputs.llm-base-url }} LLM_API_KEY: ${{ inputs.llm-api-key }} LLM_MODEL: ${{ inputs.llm-model }} CONVENTIONS_FILE: ${{ inputs.conventions-file }} LLM_TEMPERATURE: ${{ inputs.temperature }} run: | ARGS="" if [ "${{ inputs.dry-run }}" = "true" ]; then ARGS="--dry-run" fi ${{ runner.temp }}/review-bot $ARGS