docker: Fix Dart Sass ARM64 arch mismatch, /cache permissions

Also improve the final build step.

Closes #12956
Closes #12957
Closes #12960
This commit is contained in:
David Karlsson 2024-10-17 15:42:41 +02:00 committed by GitHub
parent b5801d8b6a
commit b5852d0e68
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 14 additions and 30 deletions

View file

@ -3,7 +3,8 @@
# Website: https://gohugo.io/ # Website: https://gohugo.io/
ARG GO_VERSION="1.23.2" ARG GO_VERSION="1.23.2"
ARG ALPINE_VERSION=3.20 ARG ALPINE_VERSION="3.20"
ARG DART_SASS_VERSION="1.79.3"
FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.5.0 AS xx FROM --platform=$BUILDPLATFORM tonistiigi/xx:1.5.0 AS xx
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS gobuild FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS gobuild
@ -45,6 +46,15 @@ RUN --mount=target=. \
xx-verify /usr/bin/hugo xx-verify /usr/bin/hugo
EOT EOT
# dart-sass downloads the dart-sass runtime dependency
FROM alpine:${ALPINE_VERSION} AS dart-sass
ARG TARGETARCH
ARG DART_SASS_VERSION
ARG DART_ARCH=${TARGETARCH/amd64/x64}
WORKDIR /out
ADD https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-${DART_ARCH}.tar.gz .
RUN tar -xf dart-sass-${DART_SASS_VERSION}-linux-${DART_ARCH}.tar.gz
FROM gorun AS final FROM gorun AS final
COPY --from=build /usr/bin/hugo /usr/bin/hugo COPY --from=build /usr/bin/hugo /usr/bin/hugo
@ -54,14 +64,13 @@ RUN apk add --no-cache \
libc6-compat \ libc6-compat \
git \ git \
runuser \ runuser \
curl \
nodejs \ nodejs \
npm npm
RUN mkdir -p /var/hugo/bin && \ RUN mkdir -p /var/hugo/bin /cache && \
addgroup -Sg 1000 hugo && \ addgroup -Sg 1000 hugo && \
adduser -Sg hugo -u 1000 -h /var/hugo hugo && \ adduser -Sg hugo -u 1000 -h /var/hugo hugo && \
chown -R hugo: /var/hugo && \ chown -R hugo: /var/hugo /cache && \
# For the Hugo's Git integration to work. # For the Hugo's Git integration to work.
runuser -u hugo -- git config --global --add safe.directory /project && \ runuser -u hugo -- git config --global --add safe.directory /project && \
# See https://github.com/gohugoio/hugo/issues/9810 # See https://github.com/gohugoio/hugo/issues/9810
@ -71,15 +80,11 @@ VOLUME /project
WORKDIR /project WORKDIR /project
USER hugo:hugo USER hugo:hugo
ENV HUGO_CACHEDIR=/cache ENV HUGO_CACHEDIR=/cache
ARG BUILDARCH
ENV BUILDARCH=${BUILDARCH}
ENV PATH="/var/hugo/bin:$PATH" ENV PATH="/var/hugo/bin:$PATH"
COPY scripts/docker scripts/docker
COPY scripts/docker/entrypoint.sh /entrypoint.sh COPY scripts/docker/entrypoint.sh /entrypoint.sh
COPY --link --from=dart-sass /out/dart-sass /var/hugo/bin/dart-sass
# Install default dependencies.
RUN scripts/docker/install_runtimedeps_default.sh
# Update PATH to reflect the new dependencies. # Update PATH to reflect the new dependencies.
# For more complex setups, we should probably find a way to # For more complex setups, we should probably find a way to
# delegate this to the script itself, but this will have to do for now. # delegate this to the script itself, but this will have to do for now.
@ -92,4 +97,3 @@ EXPOSE 1313
ENTRYPOINT ["/entrypoint.sh"] ENTRYPOINT ["/entrypoint.sh"]
CMD ["--help"] CMD ["--help"]

View file

@ -1,20 +0,0 @@
#!/bin/sh
set -ex
export DART_SASS_VERSION=1.79.3
# If $BUILDARCH=arm64, then we need to install the arm64 version of Dart Sass,
# otherwise we install the x64 version.
ARCH="x64"
if [ "$BUILDARCH" = "arm64" ]; then
ARCH="arm64"
fi
cd /tmp
curl -LJO https://github.com/sass/dart-sass/releases/download/${DART_SASS_VERSION}/dart-sass-${DART_SASS_VERSION}-linux-${ARCH}.tar.gz
ls -ltr
tar -xf dart-sass-${DART_SASS_VERSION}-linux-${ARCH}.tar.gz
rm dart-sass-${DART_SASS_VERSION}-linux-${ARCH}.tar.gz && \
# The dart-sass folder is added to the PATH by the caller.
mv dart-sass /var/hugo/bin