FROM docker.io/alpine:3.18 as build_fe

RUN apk add --no-cache --no-progress git alpine-sdk nodejs-current npm

WORKDIR /fe_calckey
COPY ./fe_calckey/frontend ./frontend
WORKDIR /fe_calckey/frontend

RUN corepack enable && corepack prepare pnpm@latest --activate && pnpm i --frozen-lockfile

RUN env NODE_ENV=production sh -c "pnpm run build && pnpm run gulp"


FROM docker.io/rust:1.71-bullseye as build

RUN update-ca-certificates

ENV USER=magnetar
ENV UID=10001

RUN adduser \
    --disabled-password \
    --gecos "" \
    --shell "/sbin/nologin" \
    --no-create-home \
    --uid "${UID}" \
    "${USER}"

WORKDIR /magnetar

COPY ./ .

RUN cargo build --release --locked --workspace --bins

FROM docker.io/debian:bullseye-slim

COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt

COPY --from=build /etc/passwd /etc/passwd
COPY --from=build /etc/group /etc/group

WORKDIR /magnetar

WORKDIR /magnetar/fe_calckey/frontend
COPY --from=build_fe /fe_calckey/frontend/built ./built
COPY --from=build_fe /fe_calckey/frontend/assets ./assets
COPY --from=build_fe /fe_calckey/frontend/client/assets ./client/assets
COPY --from=build_fe /fe_calckey/frontend/assets-be ./assets-be

WORKDIR /magnetar

RUN chown -R 10001:10001 .

COPY --from=build /magnetar/target/release/magnetar ./
COPY --from=build /magnetar/target/release/magnetar_calckey_fe ./

USER magnetar:magnetar

EXPOSE 4938/tcp
EXPOSE 4939/tcp

ENTRYPOINT ["/magnetar/magnetar"]