-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Summary
On self-hosted local builds targeting a local registry like localhost:5000, deployments can be marked as successful while the runner later fails with No such image, because the built image was never pushed to the registry.
Environment
- Trigger.dev self-hosted
- Version:
v4.4.3 - Local build flow
- Local registry image tags like
localhost:5000/...
Expected behavior
If self-hosted local builds use a local registry image tag such as localhost:5000/..., the built image should still be pushed so supervisors/runners can pull it.
Actual behavior
The deployment can complete successfully, but the supervisor later fails to pull the image:
No such image: localhost:5000/...
In our case, older image tags existed, but the new deployment tag did not exist after a successful deploy.
Reproduction
- Use self-hosted Trigger.dev v4.4.3 with a local registry tag like
localhost:5000/... - Perform a local deploy
- Deployment reports success
- Trigger a run
- Supervisor attempts to pull the deployment image and fails with
404 / no such image
What we found
In the local build code path, shouldPush() returns false by default for image tags starting with:
localhost127.0.0.10.0.0.0
That seems wrong for self-hosted local-registry setups, because the built image then never reaches the registry that supervisors/runners are expected to use.
Evidence
Relevant logic in buildImage.ts:
case undefined: {
return imageTag.startsWith("localhost") ||
imageTag.startsWith("127.0.0.1") ||
imageTag.startsWith("0.0.0.0")
? false
: true;
}Observed runtime failure:
- deployment marked successful
- supervisor log:
No such image: localhost:5000/... - previous tags existed, new tag for the new deployment did not
Impact
Self-hosted local-registry deployments can appear successful but fail at runtime when the runner tries to pull the image.
Question
Should local-registry targets in self-hosted mode default to push=true, or is there another supported path that supervisors are expected to use here?