Просмотр исходного кода

WIP: rewrite Dockerfile with turbo prune

Yuki Takei 3 лет назад
Родитель
Сommit
762565652b
3 измененных файлов с 33 добавлено и 53 удалено
  1. 4 1
      .gitignore
  2. 27 52
      apps/app/docker/Dockerfile
  3. 2 0
      apps/app/docker/Dockerfile.dockerignore

+ 4 - 1
.gitignore

@@ -34,7 +34,10 @@ yarn-error.log*
 *.tfstate.*
 
 # IDE, dev #
-.turbo
 .idea
 *.orig
 *.code-workspace
+
+# turborepo
+.turbo
+out

+ 27 - 52
apps/app/docker/Dockerfile

@@ -2,49 +2,44 @@
 
 
 ##
-## packages-json-picker
+## base
 ##
-FROM node:16-slim AS packages-json-picker
+FROM node:18-slim AS base
 
 ENV optDir /opt
 
 WORKDIR ${optDir}
-COPY ["package.json", "yarn.lock", "lerna.json", "./"]
-COPY packages packages
-# Find and remove non-package.json files
-RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -print | xargs rm -rf
+
+RUN yarn global add turbo
+COPY . .
+RUN turbo prune --scope=@growi/app --docker
 
 
 ##
 ## deps-resolver
 ##
-FROM node:16-slim AS deps-resolver
+FROM node:18-slim AS deps-resolver
 
 ENV optDir /opt
 
 WORKDIR ${optDir}
 
-ENV nodeModulesGrowiPackagesDir ${optDir}/node_modules/@growi
-# expect a string seperated by commas (e.g. "A,B")
-ENV removeNodeModulesSymlinkPaths ${nodeModulesGrowiPackagesDir}/slackbot-proxy
-
 RUN set -eux; \
 	apt-get update; \
 	apt-get install -y python3 build-essential;
 
 # copy files
-COPY --from=packages-json-picker ${optDir} .
+COPY --from=base ${optDir}/out/json/ .
+COPY --from=base ${optDir}/out/yarn.lock ./yarn.lock
 
 # setup (with network-timeout = 1 hour)
 RUN yarn config set network-timeout 3600000
-RUN npx -y lerna bootstrap -- --frozen-lockfile
-
-# remove unnecessary symlinks
-RUN rm -f $(echo ${removeNodeModulesSymlinkPaths} | sed -e "s/,/ /g")
+RUN yarn --frozen-lockfile
 
 # make artifacts
 RUN tar -cf node_modules.tar \
   node_modules \
+  apps/*/node_modules \
   packages/*/node_modules
 
 
@@ -54,25 +49,31 @@ RUN tar -cf node_modules.tar \
 ##
 FROM deps-resolver AS deps-resolver-prod
 
-# remove unnecessary packages
-RUN rm -rf apps/slackbot-proxy
-
-RUN npx -y lerna bootstrap -- --production
+RUN yarn --production
 # make artifacts
 RUN tar -cf node_modules.tar \
   node_modules \
+  apps/*/node_modules \
   packages/*/node_modules
 
 
+
 ##
-## prebuilder
+## builder
 ##
-FROM node:16-slim AS prebuilder
+FROM node:18-slim AS builder
 
 ENV optDir /opt
 
 WORKDIR ${optDir}
 
+RUN yarn global add turbo
+
+# copy files
+COPY --from=base ${optDir}/out/full/ .
+COPY --from=base ${optDir}/out/yarn.lock ./yarn.lock
+COPY ["tsconfig.base.json", "./"]
+
 # copy dependent packages
 COPY --from=deps-resolver \
   ${optDir}/node_modules.tar ${optDir}/
@@ -81,34 +82,8 @@ COPY --from=deps-resolver \
 RUN tar -xf node_modules.tar
 RUN rm node_modules.tar
 
-
-
-##
-## builder
-##
-FROM prebuilder AS builder
-
-ENV optDir /opt
-
-WORKDIR ${optDir}
-
-# ignore eslint and stylelint
-COPY ["package.json", "lerna.json", "tsconfig.base.json", "./"]
-# copy all related packages
-COPY packages/codemirror-textlint packages/codemirror-textlint
-COPY packages/preset-themes packages/preset-themes
-COPY packages/slack packages/slack
-COPY packages/hackmd packages/hackmd
-COPY packages/presentation packages/presentation
-COPY packages/remark-drawio packages/remark-drawio
-COPY packages/remark-growi-directive packages/remark-growi-directive
-COPY packages/remark-lsx packages/remark-lsx
-COPY packages/ui packages/ui
-COPY packages/core packages/core
-COPY apps/app apps/app
-
 # build
-RUN yarn lerna run build
+RUN turbo run build
 
 # make artifacts
 RUN tar -cf packages.tar \
@@ -120,15 +95,15 @@ RUN tar -cf packages.tar \
   apps/app/tmp \
   apps/app/.env.production* \
   apps/app/next.config.js \
-  packages/*/package.json \
-  packages/*/dist
+  **/package.json \
+  **/dist
 
 
 
 ##
 ## release
 ##
-FROM node:16-slim
+FROM node:18-slim
 LABEL maintainer Yuki Takei <yuki@weseek.co.jp>
 
 ENV NODE_ENV production

+ 2 - 0
apps/app/docker/Dockerfile.dockerignore

@@ -3,3 +3,5 @@
 **/coverage
 **/Dockerfile
 **/*.dockerignore
+**/.next
+**/.turbo