* First run of script * Get the app running --- ish * Get NextJS working * Remove `node:` * Get more tests passing in unit directory * Update FailBot test to use nock * Update test.yml * Update Dockerfile * tests/content fixes * Update page.js * Update build-changelog.js * updating tests/routing * Update orphan-tests.js * updating tests/rendering * Update .eslintrc.js * Update .eslintrc.js * Install jest/globals * "linting" tests * staging update to server.mjs * Change '.github/allowed-actions.js' to a ESM export * Lint * Fixes for the main package.json * Move Jest to be last in the npm test command so we can pass args * Just use 'npm run lint' in the npm test command * update algolia label script * update openapi script * update require on openapi * Update enterprise-algolia-label.js * forgot JSON.parse * Update lunr-search-index.js * Always explicitly include process.cwd() for JSON file reads pathed from project root * update graphql/update-files.js script * Update other npm scripts using jest to pass ESM NODE_OPTIONS * Update check-for-enterprise-issues-by-label.js for ESM * Update create-enterprise-issue.js for ESM * Import jest global for browser tests * Convert 'script/deploy' to ESM Co-authored-by: Grace Park <gracepark@github.com> Co-authored-by: James M. Greene <jamesmgreene@github.com>
104 lines
2.6 KiB
Docker
104 lines
2.6 KiB
Docker
# This Dockerfile can be used for docker-based deployments to platforms
|
|
# like Now or Moda, but it is currently _not_ used by our Heroku deployments
|
|
# It uses two multi-stage builds: `install` and the main build to keep the image size down.
|
|
|
|
# --------------------------------------------------------------------------------
|
|
# BASE IMAGE
|
|
# --------------------------------------------------------------------------------
|
|
FROM node:16.2.0-alpine as base
|
|
|
|
RUN apk add --no-cache make g++ git
|
|
|
|
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
|
|
COPY next.config.js ./next.config.js
|
|
COPY tsconfig.json ./tsconfig.json
|
|
|
|
RUN npx tsc
|
|
|
|
# We need to copy data in order to do the build
|
|
COPY --chown=node:node data ./data
|
|
|
|
RUN npm run build
|
|
|
|
# --------------------------------------------------------------------------------
|
|
# MAIN IMAGE
|
|
# --------------------------------------------------------------------------------
|
|
|
|
FROM node:16.2.0-alpine as production
|
|
|
|
# Let's make our home
|
|
WORKDIR /usr/src/docs
|
|
|
|
# Ensure our node user owns the directory we're using
|
|
RUN chown node:node /usr/src/docs -R
|
|
|
|
# This should be our normal running user
|
|
USER node
|
|
|
|
# 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=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
|
|
|
|
# Use Lunr instead of Algolia
|
|
ENV AIRGAP true
|
|
|
|
# Copy only what's needed to run the server
|
|
COPY --chown=node:node assets ./assets
|
|
COPY --chown=node:node content ./content
|
|
COPY --chown=node:node includes ./includes
|
|
COPY --chown=node:node layouts ./layouts
|
|
COPY --chown=node:node lib ./lib
|
|
COPY --chown=node:node middleware ./middleware
|
|
COPY --chown=node:node translations ./translations
|
|
COPY --chown=node:node server.mjs ./server.mjs
|
|
COPY --chown=node:node package*.json ./
|
|
COPY --chown=node:node feature-flags.json ./
|
|
|
|
EXPOSE 80
|
|
EXPOSE 443
|
|
EXPOSE 4000
|
|
CMD ["node", "server.mjs"]
|