# syntax = docker/dockerfile:1.2 ## ## deps-resolver ## FROM node:14-slim AS deps-resolver LABEL maintainer Yuki Takei ENV appDir /opt WORKDIR ${appDir} COPY ./package.json ./ COPY ./yarn.lock ./ COPY ./lerna.json ./ COPY ./packages/slack/package.json ./packages/slack/package.json COPY ./packages/slackbot-proxy/package.json ./packages/slackbot-proxy/package.json # setup RUN yarn config set network-timeout 300000 RUN npx lerna bootstrap ## ## deps-resolver-prod ## FROM node:14-slim AS deps-resolver-prod LABEL maintainer Yuki Takei ENV appDir /opt WORKDIR ${appDir} COPY ./package.json ./ COPY ./yarn.lock ./ COPY ./lerna.json ./ COPY ./packages/slack/package.json ./packages/slack/package.json COPY ./packages/slackbot-proxy/package.json ./packages/slackbot-proxy/package.json # setup RUN yarn config set network-timeout 300000 RUN npx lerna bootstrap -- --production ## ## builder ## FROM node:14-slim AS builder LABEL maintainer Yuki Takei ENV appDir /opt COPY --from=deps-resolver ${appDir}/node_modules ${appDir}/node_modules # copy all packages COPY packages ${appDir}/packages COPY ./package.json ./ COPY ./lerna.json ./ COPY ./packages/slack ./packages/slack COPY ./packages/slackbot-proxy ./packages/slackbot-proxy # build RUN npx lerna run build ## ## release ## FROM gcr.io/distroless/nodejs:14 LABEL maintainer Yuki Takei ENV appDir /opt COPY --from=builder \ ${appDir}/packages/slack/dist ${appDir}/slack COPY --from=builder \ ${appDir}/packages/slackbot-proxy/dist ${appDir}/slackbot-proxy COPY --from=deps-resolver-prod \ ${appDir}/node_modules ${appDir}/node_modules WORKDIR ${appDir}/slackbot-proxy EXPOSE 8080 CMD ["-r", "dotenv-flow/config", "dist/index.js"]