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