A discord bot for teal.fm
discord
tealfm
music
1FROM node:24-alpine AS base
2ENV PNPM_HOME="/pnpm"
3ENV PATH="$PNPM_HOME:$PATH"
4RUN corepack enable
5USER 1000
6
7ARG BUILD_DATE
8ARG SHA
9
10FROM base AS build
11COPY --chown=1000:1000 /apps/bot /app
12COPY --chown=1000:1000 /apps/tapper /app
13COPY --chown=1000:1000 /apps/web /app
14
15COPY --chown=1000:1000 /packages/common /app
16COPY --chown=1000:1000 /packages/database /app
17COPY --chown=1000:1000 /packages/tsconfig /app
18
19COPY --chown=1000:1000 package.json pnpm-lock.yaml pnpm-workspace.yaml /app/
20WORKDIR /app
21
22RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile \
23 pnpm run -r build \
24 pnpm deploy --filter=./apps/web --prod /prod/web \
25 pnpm deploy --filter=./apps/bot --prod /prod/bot \
26 pnpm deploy --filter=./apps/tapper --prod /prod/tapper
27
28
29FROM base AS web
30COPY --from=build --chown=1000:1000 /prod/web /prod/web
31WORKDIR /prod/web
32EXPOSE 8002
33CMD ["node", "dist/index.js"]
34
35FROM base AS bot
36COPY --from=build --chown=1000:1000 /prod/bot /prod/bot
37WORKDIR /prod/bot
38CMD ["node", "dist/main.js"]
39
40FROM base AS tapper
41COPY --from=build --chown=1000:1000 /prod/tapper /prod/tapper
42WORKDIR /prod/tapper
43CMD ["node", "dist/index.js"]
44
45LABEL org.opencontainers.image.authors="Dane Miller <me@dane.computer>" \
46 org.opencontainers.image.source="https://tangled.org/dane.is.extraordinarily.cool/tealfmbot" \
47 org.opencontainers.image.title="discostu" \
48 org.opencontainers.image.description="A discord bot that displays your music listens based on your teal.fm records" \
49 org.opencontainers.image.created=$BUILD_DATE \
50 org.opencontainers.image.revision=$SHA \
51 org.opencontainers.image.licenses="MIT"