FROM node:24-alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable USER 1000 ARG VERSION ARG BUILD_DATE ARG SHA FROM base AS build COPY --chown=1000:1000 /apps/bot /app COPY --chown=1000:1000 /apps/tapper /app COPY --chown=1000:1000 /apps/web /app COPY --chown=1000:1000 /packages/common /app COPY --chown=1000:1000 /packages/database /app COPY --chown=1000:1000 /packages/tsconfig /app COPY --chown=1000:1000 package.json pnpm-lock.yaml pnpm-workspace.yaml /app/ WORKDIR /app RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile \ pnpm run -r build \ pnpm deploy --filter=./apps/web --prod /prod/web \ pnpm deploy --filter=./apps/bot --prod /prod/bot \ pnpm deploy --filter=./apps/tapper --prod /prod/tapper FROM base AS web COPY --from=build --chown=1000:1000 /prod/web /prod/web WORKDIR /prod/web EXPOSE 8002 CMD ["node", "dist/index.js"] FROM base AS bot COPY --from=build --chown=1000:1000 /prod/bot /prod/bot WORKDIR /prod/bot CMD ["node", "dist/main.js"] FROM base AS tapper COPY --from=build --chown=1000:1000 /prod/tapper /prod/tapper WORKDIR /prod/tapper CMD ["node", "dist/index.js"] LABEL org.opencontainers.image.authors="Dane Miller " \ org.opencontainers.image.source="https://tangled.org/dane.is.extraordinarily.cool/tealfmbot" \ org.opencontainers.image.title="discostu" \ org.opencontainers.image.description="A discord bot that displays your music listens based on your teal.fm records" \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.revision=$SHA \ org.opencontainers.image.licenses="MIT"