From 2d5ff17515e5466fdf7b50fdaab1d7baf23cdbff Mon Sep 17 00:00:00 2001 From: Milo Schwartz Date: Sat, 26 Oct 2024 23:37:25 -0400 Subject: [PATCH] run migrations if no db --- Dockerfile | 4 ++++ Makefile | 2 +- package.json | 2 +- server/db/index.ts | 23 ++++++++++++++++++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4a3df3e4..e48c8731 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,9 @@ RUN npm install --legacy-peer-deps COPY . . +RUN npx drizzle-kit generate --dialect sqlite --schema ./server/db/schema.ts --out migrations +RUN ls migrations + RUN npm run build FROM node:20-alpine AS runner @@ -22,6 +25,7 @@ RUN npm install --omit=dev --legacy-peer-deps COPY --from=builder /app/.next ./.next COPY --from=builder /app/dist ./dist +COPY --from=builder /app/migrations ./dist/migrations COPY config.example.yml ./dist/config.example.yml COPY server/db/names.json ./dist/names.json diff --git a/Makefile b/Makefile index df60dc14..a3c02ca9 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ push: docker push fossorial/pangolin:latest test: - docker run -it -p 3000:3000 -p 3001:3001 --env-file=.env -v ./config:/app/config pangolin + docker run -it -p 3000:3000 -p 3001:3001 -v ./config:/app/config fossorial/pangolin:latest clean: docker rmi pangolin diff --git a/package.json b/package.json index bbf562fd..68ad314a 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "zod-validation-error": "3.4.0" }, "devDependencies": { + "drizzle-kit": "0.24.2", "esbuild": "0.20.1", "esbuild-node-externals": "1.13.0", "yargs": "17.7.2", @@ -83,7 +84,6 @@ "@types/react": "npm:types-react@19.0.0-rc.1", "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", "@types/yargs": "17.0.33", - "drizzle-kit": "0.24.2", "eslint": "^8", "eslint-config-next": "15.0.1", "postcss": "^8", diff --git a/server/db/index.ts b/server/db/index.ts index 3270d6df..844a6be4 100644 --- a/server/db/index.ts +++ b/server/db/index.ts @@ -1,12 +1,33 @@ import { drizzle } from "drizzle-orm/better-sqlite3"; import Database from "better-sqlite3"; import * as schema from "@server/db/schema"; -import { APP_PATH } from "@server/config"; +import { __DIRNAME, APP_PATH } from "@server/config"; import path from "path"; +import fs from "fs"; +import logger from "@server/logger"; +import { migrate } from "drizzle-orm/better-sqlite3/migrator"; const location = path.join(APP_PATH, "db", "db.sqlite"); +let dbExists = true; +if (!fs.existsSync(location)) { + dbExists = false; +} + const sqlite = new Database(location); export const db = drizzle(sqlite, { schema }); +if (!dbExists && process.env.ENVIRONMENT === "prod") { + logger.info("Running migrations..."); + try { + migrate(db, { + migrationsFolder: path.join(__DIRNAME, "migrations"), + }); + logger.info("Migrations completed successfully."); + } catch (error) { + logger.error("Error running migrations:", error); + process.exit(1); + } +} + export default db;