diff --git a/Dockerfile b/Dockerfile index 02b650d..d0891b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,18 @@ -FROM node:16-alpine +# We can't use alpine anymore because crypto has rust deps. +FROM node:16-slim COPY . /tmp/src RUN cd /tmp/src \ && yarn install \ && yarn build \ && mv lib/ /mjolnir/ \ && mv node_modules / \ + && mv mjolnir-entrypoint.sh / \ && cd / \ && rm -rf /tmp/* ENV NODE_ENV=production ENV NODE_CONFIG_DIR=/data/config -CMD node /mjolnir/index.js +CMD ["bot"] +ENTRYPOINT ["./mjolnir-entrypoint.sh"] VOLUME ["/data"] diff --git a/mjolnir-entrypoint.sh b/mjolnir-entrypoint.sh new file mode 100755 index 0000000..3f90255 --- /dev/null +++ b/mjolnir-entrypoint.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +# This is used as the entrypoint in the mjolnir Dockerfile. +# We want to transition away form people running the image without specifying `bot` or `appservice`. +# So if eventually cli arguments are provided for the bot version, we want this to be the opportunity to move to `bot`. +# Therefore using arguments without specifying `bot` (or appservice) is unsupported. +# We maintain the behaviour where if it looks like someone is providing an executable to `docker run`, then we will execute that instead. +# This aids configuration and debugging of the image if for example node needed to be started via another method. +case "$1" in + bot) shift; set -- node /mjolnir/index.js "$@";; + appservice) shift; set -- node /mjolnir/appservice/cli.js "$@";; +esac + +exec "$@";