+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
1
FROM node:24-alpine AS base
2
2
ENV PNPM_HOME="/pnpm"
3
3
ENV PATH="$PNPM_HOME:$PATH"
4
-
ENV NODE_ENV=production
5
4
RUN corepack enable
5
+
USER 1000
6
+
7
+
ARG VERSION
8
+
ARG BUILD_DATE
9
+
ARG SHA
6
10
7
11
FROM base AS build
8
-
COPY . /app
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/
9
21
WORKDIR /app
10
22
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
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
+
16
29
17
30
FROM base AS web
18
-
COPY --from=build /prod/web /prod/web
31
+
COPY --from=build --chown=1000:1000 /prod/web /prod/web
19
32
WORKDIR /prod/web
20
33
EXPOSE 8002
21
-
CMD ["pnpm", "start"]
34
+
CMD ["node", "dist/index.js"]
22
35
23
36
FROM base AS bot
24
-
COPY --from=build /prod/bot /prod/bot
37
+
COPY --from=build --chown=1000:1000 /prod/bot /prod/bot
25
38
WORKDIR /prod/bot
26
-
CMD ["pnpm", "start"]
39
+
CMD ["node", "dist/main.js"]
27
40
28
41
FROM base AS tapper
29
-
COPY --from=build /prod/tapper /prod/tapper
42
+
COPY --from=build --chown=1000:1000 /prod/tapper /prod/tapper
30
43
WORKDIR /prod/tapper
31
-
CMD ["pnpm", "start"]
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
···
17
17
"web": "pnpm --filter web dev",
18
18
"build": "pnpm -r build",
19
19
"build:watch": "pnpm -r build:watch",
20
-
"docker:web": "docker build . --target web --tag web:latest",
21
20
"dev:all": "pnpm --filter './apps/**' dev",
22
21
"typecheck": "pnpm --filter './apps/**' typecheck",
23
22
"lint": "oxlint",