| githubToken | GitHub token for PR comments and API access. Defaults to the automatic GITHUB_TOKEN. | no | ${{ github.token }} |
| githubAppId | GitHub App ID used to mint fresh installation tokens during the run. GitHub App installation tokens expire after 1 hour, so on longer runs a workflow-minted githubToken is already dead by the time tests are delivered — with githubAppId + githubAppPrivateKey set, the action mints a fresh token right before git pushes and API calls instead. Pair with the same App the workflow uses for its token step. The App installation must cover this repository (and the test repository, if testRepoPath is used — same owner only). | no | — |
| githubAppPrivateKey | Private key (PEM, PKCS#1 or PKCS#8) of the GitHub App named by githubAppId (store in GitHub Secrets). Required for on-demand token minting on runs exceeding the 1-hour installation-token lifetime. | no | — |
| skyrampLicenseFile | Skyramp license file content (store in GitHub Secrets) | yes | — |
| cursorApiKey | Cursor API key for AI agent access (store in GitHub Secrets) | no | — |
| copilotApiKey | Copilot API key for AI agent access. Requires a GitHub PAT with "Copilot Requests" permission. | no | — |
| anthropicApiKey | Anthropic API key for Claude Code agent access (store in GitHub Secrets) | no | — |
| allowedAuthors | Newline-separated list of GitHub usernames whose PRs Testbot will act on. When empty (default), all authors are allowed. | no | "" |
| targetSetupCommand | Command to start services before test maintenance. Can optionally emit a JSON object as its last stdout line to override workspace baseUrl at runtime (e.g., {"baseUrl": "http://remote-host:8000"} for single-service, or {"services": {"backend": {"baseUrl": "..."}, "frontend": {"baseUrl": "..."}}} for multi-service). Sets SKYRAMP_TEST_BASE_URL (single) or SKYRAMP_TEST_SERVICE_URL_<NAME> (multi) env vars for test execution. | no | docker compose up -d |
| authTokenCommand | Shell command to generate an authentication token. Runs after services start; stdout is captured and set as SKYRAMP_TEST_TOKEN for test execution. | no | "" |
| uiCredentials | Browser login credentials for apps that require authentication before UI test recording. Format: "username:password" (one credential per line for multiple users). Store in GitHub Secrets. | no | "" |
| targetTeardownCommand | Command to tear down services after test execution (runs in post step, guaranteed even on failure/cancellation) | no | "" |
| skipTargetTeardown | Skip running service teardown command | no | false |
| skyrampExecutorVersion | Skyramp Executor Docker image version. Falls back to workspace.yml metadata, then "v1.3.34". | no | — |
| skyrampMcpVersion | Skyramp MCP package version. Falls back to workspace.yml metadata, then "latest". | no | — |
| skyrampMcpSource | Source for Skyramp MCP package: "npm" or "github" | no | npm |
| skyrampMcpGithubToken | GitHub PAT with read access to letsramp/mcp (required when source is "github") | no | — |
| skyrampMcpGithubRef | Git ref (branch/tag/commit) for letsramp/mcp (used when source is "github") | no | main |
| nodeVersion | Node.js version to use | no | lts/* |
| skipTargetSetup | Skip running target setup command | no | false |
| targetReadyCheckCommand | Shell command to verify services are ready (retried until success or timeout). When empty (default), auto-generates curl health checks against service base URLs from workspace config. | no | "" |
| targetReadyCheckTimeout | Maximum seconds to wait for ready check command to succeed. Default accommodates `docker compose --build --wait` cold builds; the loop exits on first success so fast services pay no extra cost. | no | 1800 |
| targetReadyCheckInterval | Seconds between ready check poll attempts | no | 30 |
| targetReadyCheckDiagnosticsCommand | Shell command to collect diagnostics on ready check timeout. Runs when targetReadyCheckCommand times out. | no | docker ps -a --format 'table {{.Names}} {{.Status}} {{.Ports}}' && docker ps -a --format '{{.Names}}' | while read name; do [ -n "$name" ] && echo "--- logs $name (last 30) ---" && docker logs --tail 30 "$name"; done |
| workingDirectory | Working directory for the action | no | . |
| autoCommit | Automatically commit test changes | no | true |
| commitMessage | Commit message for test changes | no | Skyramp Testbot: test maintenance suggestions |
| generatedTestsMode | Where generated/maintained tests are delivered. "separate-branch" (default) opens a new PR/MR from a bot-owned branch into the feature branch, keeping the feature PR clean. "same-branch" pushes a commit directly onto the feature branch (legacy behavior). Note: for downstream CI (lint/tests/etc.) to auto-run on the side PR, the `githubToken` input must be a GitHub App installation token or PAT — the default `GITHUB_TOKEN` will not trigger other workflows. | no | separate-branch |
| testRepoPath | Cross-repo test delivery: local filesystem path (relative to `$GITHUB_WORKSPACE`) where the workflow has checked out a separate test repository (via `actions/checkout` with `path:`, on its default branch, with a token that has `contents: write` + `pull-requests: write` on it). `persist-credentials` is not required — Testbot injects credentials from `githubToken` ephemerally for its git operations (push, and side-PR fetch/ls-remote), never written to `.git/config`. When set, generated tests are committed and a side PR is opened in that repo instead of the app repo — Testbot derives its `owner/repo` from the checkout and reuses the action's `githubToken` for the push and side-PR API. Leave empty to commit tests in the app repo. | no | — |
| relatedRepoPaths | Multi-repo analysis: newline-separated local filesystem paths (relative to `$GITHUB_WORKSPACE`) of related repositories the workflow has already checked out as sibling directories (via `actions/checkout` with `path:`). Each is analyzed read-only as shared context alongside the primary repo, with cross-repo changes correlated before tests are generated. The primary checkout repo still receives the report and test commits. Maximum 5 entries. | no | "" |
| postPrComment | Post summary as PR comment | no | true |
| maxRecommendations | Total number of test recommendations to produce (generated + additional). Defaults to 20. | no | 20 |
| maxGenerate | Number of tests to generate and execute in this run. The remainder are listed as additional recommendations. Defaults to 3. | no | 3 |
| testbotMaxRetries | Maximum number of retries for transient agent CLI errors (e.g., Cursor "Connection stalled") | no | 3 |
| testbotRetryDelay | Delay in seconds between agent retry attempts | no | 10 |
| testExecutionTimeout | Timeout in seconds for individual MCP tool calls (e.g., test execution). Increase if tests take longer than 5 minutes. | no | 300 |
| testbotTimeout | Timeout in minutes for the agent execution (safety net; does not kill the child process) | no | 60 |
| targetSetupRetries | Number of retries for targetSetupCommand on failure (e.g. transient DockerHub 502 errors) | no | 3 |
| targetSetupRetryDelay | Delay in seconds between targetSetupCommand retries | no | 10 |
| authTokenRetries | Total attempts for authTokenCommand (e.g. 6 = 1 initial + 5 retries). Tolerates SUTs whose auth surface comes up after the HTTP port (async post-start data seeding). Set to 1 to disable retries. | no | 6 |
| authTokenRetryDelay | Delay in seconds between authTokenCommand retries | no | 10 |
| reportCollapsed | Wrap report sections in collapsible <details> blocks with a summary line | no | true |
| enableDebug | Enable debug logging | no | true |
| sutSetupMode | SUT setup mode. When not "none", Testbot enters bootstrap mode to generate SUT files. After validation succeeds or bootstrap times out, sets to "none". Supported: none | adapt_workflow | docker_compose. | no | none |
| sutSourceWorkflowFile | Path to an existing workflow file to adapt (for adapt_workflow mode). Example: .github/workflows/e2e-tests.yml | no | "" |
| sutSourceDockerComposeFile | Path to an existing docker-compose file to reuse (for docker_compose mode). Example: docker-compose.yml | no | "" |