aarwitz/Tapp Release Gate

PR-aware app exploration and deterministic release-contract gates for iOS, Android, and web, with inspectable evidence.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Activelast commit Aug 23, 2026
License
MIT

Pinned Snippet

workflow.ymlSHA-pinned
uses: aarwitz/tapp@7115e38d7aa3c3ed6e7c2b4d61b9f1e88589f7e8 # v0.17.3

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

namedescriptionrequireddefault
platformTarget platform: ios, android, or webnoios
urlWeb: URL of an already-running owned app. Omit to detect/build/start/stop one target from the repository.no""
web-targetWeb: target name, id, or repository-relative path when more than one browser target is detected.no""
target-keyStable application-model target id used to isolate baselines for multiple targets on the same platform.nodefault
android-app-idAndroid: application id, e.g. com.example.appno""
android-serialAndroid: optional adb device serial (the caller must start/connect the emulator)no""
bundle-idBundle identifier of the app under test. Auto-detected from the built .app when omitted.no""
app-pathiOS simulator .app or Android .apk. If omitted, the action builds from the platform project inputs.no""
projectPath to the .xcodeproj or .xcworkspace to build (used when app-path is not given)no""
schemeScheme to build (used when app-path is not given)no""
configurationBuild configurationnoDebug
android-projectAndroid: Gradle project directory (defaults to the workspace)no""
android-taskAndroid: Gradle APK build tasknoassembleDebug
max-actionsExploration budget (number of autonomous actions)no40
timeoutExploration watchdog in secondsno600
flowsGlob of Flow YAMLs to replay (default: .tapp/flows/*.yml in the workspace, if present)no""
scenariosWeb: glob of multi-actor Scenario YAMLs (default: .tapp/scenarios/*.yml when present)no""
contractsGlob of TypeScript release contracts (default: .tapp/contracts/*.contract.ts when present)no""
pr-selectionOn pull requests, run critical/always contracts plus contracts selected from the real changed-file set and reviewed UI Map/Task ownership.notrue
baselinePath to a baseline report JSON. If omitted, .tapp/baseline.json wins; otherwise the latest successful, conclusive default-branch report is restored automatically.no""
fail-onGate policy: gate (regressions + failed release contracts/flows; default), absolute (any current-run deterministic findings-block or inconclusive run — no baseline needed), any (any finding)nogate
simulator-deviceSimulator device to boot when none is bootednoiPhone 16 Pro
test-emailLogin email for apps behind an auth wall (pass via a secret). Used by the exploration login preamble.no""
test-passwordLogin password for apps behind an auth wall (pass via a secret).no""
launch-argsJSON array of app launch arguments, e.g. ["--uitesting"] to bypass login on a supporting build.no""
launch-envJSON object of app launch environment, e.g. {"UI_TEST_BACKEND":"staging"}.no""
login-stepsJSON array of explicit login steps for a custom login UI (see .tapp.yml app.login.steps). $TEST_EMAIL/$TEST_PASSWORD are substituted.no""
comment-on-prPost the report as a sticky comment on the PR (only on pull_request events).notrue
github-tokenToken used to post the PR comment. Defaults to the workflow token.no${{ github.token }}
namedescription
reportPath to the full JSON report (usable as the next baseline)
outcomeThe gate outcome: pass | fail | inconclusive (fail and inconclusive both block a merge)
gate-failedtrue when the gate failed (merge should be blocked)
baseline-sourceBaseline source: explicit | committed | automatic | none
pr-planPath to the PR selection, coverage-gap, replay, and maintenance-candidate plan when PR selection ran