spicehq/Spice Cloud Deploy

Deploy Spice.ai Cloud apps with OAuth client credentials and optional SQL/NSQL/search/chat/MCP smoke tests.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
client-idOAuth client ID for the Spice Cloud Management API. Create one at https://spice.ai under Profile → OAuth Clients. yes
client-secretOAuth client secret. Store as a repository or environment secret (e.g. `secrets.SPICE_CLIENT_SECRET`); never inline. yes
app-idNumeric Spice Cloud app ID. Either `app-id` or `app-name` is required.no
app-nameSpice Cloud app name. Used to look up `app-id` when not provided. Required when `create-app-if-missing` is true. no
create-app-if-missingCreate the app if it does not exist. Requires `app-name`.nofalse
orgSpice Cloud organization slug. Used to construct the `app-url` output (`https://spice.ai/<org>/<app-name>`). When unset, the action falls back to the owner part of `GITHUB_REPOSITORY` — which matches the Spice org slug for personal orgs and for orgs created from a connected GitHub organization. Set this explicitly only when your Spice org slug differs from the GitHub repo owner. no
regionSpice Cloud region (e.g. `us-east-1`, `us-west-2`). Required when `create-app-if-missing` is true. For existing apps the region is read from the API and this input is informational only. no
visibilityVisibility for new apps (`public` or `private`). Only used with `create-app-if-missing`.noprivate
tagsApp tags as a YAML or JSON map. Merged with existing tags on each run. YAML form (recommended): tags: | environment: production team: data-platform commit: <commit-sha> JSON form: tags: '{"environment":"production","team":"data-platform"}' Lines beginning with `#` are treated as comments. no
spicepodPath to a Spicepod manifest. When the file exists, its contents are pushed to the app via `PUT /v1/apps/{appId}` before the deployment is triggered. nospicepod.yaml
working-directoryWorking directory. Relative paths in `spicepod` are resolved against this.no.
image-tagRuntime image tag override for this deployment (e.g. `1.5.0-models`).no
channelUpdate channel for this deployment (`stable`, `preview`, `nightly`, `internal`).no
replicasNumber of replicas for this deployment (1-10).no
branchGit branch attributed to the deployment. Defaults to the `GITHUB_REF_NAME` environment variable.no
commit-shaGit commit SHA attributed to the deployment. Defaults to the `GITHUB_SHA` environment variable.no
commit-messageCommit message for the deployment. Defaults to the head-commit message of the GitHub event.no
debugEnable debug mode on the deployment.nofalse
secretsApp secrets to upsert before deploy, as a YAML or JSON map. Values are added to the runner's secret-mask list so they don't appear in logs. YAML form (recommended): secrets: | OPENAI_API_KEY: <openai-api-key> PG_PASSWORD: <pg-password> JSON form: secrets: '{"OPENAI_API_KEY":"<openai-api-key>","PG_PASSWORD":"<pg-password>"}' Lines beginning with `#` are treated as comments. Secret values can contain any characters; only the secret name is constrained (must start with a letter or underscore, alphanumeric + underscores only). no
wait-for-completionPoll the deployment until it succeeds or fails.notrue
timeout-secondsMaximum number of seconds to wait when `wait-for-completion` is true.no600
poll-interval-secondsSeconds between deployment status polls.no10
test-sqlSQL query to execute against the deployed runtime as a smoke test (uses the `@spiceai/spice` SDK with HTTP fallback). no
test-nsqlNatural-language query to send to `/v1/nsql` (text-to-SQL) as a smoke test. Uses the `@spiceai/spice` SDK. no
test-chatEither a plain prompt string (sent as a single user message) or a JSON body to POST to `/v1/chat/completions` (OpenAI-compatible). no
test-chat-modelModel to use for `test-chat` and `test-nsql` (when applicable).no
test-searchJSON body to POST to `/v1/search`. Example: test-search: '{"datasets":["my_dataset"],"text":"hello world"}' no
test-mcp-toolName of an MCP tool to invoke against `/v1/mcp` as a smoke test.no
test-mcp-argumentsJSON-encoded arguments object passed as `params.arguments` to the MCP tool call.no
test-warmup-secondsMaximum seconds to wait for the runtime to become ready (`isSpiceReady()`) before running probes. Set to 0 to skip the warmup wait. no60
test-timeout-secondsPer-probe HTTP timeout in seconds.no30
dataset-ready-timeout-secondsMaximum seconds to wait for every dataset reported by `GET /v1/datasets?status=true` to reach a terminal-ok state (`ready`, `disabled`, or `refreshing`) before running runtime probes. The action fails the job immediately if any dataset enters `error`, or if the timeout elapses while datasets are still pending — regardless of `fail-on-test-error`, which only governs runtime-probe results. To disable the dataset check entirely, set this to `0`. no300
runtime-urlOverride the runtime HTTP base URL probes connect to. When unset, the URL is derived from the resolved app's region as `https://<region>-prod-aws-data.spiceai.io` (e.g. `https://us-east-1-prod-aws-data.spiceai.io`). no
flight-urlOverride the Apache Arrow Flight gRPC endpoint the SQL probe connects to (`host:port`, optionally prefixed with `grpc+tls://`). When unset, it's derived from the app's region as `<region>-prod-aws-flight.spiceai.io:443` (e.g. `us-west-2-prod-aws-flight.spiceai.io:443`). Set this if your app uses a custom Flight host. no
fail-on-test-errorFail the action when any probe fails. Set to `false` to record failures without failing the job.notrue
api-urlBase URL for the Spice Cloud Management API.nohttps://api.spice.ai
oauth-token-urlOAuth token endpoint URL.nohttps://spice.ai/api/oauth/token
scopeOptional OAuth scope to request when exchanging client credentials (space-separated).no
namedescription
app-idResolved numeric app ID.
app-nameResolved app name.
app-urlPublic URL of the app (`https://<app-name>.spice.ai`).
deployment-idID of the created deployment.
deployment-statusFinal deployment status (`queued`, `in_progress`, `succeeded`, `failed`).
deployment-created-atISO 8601 timestamp the deployment was created.
test-resultsJSON array of `{ name, ok, durationMs, detail?, error? }` for each runtime probe.
datasetsJSON array of `{ name, status, from?, error?, error_message? }` from `GET /v1/datasets?status=true` after deployment.