+3
.tangled/workflows/typecheck.yml
+3
.tangled/workflows/typecheck.yml
Dockerfile
Dockerfile.web
Dockerfile
Dockerfile.web
+18
Dockerfile.bot
+18
Dockerfile.bot
···
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/bot --prod /prod/bot
14
+
15
+
FROM base AS bot
16
+
COPY --from=build /prod/bot /prod/bot
17
+
WORKDIR /prod/bot
18
+
CMD ["pnpm", "start"]
+18
Dockerfile.tap
+18
Dockerfile.tap
···
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/tapper --prod /prod/tapper
14
+
15
+
FROM base AS tapper
16
+
COPY --from=build /prod/tapper /prod/tapper
17
+
WORKDIR /prod/tapper
18
+
CMD ["pnpm", "start"]
+1
-1
apps/bot/deploy-commands.ts
+1
-1
apps/bot/deploy-commands.ts
···
8
8
import path from "node:path";
9
9
10
10
const commands = [];
11
-
const commandPaths = fs.globSync("commands/**/*.ts");
11
+
const commandPaths = fs.globSync("commands/**/*.js");
12
12
13
13
for await (const cmdPath of commandPaths) {
14
14
const absoluteCommandPath = path.join(import.meta.dirname, cmdPath);
+1
-1
apps/bot/main.ts
+1
-1
apps/bot/main.ts
···
39
39
40
40
client.commands = new Collection();
41
41
42
-
const commandPaths = fs.globSync("commands/*.ts");
42
+
const commandPaths = fs.globSync("commands/*.js");
43
43
for await (const file of commandPaths) {
44
44
const absoluteCommandPath = path.join(import.meta.dirname, file);
45
45
const command = await import(absoluteCommandPath);
+1
apps/bot/package.json
+1
apps/bot/package.json
+1
-1
apps/tapper/package.json
+1
-1
apps/tapper/package.json
+45
docker-compose.yml
+45
docker-compose.yml
···
1
1
services:
2
+
web:
3
+
container_name: web
4
+
restart: always
5
+
build:
6
+
context: .
7
+
dockerfile: Dockerfile.web
8
+
ports:
9
+
- 8002:8002
10
+
environment:
11
+
NODE_ENV: production
12
+
13
+
depends_on:
14
+
db:
15
+
condition: service_healthy
16
+
bot:
17
+
condition: service_started
18
+
tapper:
19
+
container_name: tapper
20
+
build:
21
+
context: .
22
+
dockerfile: Dockerfile.tap
23
+
environment:
24
+
NODE_ENV: production
25
+
26
+
depends_on:
27
+
db:
28
+
condition: service_healthy
29
+
bot:
30
+
container_name: bot
31
+
restart: always
32
+
build:
33
+
context: .
34
+
dockerfile: Dockerfile.bot
35
+
environment:
36
+
NODE_ENV: production
37
+
38
+
depends_on:
39
+
db:
40
+
condition: service_healthy
2
41
db:
3
42
image: postgres:18.1
43
+
healthcheck:
44
+
test: ["CMD-SHELL", "pg_isready -U postgres -d tealfmbotdb"]
45
+
interval: 10s
46
+
retries: 5
47
+
start_period: 30s
48
+
timeout: 10s
4
49
restart: always
5
50
shm_size: 128mb
6
51
env_file: .env
+1
package.json
+1
package.json
···
15
15
"bot": "pnpm --filter bot dev",
16
16
"tap": "pnpm --filter tapper dev",
17
17
"web": "pnpm --filter web dev",
18
+
"build": "pnpm -r build",
18
19
"docker:web": "docker build . --target web --tag web:latest",
19
20
"dev:all": "pnpm --filter './apps/**' dev",
20
21
"typecheck": "pnpm --filter './apps/**' typecheck",