Official GitHub Action for Ota.
This action is intentionally thin:
- it runs
ota - it reads Ota JSON output
- it publishes GitHub-native summaries, annotations, comments, and artifacts
- for
doctorand receipt baseline diff output, it prefers Ota's canonicalota annotationsrenderer and falls back to the bundled renderer only when the installed Ota version cannot provide that surface
It does not duplicate repo readiness, diagnosis, or provisioning logic.
The public action contract is published through Git tags:
- immutable semver tags such as
v1.0.0 - a moving major tag such as
v1
Use semver tags for release history and v1 for the stable adoption surface in workflows.
When a new semver tag is pushed, the release workflow verifies the repo through Ota, updates the matching major tag, and publishes a GitHub release.
Release prep is Ota-native:
ota run version:bump --version patchPut Ota command flags before task inputs, for exampleota run version:bump --stream --version patch.- commit and push
main - create and push a semver tag such as
v1.0.2
You can replace patch with minor, major, prerelease, or an explicit semver value.
- runs
ota doctor --json,ota receipt --json --archive, orota proof runtime --json - can compare a current receipt against an explicit or auto-restored baseline receipt
- automatically restores the latest successful artifact matching
artifact-nameon pull request receipt runs when no explicit baseline file is configured - writes a GitHub Actions step summary
- emits GitHub annotations from Ota findings
- posts or updates a sticky pull request comment by default
- uploads the ota JSON output plus any archived receipt or runtime-proof artifacts as workflow artifacts
- formats summaries and sticky pull request comments around outcome, primary blocker or change, next steps, and receipt or baseline references
- the workflow should use
permissions: actions: readandpermissions: pull-requests: writefor the canonical pull-request gate - self-hosted runners should be on Actions Runner
v2.327.1or later for Node 24-based actions ota-run/setupis the canonical Ota installation surface; this action should normally run withinstall: neverafter setup- when used alone, this action defaults to
install: auto, reusing an existingotabinary and installing only when one is missing
permissions:
actions: read
contents: read
pull-requests: write
steps:
- uses: actions/checkout@v5
- uses: ota-run/setup@v1
- name: ota readiness
uses: ota-run/action@v1
with:
command: receipt
path: .
archive: true
fail-on-new-blockers: true
install: never
github-token: ${{ github.token }}This is the intended drop-in path:
- the action archives the current receipt under
ota-readiness - pull request runs automatically restore the latest successful
ota-readinessartifact from the same workflow on the default branch - the receipt diff gate blocks only on newly introduced blockers by default
- the step summary and sticky pull request comment describe the current outcome, the primary blocker or change, and the next operator step
Use examples/recommended-pr-gate.yml when you want the copyable workflow file directly.
Use this smaller shape only when the workflow does not run on pull_request events. The pull-request gate needs github-token, actions: read, and pull-requests: write.
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: ota-run/setup@v1
- uses: ota-run/action@v1
with:
command: receipt
install: neverUse this when the selected workflow only becomes ready after starting a live run task and you want the action to own that orchestration instead of writing repo-local background and wait glue.
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: ota-run/setup@v1
- uses: ota-run/action@v1
with:
command: proof
workflow: docs
execution-mode: container
install: neverCopyable workflow files live in examples/.
- basic-readiness.yml
- baseline-regression-gate.yml
- pr-comment-and-annotations.yml
- pinned-ota-version.yml
- self-hosted-preinstalled.yml
commandreceipt,doctor, orproof- default:
receipt
path- repo or contract target passed to Ota
- default:
.
baseline- optional baseline passed to
ota receipt --baseline - supports
latestor a receipt JSON file path
- optional baseline passed to
fail-on-new-blockers- when
true, adds--fail-on-new-blockersfor receipt baseline compares - default:
true
- when
working-directory- working directory used when invoking
ota - default:
.
- working directory used when invoking
execution-modenativeorcontainer- default:
native
workflow- optional workflow name passed to Ota
member- optional monorepo member target
archive- when
trueandcommand=receipt, adds--archive - default:
true
- when
annotate- emit GitHub annotations from findings
- default:
true
max-annotations- maximum findings to emit as annotations
- default:
20
comment-pr- create or update a sticky pull request comment
- default:
true
comment-pr-only- only comment when the workflow event is a pull request
- default:
true
artifact-name- uploaded artifact name
- default:
ota-readiness
artifact-retention-days- optional artifact retention in days
fail-on-error- fail the action when the derived action status is
blocked - default:
true - baseline compare gates can report
riskywhen baseline debt remains but no new blockers were introduced
- fail the action when the derived action status is
installauto,always, ornever- default:
auto autoreuses an existing Ota binary and installs only when one is missingalwaysinstalls Ota before running, even when an Ota binary already existsneverrequires Ota to already be available; use this afterota-run/setup
ota-version- optional installer version such as
v1.0.1or1.0.1 - when set, the action installs that version through the official installer
- prefer
ota-run/setupfor pinned installation in reusable workflows
- optional installer version such as
ota-bin- Ota binary name or path
- default:
ota
output-path- where the captured Ota JSON output is written
- default:
.ota-action-output.json
github-token- token used for pull request baseline restore and sticky pull request comment updates
okstatusoutput-patharchive-pathbaseline-pathartifact-nameerror-countwarn-countinfo-countgate-rulegate-passedprimary-summary
receiptis the better default for CI when you want archive-friendly, read-only reporting against a repo that is already ready or against a workflow that does not require a live run task.proofis the right CI surface when the selected workflow only becomes ready after Ota starts and verifies a live runtime path.workflowlets the action target a non-default repo workflow explicitly when the contract exposes more than one front door.- on pull request receipt runs, the action automatically restores the latest successful artifact named by
artifact-namewhen no explicit baseline file is set. - receipt baseline mode is a two-step wrapper: the action captures the current receipt for archive continuity, then runs the compare output used for summaries, annotations, comments, and failure semantics.
receiptdoes not start workflow run tasks for you. Usecommand: proofwhen the selected workflow defines live surface readiness on a run task and CI needs Ota to start it, wait for readiness, and capture the canonical proof artifacts.- the canonical pull-request gate expects
github-token,actions: read, andpull-requests: write; missing them is now a configuration error, not a soft fallback. - step summaries and sticky pull request comments lead with the derived outcome, then show the primary blocker or change, explicit next steps, and any receipt or baseline references available from Ota.
- receipt diff summaries and sticky pull request comments include baseline provenance when Ota provides it, including the source plus selection path, archive path, and promoted or archived time.
doctoris useful when you want the richer top-levelverdictandprimary_blockersemantics.- archived receipts are referenced by local path in the summary and uploaded as artifacts when available.
- use
ota-run/setupplusinstall: neverfor the canonical split where setup installs Ota and this action only runs/report gates - use
install: neveron self-hosted runners when Ota is already provisioned and you want the action to fail closed instead of mutating the runner
This repository is also managed through Ota.
ota validatechecks the repo contract.ota run setupinstalls local dependencies.ota run ciruns the canonical verification path for this repo.ota run version:bump --version patchprepares the next release version without creating a tag.
Apache-2.0. See LICENSE.