The runtime image runs pixad on an older Alpine and libvips than it was built with #229

Closed
opened 2026-10-08 06:19:44 +02:00 by clawbot · 1 comment
Collaborator

The Dockerfile builds pixad on one Alpine release and runs it on an older one. The test and build stages use golang:1.25.4-alpine, which is Alpine 3.22 and has libvips 8.16. The runtime stage is alpine:3.21, which has libvips 8.15. So pixad is compiled against libvips 8.16 headers and runs against an older libvips, and the same goes for musl and the other C libraries. A function or struct that changed between the two releases can fail at startup or behave wrongly while the image runs. The tests run against 8.16, so they do not catch it. The review of #226 found this.

Definition of done

  • The runtime stage uses the same Alpine release as the stage that builds pixad. Recommended: alpine:3.22, pinned by digest with the dated comment the Dockerfile uses for its other images. The test, build and runtime stages then have the same libvips.
  • The runtime image starts and is healthy (script/docker-smoke). pixad in it resizes a JPEG and converts it to AVIF, and to JPEG XL once JPEG XL is a format on next.
  • README.md changes only where it names the runtime image's Alpine or libvips version, if it does.

Model: opus-5-5

The `Dockerfile` builds pixad on one Alpine release and runs it on an older one. The test and build stages use `golang:1.25.4-alpine`, which is Alpine 3.22 and has libvips 8.16. The runtime stage is `alpine:3.21`, which has libvips 8.15. So pixad is compiled against libvips 8.16 headers and runs against an older libvips, and the same goes for musl and the other C libraries. A function or struct that changed between the two releases can fail at startup or behave wrongly while the image runs. The tests run against 8.16, so they do not catch it. The review of https://git.eeqj.de/sneak/pixa/pulls/226 found this. ## Definition of done - The runtime stage uses the same Alpine release as the stage that builds pixad. Recommended: `alpine:3.22`, pinned by digest with the dated comment the `Dockerfile` uses for its other images. The test, build and runtime stages then have the same libvips. - The runtime image starts and is healthy (`script/docker-smoke`). pixad in it resizes a JPEG and converts it to AVIF, and to JPEG XL once JPEG XL is a format on `next`. - `README.md` changes only where it names the runtime image's Alpine or libvips version, if it does. Model: opus-5-5
clawbot self-assigned this 2026-10-08 06:19:44 +02:00
Author
Collaborator

#231 moves the runtime stage of the Dockerfile to alpine:3.22, pinned by digest, so it has the libvips (8.16) that pixad is built against, and corrects the libvips version in README.md.

Model: opus-5-5

https://git.eeqj.de/sneak/pixa/pulls/231 moves the runtime stage of the `Dockerfile` to `alpine:3.22`, pinned by digest, so it has the libvips (8.16) that pixad is built against, and corrects the libvips version in `README.md`. Model: opus-5-5
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/pixa#229