zwave-js-ui/docker/Dockerfile.contrib

109 lines
2.5 KiB
Docker

# NOTE: This Dockerfile only works with BuildKit enabled.
# Please find instructions on how to run it at
# https://zwave-js.github.io/zwave-js-ui/#/development/custom-docker?id=building-a-container-using-dockerfilecontrib
ARG SRC=git-clone-src
#####################
# Setup the source #
#####################
# Option 1 (default): Clone from git
FROM node:18.14.2-bullseye AS git-clone-src
ARG ZWJ_BRANCH=master
ARG ZWJ_REPOSITORY=https://github.com/zwave-js/node-zwave-js
ARG ZUI_BRANCH=master
ARG ZUI_REPOSITORY=https://github.com/zwave-js/zwave-js-ui
USER node
WORKDIR /home/node
RUN git clone -b ${ZWJ_BRANCH} ${ZWJ_REPOSITORY}
RUN git clone -b ${ZUI_BRANCH} --depth 1 ${ZUI_REPOSITORY}
# Option 2: Copy from local sources
FROM node:18.14.2-bullseye AS local-copy-src
COPY --chown=node node-zwave-js /home/node/node-zwave-js
COPY --chown=node zwave-js-ui /home/node/zwave-js-ui
#####################
# Build Environment #
#####################
FROM ${SRC} AS build
# Setup the container
USER root
### Build node-zwave-js ###
USER node
WORKDIR /home/node/node-zwave-js
RUN yarn install --immutable
RUN yarn build
# Update the version info to match the branch built
RUN yarn workspaces foreach version $(echo $(yarn node -p 'require("semver").inc(require("zwave-js/package.json").version, "prerelease")+".dev"')-$(git rev-parse --short HEAD)) --deferred && yarn version apply --all
# Pack the repo into tarballs that reference each other
RUN yarn monopack --target $(pwd) --no-version
### Build zwave-js-ui ###
WORKDIR /home/node/zwave-js-ui
# Change dependency to use local packs
RUN cat package.json \
| jq '.dependencies["zwave-js"] = "file:../node-zwave-js/zwave-js.tgz"' \
> package2.json \
&& rm package.json && mv package2.json package.json
RUN npm ci
RUN npm run build
# Prune devDependencies
RUN npm prune --production && \
rm -rf \
package-lock.json \
build \
package.sh \
src \
api \
static \
docs \
kubernetes \
test \
.github \
.vscode
# Copy to distribution folder
RUN mkdir my_dist \
&& cp -Lr \
.git \
bin \
config \
dist \
hass \
lib \
node_modules \
server \
snippets \
store \
views \
package.json \
my_dist
#####################
# Setup Final Image #
#####################
FROM node:18.14.2-bullseye
LABEL maintainer="robertsLando"
ENV NODE_ENV=production
RUN \
apt-get update \
&& apt-get install -y git \
&& rm -rf /var/lib/apt/lists/*
COPY --from=build /home/node/zwave-js-ui/my_dist /usr/src/app
WORKDIR /usr/src/app
EXPOSE 8091
USER root
CMD ["node", "server/bin/www"]