Use jq to build JSON payloads safely and payload-file-path to avoid
inline multiline content. Limits error context to 3 lines, strips ANSI
codes, and caps field length at 200 chars.
- drift-detection: split payload build from post, sanitize playwright output
- starter-smoke: replace toJSON(format(...)) double-encoding with jq
- showcase_deploy: replace 300-char inline ternary with readable shell conditional
The RAILWAY_TOKEN in GitHub secrets can't call serviceInstanceUpdate
(403 Forbidden). Services are now all configured to pull :latest, so
serviceInstanceRedeploy will pull the latest image automatically.
Railway was pinned to old SHA tags — serviceInstanceRedeploy just
restarts the existing image. Now the deploy step calls
serviceInstanceUpdate to set the image to the exact SHA just pushed,
then triggers the redeploy. Also re-enables Docker cache.
The GHA Docker layer cache was serving stale builds — renderer adapter
code wasn't in the deployed images despite successful builds. Disabling
cache-from forces a full rebuild. Will re-enable after cache is fresh.
- Remove test-integration-tmp from workflow (package was deleted)
- starter-langgraph-python: disable Turbopack for Next.js build
(serverExternalPackages incompatible with Turbopack)
- starter-crewai-crews: pin crewai-tools~=0.47.1 to avoid version
conflict with crewai==0.130.0
- shell-dojolike: add missing zod dependency (required by shared
frontend modules)
The paths-filter YAML had test_integration_tmp defined twice (lines 71
and 90), causing a "duplicated mapping key" parse error that blocked all
deploy runs.
The CI workflow's shared module copy step used trailing slashes on both
source and destination (cp -r src/ dest/src/), which on Linux copies the
*contents* into an already-created dest/src/ — resulting in
shared_frontend/src/src/ instead of shared_frontend/src/. Same issue
for shared_typescript/tools/.
Root cause confirmed via diagnostic instrumentation: index.ts existed at
the wrong depth, leaving the webpack alias target empty.
Fix: mkdir only the parent, cp without trailing slashes so the directory
itself is placed correctly. Also removes the diagnostic debug line from
pydantic-ai Dockerfile.
- Node 20 → 22 in all Dockerfiles + CI workflows
- CI copies shared_python, shared_frontend/src, shared_typescript/tools
- tsconfig paths for @copilotkit/showcase-shared
- .gitignore for CI artifacts
Replaced 23 identical build jobs with one parameterized matrix job.
1200 lines to ~250. Service config as JSON, matrix generated from
path-filter results. Shell special cases (LFS, build-args, custom
Dockerfile) handled via matrix properties and dedicated prep step.