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