repopilot 0.8.0

Local-first CLI for repository audit, architecture risk detection, baseline tracking, and CI-friendly code review.
Documentation
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 }}