aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docker/Dockerfile9
-rw-r--r--docker/docker-compose.yml17
-rw-r--r--packages/db/package.json3
-rw-r--r--packages/db/tsconfig.json11
-rw-r--r--pnpm-lock.yaml7
5 files changed, 30 insertions, 17 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
index 265235a5..7e439a45 100644
--- a/docker/Dockerfile
+++ b/docker/Dockerfile
@@ -14,6 +14,12 @@ ENV NEXT_TELEMETRY_DISABLED 1
ENV PUPPETEER_SKIP_DOWNLOAD true
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
+# Build the db migration script
+RUN cd packages/db && \
+ pnpm dlx @vercel/ncc build migrate.ts -o /db_migrations && \
+ cp -R drizzle /db_migrations
+
+
################# The Web builder ##############
# Rebuild the source code only when needed
@@ -33,6 +39,7 @@ ENV NEXT_TELEMETRY_DISABLED 1
COPY --from=web_builder --chown=node:node /app/packages/web/.next/standalone ./
COPY --from=web_builder /app/packages/web/public ./packages/web/public
+COPY --from=web_builder /db_migrations /db_migrations
# Set the correct permission for prerender cache
RUN mkdir -p ./package/web/.next
@@ -52,7 +59,7 @@ ENV HOSTNAME "0.0.0.0"
# server.js is created by next build from the standalone output
# https://nextjs.org/docs/pages/api-reference/next-config-js/output
-CMD ["node", "server.js"]
+CMD ["/bin/sh", "-c", "(cd /db_migrations && node index.js) && node server.js"]
################# The workers builder ##############
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index ed9fb99d..e0da095c 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -9,9 +9,6 @@ services:
environment:
REDIS_HOST: redis
DATABASE_URL: "file:/data/db.db"
- depends_on:
- migration:
- condition: service_completed_successfully
redis:
image: redis:7.2-alpine
volumes:
@@ -25,18 +22,8 @@ services:
DATABASE_URL: "file:/data/db.db"
# OPENAI_API_KEY: ...
depends_on:
- migration:
- condition: service_completed_successfully
- migration:
- image: ghcr.io/mohamedbassem/hoarder-workers:latest
- environment:
- DATABASE_URL: "file:/data/db.db"
- volumes:
- - data:/data
- command:
- - /bin/sh
- - -c
- - "cd /app/packages/db && pnpm run migrate"
+ web:
+ condition: service_started
volumes:
redis:
diff --git a/packages/db/package.json b/packages/db/package.json
index c4256801..27631095 100644
--- a/packages/db/package.json
+++ b/packages/db/package.json
@@ -5,6 +5,7 @@
"private": true,
"main": "index.ts",
"scripts": {
+ "typecheck": "tsc --noEmit",
"migrate": "ts-node migrate.ts",
"studio": "drizzle-kit studio"
},
@@ -12,9 +13,11 @@
"@auth/core": "^0.27.0",
"@paralleldrive/cuid2": "^2.2.2",
"better-sqlite3": "^9.4.3",
+ "dotenv": "^16.4.1",
"drizzle-orm": "^0.29.4"
},
"devDependencies": {
+ "@tsconfig/node21": "^21.0.1",
"@types/better-sqlite3": "^7.6.9",
"drizzle-kit": "^0.20.14"
}
diff --git a/packages/db/tsconfig.json b/packages/db/tsconfig.json
new file mode 100644
index 00000000..cf49c407
--- /dev/null
+++ b/packages/db/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "@tsconfig/node21/tsconfig.json",
+ "include": ["**/*.ts"],
+ "exclude": ["node_modules"],
+ "compilerOptions": {
+ "module": "ESNext",
+ "moduleResolution": "node",
+ "esModuleInterop": true
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8e1ef2f8..14e15f5b 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -151,10 +151,16 @@ importers:
better-sqlite3:
specifier: ^9.4.3
version: 9.4.3
+ dotenv:
+ specifier: ^16.4.1
+ version: 16.4.5
drizzle-orm:
specifier: ^0.29.4
version: 0.29.4(@types/better-sqlite3@7.6.9)(better-sqlite3@9.4.3)
devDependencies:
+ '@tsconfig/node21':
+ specifier: ^21.0.1
+ version: 21.0.1
'@types/better-sqlite3':
specifier: ^7.6.9
version: 7.6.9
@@ -2533,7 +2539,6 @@ packages:
/@tsconfig/node21@21.0.1:
resolution: {integrity: sha512-2Khg79N+z2Qkb9SjLzOi8cz2PSa/oUpHIeQm1YWzmWXkoFcPXFZSHgs+Z8iPCDjIoXFqMNYntiTXxfLYQMcRhw==}
- dev: false
/@types/babel__core@7.20.5:
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}