Heroku dev deps (#19431)
* fix: req.csrfToken doesn't always exist (e.g. 500 page) * feat: update dockerfile and add nextjs to build * fix: run linter * move @babel deps -> dev deps * move webpack looking things from deps -> dev deps * move pa11y-ci to optional dep * explicitly include optional deps for pa11y * allow heroku dev deps to be installed * fix: update postcss module * fix: update dockerfile build * tmp: disable renderReact * see if another deploy is slower/faster * move a few more packages to devDeps * upgrade to package-lock v2 * use dayjs instead of date-fns * move cross-env to devDeps * remove unused 'del' package * commit husky precommit hooks * add hrtime to clone-for-build.js * Revert "add hrtime to clone-for-build.js" This reverts commit 70ee647bacce833f4ed2f621f62c63c1d85e5413. * update babel/eslint * fix: remove unused plugin * try a .slugignore * fix: heroku-postbuild to use npm run build * fix: i cannot spell dereferenced * add .next/cache to heroku cacheDirectories * test cached build * remove aws-sdk, see what breaks * move jest-puppeteer to optional deps * fix: update browser-test.yml to use newer node version * move jimp to optional dependencies * move puppeteer to optional dependencies * fix: ci optional include * fix: bad copy pasta * remove previous react experiment * update tests/README.md with note about optional deps * bump node test version back to 14 * convert package-lock back to v1 * fix: use node 15.x to leverage npm optional deps * fix: optional dep install * test: see what happens with heroku/nodejs-typescript buildpack * back to heroku/nodejs buildpack * move jest to optional * revert jest move * remove .slugignore * cleanup dockerfile, move xlsx-population to optional, add comment about optional deps * Update Dockerfile Co-authored-by: James M. Greene <JamesMGreene@github.com> Co-authored-by: James M. Greene <JamesMGreene@github.com>
This commit is contained in:
58
Dockerfile
58
Dockerfile
@@ -3,25 +3,62 @@
|
||||
# It uses two multi-stage builds: `install` and the main build to keep the image size down.
|
||||
|
||||
# --------------------------------------------------------------------------------
|
||||
# INSTALL IMAGE
|
||||
# A temporary image that installs production-only dependencies and builds the production-ready front-end bundles.
|
||||
# BASE IMAGE
|
||||
# --------------------------------------------------------------------------------
|
||||
FROM node:16.2.0-alpine as base
|
||||
|
||||
RUN apk add --no-cache make g++ git
|
||||
|
||||
FROM node:14-alpine as install
|
||||
RUN apk add --no-cache python make g++
|
||||
ENV NODE_ENV production
|
||||
WORKDIR /usr/src/docs
|
||||
|
||||
|
||||
# ---------------
|
||||
# ALL DEPS
|
||||
# ---------------
|
||||
FROM base as all_deps
|
||||
|
||||
COPY package*.json ./
|
||||
|
||||
RUN npm ci
|
||||
|
||||
|
||||
# ---------------
|
||||
# PROD DEPS
|
||||
# ---------------
|
||||
FROM all_deps as prod_deps
|
||||
|
||||
RUN npm prune --production
|
||||
|
||||
|
||||
# ---------------
|
||||
# BUILDER
|
||||
# ---------------
|
||||
FROM all_deps as builder
|
||||
|
||||
ENV NODE_ENV production
|
||||
|
||||
COPY javascripts ./javascripts
|
||||
COPY stylesheets ./stylesheets
|
||||
COPY pages ./pages
|
||||
COPY components ./components
|
||||
COPY lib ./lib
|
||||
|
||||
# one part of the build relies on this content file to pull all-products
|
||||
COPY content/index.md ./content/index.md
|
||||
|
||||
COPY webpack.config.js ./webpack.config.js
|
||||
RUN npm ci --production
|
||||
COPY next.config.js ./next.config.js
|
||||
COPY tsconfig.json ./tsconfig.json
|
||||
|
||||
RUN npx tsc
|
||||
|
||||
RUN npm run build
|
||||
|
||||
# --------------------------------------------------------------------------------
|
||||
# MAIN IMAGE
|
||||
# --------------------------------------------------------------------------------
|
||||
|
||||
FROM node:14-alpine
|
||||
FROM node:16.2.0-alpine as production
|
||||
|
||||
# Let's make our home
|
||||
WORKDIR /usr/src/docs
|
||||
@@ -32,11 +69,12 @@ RUN chown node:node /usr/src/docs -R
|
||||
# This should be our normal running user
|
||||
USER node
|
||||
|
||||
# Copy our dependencies
|
||||
COPY --chown=node:node --from=install /usr/src/docs/node_modules /usr/src/docs/node_modules
|
||||
# Copy just our prod dependencies
|
||||
COPY --chown=node:node --from=prod_deps /usr/src/docs/node_modules /usr/src/docs/node_modules
|
||||
|
||||
# Copy our front-end code
|
||||
COPY --chown=node:node --from=install /usr/src/docs/dist /usr/src/docs/dist
|
||||
COPY --chown=node:node --from=builder /usr/src/docs/dist /usr/src/docs/dist
|
||||
COPY --chown=node:node --from=builder /usr/src/docs/.next /usr/src/docs/.next
|
||||
|
||||
# We should always be running in production mode
|
||||
ENV NODE_ENV production
|
||||
|
||||
Reference in New Issue
Block a user