The build-matrix completion release: Railpack and Git submodule support round out the source-build story, and custom domain watch paths can now be declared from the
.ninedeploymanifest.
Added
- Railpack build pack. The installer provisions the checksum-verified Railpack binary as an optional source builder; operators opt in per service via the build pack select. Railpack auto-detects the stack and builds via its own BuildKit connection — NineDeploy passes the image name and runtime env only.
- Git submodule init. Repos shipping a
.gitmodulesfile now have their submodules initialised recursively after checkout, so builds that reference submodule paths no longer fail on empty directories. watchmanifest section wiring. A.ninedeploywatch section syncs watch paths to all active webhooks for the service (newline-joined, matching the webhook storage format). An empty paths list is a no-op..envexport.GET /v1/services/:id/env/exportreturns non-secret env vars as.env-formatted content for backup or migration (admin floor; secret values stay masked).
Fixed
- Static build dispatch restored after being silently overwritten by a concurrent edit — static-pack services were falling through to the nixpacks/Dockerfile path instead of the nginx:alpine path.
- Agent operations get a 595 s timeout with process-group kill —
stalled
git fetchno longer holds.gitlocks and fail the next op. Signal-killed children report the signal instead of "code null".