sneak, deploying webhooker main under upaas on fsn1app1 (2026-09-29, in chat, verbatim):
---> Using cache
---> 949fe4acae44
Step 6/33 : COPY . .
---> 52f19b0ede21
Step 7/33 : RUN make fmt-check
---> Running in 7ce1650c73b8
ERROR: failed to build image: failed to inspect image: Error response from daemon: No such image: upaas-webhook:140
---> Removed intermediate container 7ce1650c73b8
---> ecac0b6e1764
Step 8/33 : RUN --network=none golangci-lint config verify --config .golangci.yml
ERROR: the --network option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled
What the log shows: the build ran on Docker's legacy builder (Step 6/33, ---> Running in), which rejects RUN --network=none. main (2102a248) asks for BuildKit in internal/docker/client.go (Version: dockertypes.BuilderBuildKit, from PR 221), so either fsn1app1 runs an upaas older than that, or the daemon there falls back to the legacy builder despite the request. Separately, the deploy log reports the failure as "failed to inspect image" instead of the build's own error.
Definition of done:
The cause is established and stated here: which upaas commit and Docker Engine version produce this, and why the legacy builder ran.
On next, upaas builds every app with BuildKit, or fails the deploy with a message that says BuildKit is unavailable on the daemon and what to do; it never silently uses the legacy builder.
A Dockerfile using RUN --network=none (webhooker's main is the test case) builds and deploys under upaas, shown by a test or a recorded run.
When a build fails, the deploy log and the deploy's error show the build's own error message, not a later "failed to inspect image".
If the fix needs an operator step on fsn1app1 (a Docker upgrade, a daemon setting), the README says so and the step is posted here for sneak.
Model: opus-5-5
sneak, deploying webhooker `main` under upaas on fsn1app1 (2026-09-29, in chat, verbatim):
```
---> Using cache
---> 949fe4acae44
Step 6/33 : COPY . .
---> 52f19b0ede21
Step 7/33 : RUN make fmt-check
---> Running in 7ce1650c73b8
ERROR: failed to build image: failed to inspect image: Error response from daemon: No such image: upaas-webhook:140
---> Removed intermediate container 7ce1650c73b8
---> ecac0b6e1764
Step 8/33 : RUN --network=none golangci-lint config verify --config .golangci.yml
ERROR: the --network option requires BuildKit. Refer to https://docs.docker.com/go/buildkit/ to learn how to build images with BuildKit enabled
```
What the log shows: the build ran on Docker's legacy builder (`Step 6/33`, `---> Running in`), which rejects `RUN --network=none`. `main` (`2102a248`) asks for BuildKit in `internal/docker/client.go` (`Version: dockertypes.BuilderBuildKit`, from PR 221), so either fsn1app1 runs an upaas older than that, or the daemon there falls back to the legacy builder despite the request. Separately, the deploy log reports the failure as "failed to inspect image" instead of the build's own error.
Definition of done:
- The cause is established and stated here: which upaas commit and Docker Engine version produce this, and why the legacy builder ran.
- On `next`, upaas builds every app with BuildKit, or fails the deploy with a message that says BuildKit is unavailable on the daemon and what to do; it never silently uses the legacy builder.
- A Dockerfile using `RUN --network=none` (webhooker's `main` is the test case) builds and deploys under upaas, shown by a test or a recorded run.
- When a build fails, the deploy log and the deploy's error show the build's own error message, not a later "failed to inspect image".
- If the fix needs an operator step on fsn1app1 (a Docker upgrade, a daemon setting), the README says so and the step is posted here for sneak.
Model: opus-5-5
clawbot
self-assigned this 2026-09-29 11:07:32 +02:00
@sneak, two facts to finish the cause for the record:
On fsn1app1: the output of docker version --format '{{.Server.Version}}'.
After your redeploy of upaas from main: did the webhooker build log start with BuildKit lines (#1 [internal] load build definition from Dockerfile) instead of Step 1/33, and did it get past RUN --network=none? If you still have the old upaas image, docker image inspect --format '{{.Created}}' <image> dates it; before 2026-09-23 12:45 means it predates the BuildKit change.
Redeploy with docker compose up -d --build: plain docker compose up -d after a git pull keeps running the image built from the older checkout, which is the likely way the old builder ran here.
Model: opus-5-5
@sneak, two facts to finish the cause for the record:
1. On fsn1app1: the output of `docker version --format '{{.Server.Version}}'`.
2. After your redeploy of upaas from `main`: did the webhooker build log start with BuildKit lines (`#1 [internal] load build definition from Dockerfile`) instead of `Step 1/33`, and did it get past `RUN --network=none`? If you still have the old upaas image, `docker image inspect --format '{{.Created}}' <image>` dates it; before 2026-09-23 12:45 means it predates the BuildKit change.
Redeploy with `docker compose up -d --build`: plain `docker compose up -d` after a `git pull` keeps running the image built from the older checkout, which is the likely way the old builder ran here.
Model: opus-5-5
Cause so far: Docker runs BuildKit whenever the build request asks for it (moby's build route reads version=2 unconditionally, checked in the vendored v27 source), and the Go client always sends it. The failing log is legacy-builder output, so the upaas that ran it did not ask for BuildKit: it was built before #221. Its footer shows dev, so the commit cannot be read off it (#236 fixes that). The Docker version and the result of the redeploy from main are asked above.
Code defects on next, fixed here whatever the answer:
streamBuildOutput (internal/docker/client.go) passes Docker's error/errorDetail line through as text and returns nil. performBuild then inspects a tag that was never created and reports "failed to inspect image". Fix: a build output line carrying an error ends the build with that error message, and no inspect happens after a failed build.
buildImage (internal/service/deploy/deploy.go) closes the build log writer in a defer that runs after failDeployment has appended the error. The tail of the build output therefore lands after the ERROR line. Flush the build output to the log before the failure is recorded.
Never fall back silently: a daemon whose API version is too old to accept the BuildKit request ignores it and runs the legacy builder. Before building, compare the negotiated API version with the minimum that runs BuildKit without experimental mode (believed 1.39, Docker 18.09; confirm from moby's history). Below it, fail the deploy with an error that names the daemon's version and says to upgrade Docker Engine. A plain version comparison; no inspecting build output to guess the builder.
README, Compose section: to update, run git pull and then docker compose up -d --build. Also state the minimum Docker Engine for building with BuildKit, and for RUN --network in a Dockerfile without a # syntax= line (believed 23.0; confirm).
Tests use the fake Docker API: a build whose output ends in an error returns that message, the log order of item 2, and the version check.
Model: opus-5-5
Plan.
Cause so far: Docker runs BuildKit whenever the build request asks for it (moby's build route reads `version=2` unconditionally, checked in the vendored v27 source), and the Go client always sends it. The failing log is legacy-builder output, so the upaas that ran it did not ask for BuildKit: it was built before https://git.eeqj.de/sneak/upaas/pulls/221. Its footer shows `dev`, so the commit cannot be read off it (https://git.eeqj.de/sneak/upaas/issues/236 fixes that). The Docker version and the result of the redeploy from `main` are asked above.
Code defects on `next`, fixed here whatever the answer:
1. `streamBuildOutput` (`internal/docker/client.go`) passes Docker's `error`/`errorDetail` line through as text and returns nil. `performBuild` then inspects a tag that was never created and reports "failed to inspect image". Fix: a build output line carrying an error ends the build with that error message, and no inspect happens after a failed build.
2. `buildImage` (`internal/service/deploy/deploy.go`) closes the build log writer in a defer that runs after `failDeployment` has appended the error. The tail of the build output therefore lands after the ERROR line. Flush the build output to the log before the failure is recorded.
3. Never fall back silently: a daemon whose API version is too old to accept the BuildKit request ignores it and runs the legacy builder. Before building, compare the negotiated API version with the minimum that runs BuildKit without experimental mode (believed 1.39, Docker 18.09; confirm from moby's history). Below it, fail the deploy with an error that names the daemon's version and says to upgrade Docker Engine. A plain version comparison; no inspecting build output to guess the builder.
4. README, Compose section: to update, run `git pull` and then `docker compose up -d --build`. Also state the minimum Docker Engine for building with BuildKit, and for `RUN --network` in a Dockerfile without a `# syntax=` line (believed 23.0; confirm).
5. Tests use the fake Docker API: a build whose output ends in an error returns that message, the log order of item 2, and the version check.
Model: opus-5-5
sneak
was assigned by clawbot2026-09-29 11:13:12 +02:00
Both versions the plan marked "believed" are confirmed from moby's source. Docker Engine 18.09 (API 1.39) is the first to build with BuildKit without experimental mode: 18.06 refuses the request, and older engines ignore it. 23.0 is the first whose built-in Dockerfile frontend knows RUN --network: 20.10 ships BuildKit 0.8, where that flag is compiled out.
That also narrows the cause. On 20.10 or older, the legacy builder rejects --network as an unknown flag. The message in the log, "the --network option requires BuildKit", comes only from 23.0 or later. So fsn1app1's Docker is new enough, and the old builder ran because the upaas there did not ask for BuildKit. Redeploying upaas with docker compose up -d --build should fix it; no Docker upgrade is needed.
Model: opus-5-5
https://git.eeqj.de/sneak/upaas/pulls/245 implements the plan.
Both versions the plan marked "believed" are confirmed from moby's source. Docker Engine 18.09 (API 1.39) is the first to build with BuildKit without experimental mode: 18.06 refuses the request, and older engines ignore it. 23.0 is the first whose built-in Dockerfile frontend knows `RUN --network`: 20.10 ships BuildKit 0.8, where that flag is compiled out.
That also narrows the cause. On 20.10 or older, the legacy builder rejects `--network` as an unknown flag. The message in the log, "the --network option requires BuildKit", comes only from 23.0 or later. So fsn1app1's Docker is new enough, and the old builder ran because the upaas there did not ask for BuildKit. Redeploying upaas with `docker compose up -d --build` should fix it; no Docker upgrade is needed.
Model: opus-5-5
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
sneak, deploying webhooker
mainunder upaas on fsn1app1 (2026-09-29, in chat, verbatim):What the log shows: the build ran on Docker's legacy builder (
Step 6/33,---> Running in), which rejectsRUN --network=none.main(2102a248) asks for BuildKit ininternal/docker/client.go(Version: dockertypes.BuilderBuildKit, from PR 221), so either fsn1app1 runs an upaas older than that, or the daemon there falls back to the legacy builder despite the request. Separately, the deploy log reports the failure as "failed to inspect image" instead of the build's own error.Definition of done:
next, upaas builds every app with BuildKit, or fails the deploy with a message that says BuildKit is unavailable on the daemon and what to do; it never silently uses the legacy builder.RUN --network=none(webhooker'smainis the test case) builds and deploys under upaas, shown by a test or a recorded run.Model: opus-5-5
@sneak, two facts to finish the cause for the record:
docker version --format '{{.Server.Version}}'.main: did the webhooker build log start with BuildKit lines (#1 [internal] load build definition from Dockerfile) instead ofStep 1/33, and did it get pastRUN --network=none? If you still have the old upaas image,docker image inspect --format '{{.Created}}' <image>dates it; before 2026-09-23 12:45 means it predates the BuildKit change.Redeploy with
docker compose up -d --build: plaindocker compose up -dafter agit pullkeeps running the image built from the older checkout, which is the likely way the old builder ran here.Model: opus-5-5
Plan.
Cause so far: Docker runs BuildKit whenever the build request asks for it (moby's build route reads
version=2unconditionally, checked in the vendored v27 source), and the Go client always sends it. The failing log is legacy-builder output, so the upaas that ran it did not ask for BuildKit: it was built before #221. Its footer showsdev, so the commit cannot be read off it (#236 fixes that). The Docker version and the result of the redeploy frommainare asked above.Code defects on
next, fixed here whatever the answer:streamBuildOutput(internal/docker/client.go) passes Docker'serror/errorDetailline through as text and returns nil.performBuildthen inspects a tag that was never created and reports "failed to inspect image". Fix: a build output line carrying an error ends the build with that error message, and no inspect happens after a failed build.buildImage(internal/service/deploy/deploy.go) closes the build log writer in a defer that runs afterfailDeploymenthas appended the error. The tail of the build output therefore lands after the ERROR line. Flush the build output to the log before the failure is recorded.git pulland thendocker compose up -d --build. Also state the minimum Docker Engine for building with BuildKit, and forRUN --networkin a Dockerfile without a# syntax=line (believed 23.0; confirm).Model: opus-5-5
#245 implements the plan.
Both versions the plan marked "believed" are confirmed from moby's source. Docker Engine 18.09 (API 1.39) is the first to build with BuildKit without experimental mode: 18.06 refuses the request, and older engines ignore it. 23.0 is the first whose built-in Dockerfile frontend knows
RUN --network: 20.10 ships BuildKit 0.8, where that flag is compiled out.That also narrows the cause. On 20.10 or older, the legacy builder rejects
--networkas an unknown flag. The message in the log, "the --network option requires BuildKit", comes only from 23.0 or later. So fsn1app1's Docker is new enough, and the old builder ran because the upaas there did not ask for BuildKit. Redeploying upaas withdocker compose up -d --buildshould fix it; no Docker upgrade is needed.Model: opus-5-5