name: RepoPilot
description: "Run RepoPilot static analysis on your repository"
author: "MykytaStel"
branding:
icon: shield
color: blue
inputs:
command:
description: "Command to run: scan | review | compare | vibe | harden | prompt"
required: false
default: "scan"
format:
description: "Output format: auto | console | json | markdown | sarif. auto uses sarif for scan and markdown for review/compare; vibe/harden/prompt emit Markdown and accept auto/markdown."
required: false
default: "auto"
args:
description: "Extra CLI arguments passed verbatim to repopilot"
required: false
default: ""
version:
description: "npm version tag to install (e.g. latest, 0.8.0)"
required: false
default: "latest"
upload-sarif:
description: "Automatically upload SARIF output to GitHub Code Scanning"
required: false
default: "true"
outputs:
sarif-file:
description: "Path to the generated SARIF file (only set when format is sarif)"
value: ${{ steps.run.outputs.sarif_file }}
runs:
using: composite
steps:
- name: Install repopilot
shell: bash
run: npm install -g repopilot@${{ inputs.version }}
- name: Run repopilot
id: run
shell: bash
run: |
COMMAND="${{ inputs.command }}"
ARGS="${{ inputs.args }}"
FORMAT="${{ inputs.format }}"
if [[ "$COMMAND" != "scan" && "$COMMAND" != "review" && "$COMMAND" != "compare" && "$COMMAND" != "vibe" && "$COMMAND" != "harden" && "$COMMAND" != "prompt" ]]; then
echo "::error::Unsupported command '$COMMAND'. Expected scan, review, compare, vibe, harden, or prompt."
exit 1
fi
if [[ ("$COMMAND" == "scan" || "$COMMAND" == "vibe" || "$COMMAND" == "harden" || "$COMMAND" == "prompt") && -z "$ARGS" ]]; then
ARGS="."
fi
if [[ "$FORMAT" == "auto" ]]; then
if [[ "$COMMAND" == "scan" ]]; then
FORMAT="sarif"
else
FORMAT="markdown"
fi
fi
if [[ "$FORMAT" == "sarif" && "$COMMAND" != "scan" ]]; then
echo "::error::SARIF output and upload are only supported by 'scan'. Use format=markdown for '$COMMAND'."
exit 1
fi
OUTFILE="repopilot-results.sarif"
if [[ "$COMMAND" == "vibe" || "$COMMAND" == "harden" || "$COMMAND" == "prompt" ]]; then
if [[ "$FORMAT" != "markdown" ]]; then
echo "::error::'$COMMAND' emits Markdown and does not accept --format. Use format=auto or format=markdown."
exit 1
fi
repopilot "$COMMAND" $ARGS
elif [[ "$FORMAT" == "sarif" ]]; then
repopilot "$COMMAND" $ARGS --format sarif --output "$OUTFILE"
echo "sarif_file=$OUTFILE" >> $GITHUB_OUTPUT
else
repopilot "$COMMAND" $ARGS --format "$FORMAT"
fi
- name: Upload SARIF to GitHub Code Scanning
if: inputs.upload-sarif == 'true' && steps.run.outputs.sarif_file != ''
uses: github/codeql-action/upload-sarif@v4
with:
sarif_file: ${{ steps.run.outputs.sarif_file }}