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
5
6USER root
7RUN mkdir -p /prod/web /prod/bot /prod/tapper && chown -R 1000:1000 /prod
8USER 1000
9
10ARG BUILD_DATE
11ARG SHA
12ARG VERSION
13ARG DID
14
15FROM base AS build
16COPY --chown=1000:1000 apps/bot /app
17COPY --chown=1000:1000 apps/tapper /app
18COPY --chown=1000:1000 apps/web /app
19
20COPY --chown=1000:1000 packages/common /app
21COPY --chown=1000:1000 packages/database /app
22COPY --chown=1000:1000 packages/tsconfig /app
23
24COPY --chown=1000:1000 package.json pnpm-lock.yaml pnpm-workspace.yaml /app/
25WORKDIR /app
26
27RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
28RUN pnpm run -r build
29RUN pnpm deploy --filter=./apps/web --prod /prod/web
30RUN pnpm deploy --filter=./apps/bot --prod /prod/bot
31RUN pnpm deploy --filter=./apps/tapper --prod /prod/tapper
32
33
34FROM base AS web
35COPY --from=build --chown=1000:1000 /prod/web /prod/web
36WORKDIR /prod/web
37EXPOSE 8002
38CMD ["node", "dist/index.js"]
39LABEL org.opencontainers.image.authors="Dane Miller 'me@dane.computer'" \
40 org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \
41 org.opencontainers.image.title="discostuweb" \
42 org.opencontainers.image.description="The web service for authentication for the disco stu discord bot" \
43 org.opencontainers.image.version=$VERSION \
44 org.opencontainers.image.created=$BUILD_DATE \
45 org.opencontainers.image.revision=$SHA \
46 org.opencontainers.image.licenses="MIT"
47
48
49FROM base AS bot
50COPY --from=build --chown=1000:1000 /prod/bot /prod/bot
51WORKDIR /prod/bot
52CMD ["node", "dist/main.js"]
53LABEL org.opencontainers.image.authors="Dane Miller 'me@dane.computer'" \
54 org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \
55 org.opencontainers.image.title="discostubot" \
56 org.opencontainers.image.description="A discord bot that displays your music listens based on your teal.fm records" \
57 org.opencontainers.image.version=$VERSION \
58 org.opencontainers.image.created=$BUILD_DATE \
59 org.opencontainers.image.revision=$SHA \
60 org.opencontainers.image.licenses="MIT"
61
62
63FROM base AS tapper
64COPY --from=build --chown=1000:1000 /prod/tapper /prod/tapper
65WORKDIR /prod/tapper
66CMD ["node", "dist/index.js"]
67LABEL org.opencontainers.image.authors="Dane Miller 'me@dane.computer'" \
68 org.opencontainers.image.source="https://tangled.org/${DID}/tealfmbot" \
69 org.opencontainers.image.title="discostutap" \
70 org.opencontainers.image.description="The backfill and firehose listener for teal.fm records" \
71 org.opencontainers.image.version=$VERSION \
72 org.opencontainers.image.created=$BUILD_DATE \
73 org.opencontainers.image.revision=$SHA \
74 org.opencontainers.image.licenses="MIT"