ci: Fix Docker build and use multi-step approach (no-changelog) (#7893)

Due to new dependencies released in `1.19`, the docker build is failing
due to missing build dependencie. To get around this, we split the build
into two phases. In the building phase, we install the build
dependencies required to compile new module bindings and copy the result
in the second phase.

Github issue / Community forum post (link here to close automatically):

---------

Signed-off-by: Oleg Ivaniv <me@olegivaniv.com>
This commit is contained in:
oleg 2023-12-01 12:58:55 +01:00 committed by GitHub
parent 50a7401de9
commit bcd04981ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,31 +1,33 @@
ARG NODE_VERSION=18
FROM n8nio/base:${NODE_VERSION}
FROM n8nio/base:${NODE_VERSION} as builder
ARG N8N_VERSION
RUN if [ -z "$N8N_VERSION" ] ; then echo "The N8N_VERSION argument is missing!" ; exit 1; fi
ENV N8N_VERSION=${N8N_VERSION}
ENV NODE_ENV=production
ENV N8N_RELEASE_TYPE=stable
RUN set -eux; \
apkArch="$(apk --print-arch)"; \
case "$apkArch" in \
'armv7') apk --no-cache add --virtual build-dependencies python3 build-base;; \
esac && \
apk --no-cache add --virtual build-dependencies python3 build-base && \
npm install -g --omit=dev n8n@${N8N_VERSION} && \
case "$apkArch" in \
'armv7') apk del build-dependencies;; \
esac && \
apk del build-dependencies build-base && \
rm -rf /usr/local/lib/node_modules/n8n/node_modules/@n8n/chat && \
rm -rf /usr/local/lib/node_modules/n8n/node_modules/n8n-design-system && \
rm -rf /usr/local/lib/node_modules/n8n/node_modules/n8n-editor-ui/node_modules && \
find /usr/local/lib/node_modules/n8n -type f -name "*.ts" -o -name "*.js.map" -o -name "*.vue" | xargs rm -f && \
rm -rf /root/.npm
# Final clean image
FROM n8nio/base:${NODE_VERSION}
COPY --from=builder /usr/local/lib/node_modules/n8n /usr/local/lib/node_modules/n8n
RUN ln -s /usr/local/lib/node_modules/n8n/bin/n8n /usr/local/bin/n8n
COPY docker-entrypoint.sh /
RUN \
mkdir .n8n && \
chown node:node .n8n
ENV N8N_VERSION=${N8N_VERSION}
ENV NODE_ENV=production
ENV N8N_RELEASE_TYPE=stable
USER node
ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"]