josiahsiegel/UmActually PR Review

Provider-agnostic PR review action. Runs in dry-run mode by default and emits ::set-output lines for the GitHub Actions runner. Inputs are parsed strictly as strings; the entrypoint (dist/index.js) reads INPUT_* env vars to drive either the GitHub or Azure DevOps review contract.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Jul 10, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: josiahsiegel/umactually@44aca921eecc8642891d134a1370a1a1b0713f1b # no releases — HEAD as of 2026-07-11

tags can be moved; commit SHAs can't. why a SHA?

namedescriptionrequireddefault
github_tokenGitHub token used to read the workflow event payload and post the review.no""
diffPath to the PR diff file. When unset, the action falls back to a 3-line placeholder diff which the model correctly rejects as 'no pull request diff was provided'. Workflows should always pass this input pointing at the actual PR diff. no""
api-keyProvider API key for the review request.no""
api-urlProvider base URL. Interpretation depends on `--provider`: for `openai-compatible`, the action tries the URL as-pasted (e.g. https://gateway.example.com/openai) and falls back to origin+`/v1` if both `/responses` and `/chat/completions` 404 there. For `anthropic`, the URL is treated as a path prefix per the `@anthropic-ai/sdk` convention (https://api.minimax.io/anthropic resolves to https://api.minimax.io/anthropic/v1/messages). Required for `openai-compatible`; optional for `anthropic` (defaults to https://api.anthropic.com/v1); ignored for `copilot` (which uses `github-api-base` for token exchange). On dual-protocol gateways (e.g. MiniMax) the dispatcher auto-discovers which protocol the URL serves — see docs/providers.md. no""
modelProvider model id. "auto" lets the retry ladder pick.noauto
promptInline system prompt override. Wins over prompt-file when both are set.no""
prompt-fileRepository-relative prompt file.no""
additional-promptInline additional prompt override. Wins over additional-prompt-file when both are set.no""
additional-prompt-fileRepository-relative additional prompt file.no""
effortReasoning effort hint (low|medium|high). Currently forwarded as reasoning.effort to providers that support it; medium is the default.nomedium
providerProvider family. Default `openai-compatible` (OpenAI Chat Completions / Responses API over any OpenAI-protocol gateway). Set to `copilot` to use GitHub Copilot (requires a GitHub PAT as `UMACTUALLY_API_KEY` and `UMACTUALLY_GITHUB_API_BASE` for Enterprise Server). Set to `anthropic` to use the native Anthropic Messages API (`POST /v1/messages` with `x-api-key`/`anthropic-version` headers) — useful when running against an Anthropic API key without an OpenAI proxy in front. The Anthropic provider defaults to `https://api.anthropic.com/v1`; override via `api-url` for a self-hosted Anthropic-protocol gateway. On dual-protocol gateways (e.g. MiniMax serves Anthropic-protocol at `/anthropic/v1/messages` and OpenAI-protocol at `/v1/responses` under the same hostname with the same API key), `--provider` is advisory: the dispatcher transparently retries the OTHER protocol at the same URL when the named protocol returns a routing-level rejection (404). Payload-level 400s do NOT trigger fallback (would mask wire-shape bugs). The `::notice::` annotations on each run show which protocol produced the review. See docs/providers.md#cross-protocol-auto-discovery-the-dispatcher. noopenai-compatible
github-api-baseGitHub API base URL for Copilot provider token exchange. Defaults to https://api.github.com; set to https://<tenant>.ghe.com for GitHub Enterprise Server data residency.no""
walkthroughGenerate a separate PR walkthrough comment.nofalse
diagnosticInject a synthetic low-severity finding for pipeline smoke tests.nofalse
dry-runGenerate review output without posting comments or status.nofalse
dry_runSynonym for dry-run; some runners require an underscore key for boolean inputs.nofalse
debug-raw-responseEcho the raw provider response into the workflow log.nofalse
simulate-findingsReplace an empty live provider payload with a deterministic multi-finding fixture. Live results are always preferred when the provider returns real findings.nofalse
review-timeout-secondsHard ceiling for the full model-call retry budget.no300
stall-secondsStream stall budget for the SSE channel.no270
max-output-tokensmax_output_tokens sent to the provider.no16000
minimum-severityMinimum severity to post inline (low|medium|high). Defaults to "medium" — low-severity findings (style, hygiene) are filtered out of the postable set. Set to "low" to keep them. `security` and `leak` findings ALWAYS survive any threshold and are never suppressed by this option. nomedium
max-commentsCap on posted comments per review.no50
review-file-limitSoft cap on the number of changed files the live review path will process. When a PR's diff touches more files than this, the CLI skips the chunked review and posts a "diff too large to review" parent card with zero inline findings, rather than feeding arbitrarily-large chunks to the LLM (which produces hallucinated findings). Set to 0 to disable the limit. no200
include-sonarqubePull SonarQube issues alongside the PR review.nofalse
sonar-host-urlSonarQube base URL.no""
sonar-tokenSonarQube token.no""
sonar-project-keySonarQube project key.no""
sonar-timeout-secondsSonarQube HTTP timeout in seconds.no300
detect-leaksRun secret-leak detection on the diff.notrue
platformPlatform to dispatch (auto|github|azure).noauto
pr-numberPull request number.no""
repoRepository in owner/name form.no""

no outputs