hexlet-codebattle/codebattle

View on GitHub
services/app/Dockerfile.codebattle

Summary

Maintainability
Test Coverage
FROM node:18.15.0 AS assets-image
ENV MIX_ENV=prod

WORKDIR /tmp

RUN mkdir -p codebattle/assets

WORKDIR /tmp/codebattle/assets

COPY apps/codebattle/package.json .
COPY apps/codebattle/yarn.lock .

RUN yarn install --froze-lockfile

COPY apps/codebattle/postcss.config.js .
COPY apps/codebattle/.babelrc .
COPY apps/codebattle/webpack ./webpack
COPY apps/codebattle/assets ./assets
COPY apps/codebattle/priv/gettext ./priv/gettext

RUN yarn build

FROM elixir:1.16 AS compile-image
ARG GIT_HASH

ENV APP_VERSION=$GIT_HASH
ENV MIX_ENV=prod

WORKDIR /opt/app

RUN mix local.hex --force \
  && mix local.rebar --force

COPY mix.exs .
COPY mix.lock .
COPY config ./config
COPY apps/runner/mix.exs apps/runner/mix.exs
COPY apps/phoenix_gon/mix.exs apps/phoenix_gon/mix.exs
COPY apps/codebattle/mix.exs apps/codebattle/mix.exs

RUN mix do deps.get --only prod, compile

COPY ./apps/codebattle/ ./apps/codebattle/
COPY ./apps/runner/ ./apps/runner/
COPY ./apps/phoenix_gon/ ./apps/phoenix_gon/

COPY --from=assets-image /tmp/codebattle/assets/priv/static ./apps/codebattle/priv/static

RUN mix phx.digest

RUN mix release codebattle \
  && mv _build/prod/rel/codebattle /opt/release

FROM nginx:alpine AS nginx-assets

COPY nginx.conf /etc/nginx/conf.d/default.conf

COPY --from=compile-image /opt/release/lib/codebattle-0.1.0/priv/static/assets/ /var/www/assets

FROM elixir:1.16 AS runtime-image

RUN apt-get update && apt-get install --no-install-recommends -y ca-certificates wkhtmltopdf git make curl vim \
  && rm -rf /var/lib/apt/lists/*

ARG GIT_HASH

ENV APP_VERSION=$GIT_HASH
ENV PORT=4000
ENV MIX_ENV=prod
EXPOSE ${PORT}
WORKDIR /opt/app
COPY --from=compile-image /opt/release .
COPY Makefile Makefile
CMD exec /opt/app/bin/codebattle start