FROM node:21-alpine3.20 AS server-deps

WORKDIR /wavtool/server

COPY ./server/package.json ./server/yarn.lock ./
RUN yarn install --frozen-lockfile --network-timeout 100000

FROM --platform=$BUILDPLATFORM node:21-alpine3.20 AS server-tsc

WORKDIR /wavtool/server

COPY ./server/package.json ./server/yarn.lock ./
RUN yarn install --frozen-lockfile --network-timeout 100000

COPY ./server/tsconfig.json ./
COPY ./server/next.config.js ./
COPY ./server/src ./src
COPY ./server/pages ./pages
COPY ./server/next-res ./next-res

RUN yarn run tsc
RUN yarn run next build

FROM node:21-alpine3.20 AS madmom

RUN apk add --no-cache python3 python3-dev py3-pip py3-numpy py3-scipy git build-base
RUN python3 -m venv --system-site-packages /opt/venv \
 && . /opt/venv/bin/activate \
 && pip install --ignore-installed setuptools \
 && pip install 'git+https://github.com/CPJKU/madmom@0551aa8f48d71a367d92b5d3a347a0cf7cd97cc9#egg=madmom' \
 && pip cache purge

FROM node:21-alpine3.20 AS output

RUN apk add --no-cache tini lame ffmpeg curl python3 py3-numpy py3-scipy

# yt-dlp will be found on a network volume mounted here in prod/beta/staging
RUN ln -sf /live-deps/yt-dlp/yt-dlp /usr/local/bin/yt-dlp

COPY --from=madmom /opt/venv /opt/venv
ENV PATH="${PATH}:/opt/venv/bin"

WORKDIR /wavtool/server

COPY --from=server-deps /wavtool/server/package.json ./
COPY --from=server-deps /wavtool/server/node_modules ./node_modules
COPY --from=server-tsc /wavtool/server/built ./built
COPY --from=server-tsc /wavtool/server/.next ./.next
COPY --from=server-tsc /wavtool/server/next.config.js ./

EXPOSE 3001/tcp
EXPOSE 3005/tcp

ENTRYPOINT [ "/sbin/tini", "node", "./built/src/main.js" ]
