+2
.dockerignore
+2
.dockerignore
+21
.tangled/workflows/docker.yml
+21
.tangled/workflows/docker.yml
···
···
1
+
when:
2
+
- event: ["push"]
3
+
branch: main
4
+
# tag: ["v*"]
5
+
6
+
engine: nixery
7
+
8
+
dependencies:
9
+
nixpkgs:
10
+
- docker
11
+
12
+
steps:
13
+
- name: build
14
+
command: |
15
+
VCS_REF=$(git rev-parse HEAD)
16
+
BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
17
+
VERSION=$(git describe --tags --abbrev=0)
18
+
19
+
echo $VCS_REF
20
+
echo $BUILD_DATE
21
+
echo $VERSION
+35
-13
Dockerfile
+35
-13
Dockerfile
···
1
FROM node:24-alpine AS base
2
ENV PNPM_HOME="/pnpm"
3
ENV PATH="$PNPM_HOME:$PATH"
4
-
ENV NODE_ENV=production
5
RUN corepack enable
6
7
FROM base AS build
8
-
COPY . /app
9
WORKDIR /app
10
11
-
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
12
-
RUN pnpm run -r build
13
-
RUN pnpm deploy --filter=./apps/web --prod /prod/web
14
-
RUN pnpm deploy --filter=./apps/bot --prod /prod/bot
15
-
RUN pnpm deploy --filter=./apps/tapper --prod /prod/tapper
16
17
FROM base AS web
18
-
COPY --from=build /prod/web /prod/web
19
WORKDIR /prod/web
20
EXPOSE 8002
21
-
CMD ["pnpm", "start"]
22
23
FROM base AS bot
24
-
COPY --from=build /prod/bot /prod/bot
25
WORKDIR /prod/bot
26
-
CMD ["pnpm", "start"]
27
28
FROM base AS tapper
29
-
COPY --from=build /prod/tapper /prod/tapper
30
WORKDIR /prod/tapper
31
-
CMD ["pnpm", "start"]
···
1
FROM node:24-alpine AS base
2
ENV PNPM_HOME="/pnpm"
3
ENV PATH="$PNPM_HOME:$PATH"
4
RUN corepack enable
5
+
USER 1000
6
+
7
+
ARG VERSION
8
+
ARG BUILD_DATE
9
+
ARG SHA
10
11
FROM base AS build
12
+
COPY --chown=1000:1000 /apps/bot /app
13
+
COPY --chown=1000:1000 /apps/tapper /app
14
+
COPY --chown=1000:1000 /apps/web /app
15
+
16
+
COPY --chown=1000:1000 /packages/common /app
17
+
COPY --chown=1000:1000 /packages/database /app
18
+
COPY --chown=1000:1000 /packages/tsconfig /app
19
+
20
+
COPY --chown=1000:1000 package.json pnpm-lock.yaml pnpm-workspace.yaml /app/
21
WORKDIR /app
22
23
+
RUN --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
30
FROM base AS web
31
+
COPY --from=build --chown=1000:1000 /prod/web /prod/web
32
WORKDIR /prod/web
33
EXPOSE 8002
34
+
CMD ["node", "dist/index.js"]
35
36
FROM base AS bot
37
+
COPY --from=build --chown=1000:1000 /prod/bot /prod/bot
38
WORKDIR /prod/bot
39
+
CMD ["node", "dist/main.js"]
40
41
FROM base AS tapper
42
+
COPY --from=build --chown=1000:1000 /prod/tapper /prod/tapper
43
WORKDIR /prod/tapper
44
+
CMD ["node", "dist/index.js"]
45
+
46
+
LABEL 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"
+1
docker-compose.prod.yml
+1
docker-compose.prod.yml
-1
package.json
-1
package.json