FROM node:16 as builder

WORKDIR /app

RUN set -eux &&\
    apt update &&\
    apt install -y \
    libudev-dev \
    libusb-1.0-0-dev

COPY package*.json ./
COPY tsconfig.json ./

RUN set -eux && \
    npm install -g typescript react-scripts && \
    npm install --include=dev

COPY . .

ARG REACT_APP_ASSETS="https://assets.terra.dev" \
    REACT_APP_STATION_ASSETS="https://station-assets.terra.dev"

ENV REACT_APP_ASSETS=${REACT_APP_ASSETS} \
    REACT_APP_STATION_ASSETS=${REACT_APP_STATION_ASSETS}

RUN set -eux && \
    npm run build --openssl-legacy-provider

###############################################################################

FROM node:16 as reloader

ARG REACT_APP_ASSETS="https://assets.terra.dev" \
    REACT_APP_STATION_ASSETS="https://station-assets.terra.dev"

ENV REACT_APP_ASSETS=${REACT_APP_ASSETS} \
    REACT_APP_STATION_ASSETS=${REACT_APP_STATION_ASSETS}

# add node modules to parent directory
COPY --from=builder /app/node_modules /app/node_modules
ENV PATH=/app/node_modules/.bin:$PATH

# use bind mount to enable hot reloading
WORKDIR /app/src
COPY . .

CMD ["npm", "run", "start"]

###############################################################################

FROM node:16-alpine

WORKDIR /app
COPY --from=builder /app/build .

RUN set -eux && \
    npm install -g serve

CMD ["serve", "-s", "."]