# syntax=docker/dockerfile:1.2.1

# See documentation here:
# https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md

# Moonfire NVR development environment, using the build platform.
FROM --platform=$BUILDPLATFORM ubuntu:20.04 AS dev
LABEL maintainer="slamb@slamb.org"
ARG TARGETARCH
ARG BUILDARCH
ARG BUILD_UID=1000
ARG BUILD_GID=1000
LABEL maintainer="slamb@slamb.org"
ENV LC_ALL=C.UTF-8
COPY docker/dev.bash /
RUN /dev.bash
USER moonfire-nvr:moonfire-nvr
WORKDIR /var/lib/moonfire-nvr
CMD	[ "/bin/bash", "--login" ]

# Build the webpack with node_modules and ui-dist outside the src dir.
FROM dev AS build-webpack
LABEL maintainer="slamb@slamb.org"
RUN --mount=type=bind,target=/var/lib/moonfire-nvr/src,readonly \
    ln -s src/package.json src/yarn.lock src/ui-src src/webpack . && \
    yarn install && yarn build && rm -rf node_modules

# Build the Rust components. Note that dev.sh set up an environment variable
# in .buildrc that similarly changes the target dir path.
FROM dev AS build-server
LABEL maintainer="slamb@slamb.org"
RUN --mount=type=bind,target=/var/lib/moonfire-nvr/src,readonly \
    bash -c 'set -o xtrace && source ~/.buildrc && cd src && cargo test && cargo build --release'

# Deployment environment, now in the target platform.
FROM --platform=$TARGETPLATFORM ubuntu:20.04 AS deploy
ARG DEPLOY_UID=10000
ARG DEPLOY_GID=10000
LABEL maintainer="slamb@slamb.org"
ENV LC_ALL=C.UTF-8
RUN export DEBIAN_FRONTEND=noninteractive && \
    apt-get update && \
    apt-get install --assume-yes --no-install-recommends \
        ffmpeg \
        libncurses6 \
        libncursesw6 \
        locales \
        sudo \
        sqlite3 \
        tzdata \
        vim-nox && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    groupadd \
        --gid="${DEPLOY_GID}" \
        moonfire-nvr && \
    useradd \
        --no-log-init \
        --home-dir=/var/lib/moonfire-nvr \
        --uid="${DEPLOY_UID}" \
        --gid=moonfire-nvr \
        --shell=/bin/bash \
        --create-home \
        moonfire-nvr && \
    ln -s moonfire-nvr /usr/local/bin/nvr
COPY --from=build-server /var/lib/moonfire-nvr/moonfire-nvr /usr/local/bin/moonfire-nvr
COPY --from=build-webpack /var/lib/moonfire-nvr/ui-dist /usr/local/lib/moonfire-nvr/ui

USER moonfire-nvr:moonfire-nvr
WORKDIR /var/lib/moonfire-nvr
ENTRYPOINT [ "/usr/local/bin/moonfire-nvr" ]
