All notable changes to this project are documented here. The format follows Keep a Changelog and this project adheres to Semantic Versioning.
secretsinput is now a YAML/JSON map, notKEY=VALUElines. Mirrors thetagsinput shape. Update existing workflows to swap=for:between key and value:Secret-name validation is unchanged (must start with a letter or underscore, alphanumeric + underscores only). Secret values can contain any characters and are added to the runner's secret-mask list before any API call.# Before (1.0.0) secrets: | OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} # After (1.1.0) secrets: | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- Tag values are now strictly validated against the Spice Cloud API's allowed character set (alphanumeric plus
_@-). Previously the action only enforced length, so values likerepo: foo/barwould round-trip to the API and fail there with a generic400. Workflows that passed/,:, spaces, or other special characters in tag values must update to use only_@-(the action also auto-sanitizes the auto-capturedrepositorytag).
orginput controlling theapp-urloutput, which is now constructed ashttps://spice.ai/<org>/<app-name>(the canonical Spice Cloud portal URL). Whenorgis unset, it falls back to the owner part ofGITHUB_REPOSITORY, which matches the Spice org slug for personal orgs and orgs created from a connected GitHub organization.flight-urlinput for the regional Apache Arrow Flight gRPC endpoint. When unset, derived from the resolved app's region as<region>-prod-aws-flight.spiceai.io:443(mirrors the data hostname with-dataswapped for-flight). Agrpc+tls:///grpc://scheme prefix on the input is stripped automatically.dataset-ready-timeout-secondsinput for a post-deploy dataset readiness check. The action pollsGET /v1/datasets?status=trueuntil every dataset reaches a terminal-ok state (ready,disabled, orrefreshing) and fails immediately onerroror on timeout-while-pending — independent offail-on-test-error, which only governs runtime-probe results. Statuses likeshuttingdownand any unrecognized values are treated as still-pending so the loop never returns a false-positive "loaded". Default300seconds, set0to skip.datasetsaction output — JSON array of{ name, status, from?, error?, error_message? }from the/v1/datasets?status=trueresponse. Also rendered as a "Datasets" table in the GitHub job step summary.- Auto-captured
repositorytag fromGITHUB_REPOSITORYwhen set, sanitized to fit the API's tag-value rule (/→_). Users can override by settingrepository:explicitly in thetagsinput. - Per-call response time logging. Every Spice Cloud Management API call now logs
<METHOD> <path> → <status> <statusText> (<durationMs>ms)so request latency is visible inline in the action logs. Network failures log<METHOD> <path> → network error in <durationMs>ms: <message>.
- Bump the action runtime from Node 20 to Node 24 (
runs.using: node24). Node 20 actions are deprecated by GitHub and will be force-defaulted to Node 24 on June 2, 2026, with Node 20 removed from the runner on September 16, 2026. Build target, CI matrix,engines.node, and.nvmrcare aligned to Node 24.
app-urloutput was previouslyhttps://<app-name>.spice.ai, which doesn't resolve. It is nowhttps://spice.ai/<org>/<app-name>.- SQL smoke test failed with
14 UNAVAILABLE: No connection establishedbecause the SDK initialized a gRPC client with noflightUrlconfigured for Spice Cloud. The action now derives a regional flight URL by default; the SDK uses gRPC for SQL queries with HTTP fallback as designed. - The Spice Cloud
GET /v1/apps/{appId}/api-keysresponse is{ api_key, api_key_2 }, but the action was reading{ primary, secondary }and bailing withCannot run runtime probes: no API key returned for app …whenever runtime probes were enabled. Smoke tests now correctly retrieve the primary (or secondary) key. - Step-summary "Branch" cell was empty when the management API's list-deployments response omitted the
branchfield even though the create request set it. The summary now falls back to thebranchandcommit-shainputs we sent. - Suppress the
(node:NNNN) [DEP0040] DeprecationWarning: The 'punycode' module is deprecatedruntime warning by aliasing the barepunycodespecifier to the userlandpunycode@2package at bundle time. action.ymlno longer embeds literal${{ … }}example tokens indescription:blocks, which the runner was evaluating at action-load time and erroring out withUnrecognized named-value: 'github'/'secrets'.
- Initial release of the Spice Cloud Deploy Action.
- OAuth 2.0 client credentials authentication against the Spice Cloud Management API.
- Resolve apps by
app-idorapp-name, with optionalcreate-app-if-missingflow. - App tag merging via
tagsinput — accepts a YAML block mapping (recommended) or JSON object. - Optional Spicepod manifest push from
spicepod.yamlbefore deploy. - Bulk app secret upsert from a multi-line
secretsinput (values masked in logs). - Deployment trigger with
branch/commit_sha/commit_messageauto-populated from the GitHub event. - Optional polling until the deployment reaches a terminal status.
- Post-deploy smoke tests using the
@spiceai/spiceSDK (SQL viasqlJson, NSQL viansql, ready check viaisSpiceReady) plus raw HTTP probes for/v1/chat/completions,/v1/search, and/v1/mcp. - Region-aware runtime URL derivation (
https://<region>-prod-aws-data.spiceai.io) andruntime-urloverride. - GitHub job step summary with deployment metadata and a per-probe pass/fail table.
- Cross-platform support (
ubuntu-latest,macos-latest,windows-latestNode 20 action).