FROM node:24-alpine AS base ENV PNPM_HOME="/pnpm" ENV PATH="$PNPM_HOME:$PATH" RUN corepack enable USER root RUN mkdir -p /prod/web /prod/bot /prod/tapper && chown -R 1000:1000 /prod USER 1000 ARG BUILD_DATE ARG SHA ARG VERSION ARG DID 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 RUN pnpm run -r build RUN pnpm deploy --filter=./apps/web --prod /prod/web RUN pnpm deploy --filter=./apps/bot --prod /prod/bot RUN 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"] LABEL org.opencontainers.image.authors="Dane Miller 'me@dane.computer'" \ org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \ org.opencontainers.image.title="discostuweb" \ org.opencontainers.image.description="The web service for authentication for the disco stu discord bot" \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.revision=$SHA \ org.opencontainers.image.licenses="MIT" FROM base AS bot COPY --from=build --chown=1000:1000 /prod/bot /prod/bot WORKDIR /prod/bot CMD ["node", "dist/main.js"] LABEL org.opencontainers.image.authors="Dane Miller 'me@dane.computer'" \ org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \ org.opencontainers.image.title="discostubot" \ org.opencontainers.image.description="A discord bot that displays your music listens based on your teal.fm records" \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.revision=$SHA \ org.opencontainers.image.licenses="MIT" 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 'me@dane.computer'" \ org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \ org.opencontainers.image.title="discostutap" \ org.opencontainers.image.description="The backfill and firehose listener for teal.fm records" \ org.opencontainers.image.version=$VERSION \ org.opencontainers.image.created=$BUILD_DATE \ org.opencontainers.image.revision=$SHA \ org.opencontainers.image.licenses="MIT"