main

mattermost/focalboard

Last updated at: 28/12/2023 01:37

Dockerfile.build

TLDR

This Dockerfile is used to build Focalboard for Linux. It builds the frontend and backend parts of the application inside separate containers. The last stage of the build process holds the package, which is then copied back to the host.

END

# This Dockerfile is used to build Focalboard for Linux. It builds all the parts inside the image
# and the last stage just holds the package which is then copied back to the host.
#
# docker buildx build -f Dockerfile.build --no-cache --platform linux/amd64 -t focalboard-build:dirty --output out .
# docker buildx build -f Dockerfile.build --no-cache --platform linux/arm64 -t focalboard-build:dirty --output out .
#
# Afterwards the packages can be found in the ./out folder.

# build frontend
FROM node:16.3.0@sha256:ca6daf1543242acb0ca59ff425509eab7defb9452f6ae07c156893db06c7a9a4 AS frontend

WORKDIR /webapp
COPY webapp .

### 'CPPFLAGS="-DPNG_ARM_NEON_OPT=0"' Needed To Avoid Bug Described in: https://github.com/imagemin/optipng-bin/issues/118#issuecomment-1019838562
### Can be Removed when Ticket will be Closed
RUN CPPFLAGS="-DPNG_ARM_NEON_OPT=0" npm install --no-optional && \
    npm run pack

# build backend and package
FROM golang:1.18.3@sha256:b203dc573d81da7b3176264bfa447bd7c10c9347689be40540381838d75eebef AS backend

COPY . .
COPY --from=frontend /webapp/pack webapp/pack

ARG TARGETARCH

# RUN apt-get update && apt-get install libgtk-3-dev libwebkit2gtk-4.0-dev -y
RUN EXCLUDE_PLUGIN=true EXCLUDE_SERVER=true EXCLUDE_ENTERPRISE=true make server-linux arch=${TARGETARCH}
RUN make server-linux-package-docker arch=${TARGETARCH}

# Copy package back to host
FROM scratch AS dist
ARG TARGETARCH
COPY --from=backend /go/dist/focalboard-server-linux-${TARGETARCH}.tar.gz .