# the frontend builder
# cloudreve need node.js 16* to build frontend,
# separate build step and custom image tag will resolve this
FROM node:16-alpine as cloudreve_frontend_builder

RUN apk update \
    && apk add --no-cache wget curl git yarn zip bash \
    && git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git /cloudreve_frontend

# build frontend assets using build script, make sure all the steps just follow the regular release
WORKDIR /cloudreve_frontend
ENV GENERATE_SOURCEMAP false
RUN chmod +x ./build.sh && ./build.sh -a


# the backend builder
# cloudreve backend needs golang 1.18* to build
FROM golang:1.18-alpine as cloudreve_backend_builder

# install dependencies and build tools
RUN apk update \
    # install dependencies and build tools
    && apk add --no-cache wget curl git build-base gcc abuild binutils binutils-doc gcc-doc zip bash \
    && git clone --recurse-submodules https://github.com/cloudreve/Cloudreve.git /cloudreve_backend

WORKDIR /cloudreve_backend
COPY --from=cloudreve_frontend_builder /cloudreve_frontend/assets.zip ./
RUN chmod +x ./build.sh && ./build.sh -c


# TODO: merge the frontend build and backend build into a single one image
# the final published image
FROM alpine:latest

WORKDIR /cloudreve
COPY --from=cloudreve_backend_builder /cloudreve_backend/cloudreve ./cloudreve

RUN apk update \
    && apk add --no-cache tzdata \
    && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && chmod +x ./cloudreve \
    && mkdir -p /data/aria2 \
    && chmod -R 766 /data/aria2

EXPOSE 5212
VOLUME ["/cloudreve/uploads", "/cloudreve/avatar", "/data"]

ENTRYPOINT ["./cloudreve"]