mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
fix(docker): use BUILDPLATFORM for caire to fix amd64 cross-compilation on Apple Silicon
The caire-builder stage now runs the Go toolchain on the native build platform instead of under QEMU emulation. For cross-arch builds (arm64 host → amd64 image) CGO_ENABLED=0 avoids needing a full C cross-toolchain; the display window is unused in server mode anyway. The binary is staged to /tmp/caire so the COPY path is stable across both native and cross-compiled builds.
This commit is contained in:
+28
-9
@@ -38,16 +38,35 @@ RUN --mount=type=cache,id=turbo-cache,target=/app/.turbo \
|
|||||||
# ============================================
|
# ============================================
|
||||||
# Stage 2: Build caire (content-aware resize)
|
# Stage 2: Build caire (content-aware resize)
|
||||||
# ============================================
|
# ============================================
|
||||||
FROM golang:1.23-bookworm AS caire-builder
|
# Run the Go toolchain on the native build platform to avoid QEMU crashes
|
||||||
|
# on Apple Silicon when cross-compiling for linux/amd64.
|
||||||
|
FROM --platform=$BUILDPLATFORM golang:1.23-bookworm AS caire-builder
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
ARG TARGETOS=linux
|
||||||
libwayland-dev libx11-dev libx11-xcb-dev libxkbcommon-x11-dev \
|
ARG TARGETARCH
|
||||||
libgles2-mesa-dev libegl1-mesa-dev libffi-dev libxcursor-dev \
|
|
||||||
libxrandr-dev libxinerama-dev libxi-dev libxxf86vm-dev \
|
|
||||||
libvulkan-dev libxfixes-dev pkg-config \
|
|
||||||
&& rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
RUN go install github.com/esimov/caire/cmd/caire@v1.5.0
|
# Graphics libs are only needed for native-arch CGO builds (the display window).
|
||||||
|
# For cross-arch builds we use CGO_ENABLED=0 — the server never shows a display.
|
||||||
|
RUN NATIVE=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') && \
|
||||||
|
if [ "$TARGETARCH" = "$NATIVE" ]; then \
|
||||||
|
apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
libwayland-dev libx11-dev libx11-xcb-dev libxkbcommon-x11-dev \
|
||||||
|
libgles2-mesa-dev libegl1-mesa-dev libffi-dev libxcursor-dev \
|
||||||
|
libxrandr-dev libxinerama-dev libxi-dev libxxf86vm-dev \
|
||||||
|
libvulkan-dev libxfixes-dev pkg-config \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build and copy to a fixed path so the COPY step below is always the same.
|
||||||
|
RUN NATIVE=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/') && \
|
||||||
|
if [ "$TARGETARCH" = "$NATIVE" ]; then \
|
||||||
|
go install github.com/esimov/caire/cmd/caire@v1.5.0 && \
|
||||||
|
cp /go/bin/caire /tmp/caire; \
|
||||||
|
else \
|
||||||
|
CGO_ENABLED=0 GOOS=$TARGETOS GOARCH=$TARGETARCH \
|
||||||
|
go install github.com/esimov/caire/cmd/caire@v1.5.0 && \
|
||||||
|
cp /go/bin/${TARGETOS}_${TARGETARCH}/caire /tmp/caire; \
|
||||||
|
fi
|
||||||
|
|
||||||
# ============================================
|
# ============================================
|
||||||
# Stage 3: Platform-specific base images
|
# Stage 3: Platform-specific base images
|
||||||
@@ -106,7 +125,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
&& rm -rf /var/lib/apt/lists/*
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Caire binary (content-aware seam carving)
|
# Caire binary (content-aware seam carving)
|
||||||
COPY --from=caire-builder /go/bin/caire /usr/local/bin/caire
|
COPY --from=caire-builder /tmp/caire /usr/local/bin/caire
|
||||||
|
|
||||||
# Python venv - Layer 1: Base packages (rarely change, ~3 GB)
|
# Python venv - Layer 1: Base packages (rarely change, ~3 GB)
|
||||||
RUN python3 -m venv /opt/venv && \
|
RUN python3 -m venv /opt/venv && \
|
||||||
|
|||||||
Reference in New Issue
Block a user