showcase/RAILWAY.md
One service is wired into showcase_deploy.yml with placeholder
railway_id="PLACEHOLDER-CREATE-RAILWAY-SERVICE" and needs a real Railway
service ID filled in before its first successful deploy:
built-in-agent → image showcase-built-in-agentSingle-service Next.js app (BuiltInAgent runs in-process; no separate
agent server). Required env: OPENAI_API_KEY. Health probe at
/api/health.
Until the Railway service exists, the deploy job for this entry will
fail loudly on serviceInstanceRedeploy — that's intentional. Provision
it via the "Adding a New Railway Service" flow below, then swap the
placeholder ID in the matrix.
The matching starter-built-in-agent is intentionally absent: the
starter generator (showcase/scripts/generate-starters.ts) does not
yet support single-service packages, so the starter will be added in a
follow-up PR alongside generator support.
All 41 Railway services have source.autoUpdates.type = "minor" with no
schedule restriction (any time, immediately). When a new GHCR :latest
digest is pushed, Railway auto-pulls and redeploys without manual
intervention.
CI (showcase_deploy.yml) still triggers an explicit serviceInstanceRedeploy
after each GHCR push for deterministic health-checking. The auto-update is a
safety net, not the primary deploy path.
Enable auto-updates via the GraphQL API:
mutation {
environmentPatchCommit(
environmentId: "<env-id>"
patch: {
"services": {
"<new-service-id>": {
"source": { "autoUpdates": { "type": "minor" } }
}
}
}
commitMessage: "Enable image auto-updates"
)
}
Or via Dashboard: Settings > Configure Auto Updates > "Automatically update to the latest tag" + "At any time, immediately".
Add to showcase_deploy.yml ALL_SERVICES matrix so CI builds
and pushes the GHCR image on code changes.
Add to showcase/harness/config/probes/smoke.yml so the service is
monitored by showcase-harness probes.
Git-based services: auto-updates only apply to image-sourced services. Skip step 1 for git-deploy services.
<project-id><env-id>~/.railway/config.json -> .user.tokenPolling frequency: Railway's auto-update polling interval is undocumented. Expect seconds to low minutes after a GHCR push.
API surface: environmentPatchCommit is the only programmatic
way to configure auto-updates. Typed GraphQL mutations
(ServiceSourceInput) do not expose autoUpdates.
source.autoUpdates.type values: disabled, patch, minor.
We use minor (any semver-compatible tag change, including :latest
digest changes).
source.autoUpdates.schedule: array of
{day, startHour, endHour}. Omit entirely for "any time, immediately".
CI still redeploys explicitly: showcase_deploy.yml calls
serviceInstanceRedeploy after GHCR push so the health-check step
can verify the exact deployment it triggered. Auto-updates are the
fallback, not a replacement for CI-driven deploy verification.