From d147fa178b7b9bef8ab27d192a3d10112729f53c Mon Sep 17 00:00:00 2001 From: Isaac Date: Sat, 23 Jul 2022 13:27:32 +0100 Subject: [PATCH] Improve prisma scripts --- db/mysql/schema.prisma | 2 +- db/postgresql/schema.prisma | 2 +- db/sqlite/schema.prisma | 2 +- package.json | 3 ++- prisma/schema.prisma | 2 +- scripts/{prisma.js => postinstall.js} | 10 ++++++++-- scripts/preinstall.js | 23 +++++++++++++++++++++++ 7 files changed, 37 insertions(+), 7 deletions(-) rename scripts/{prisma.js => postinstall.js} (83%) create mode 100644 scripts/preinstall.js diff --git a/db/mysql/schema.prisma b/db/mysql/schema.prisma index 8e2b303..6834ce1 100644 --- a/db/mysql/schema.prisma +++ b/db/mysql/schema.prisma @@ -90,7 +90,7 @@ model Category { requireTopic Boolean @default(false) staffRoles Json tickets Ticket[] - totalLimit Int @default(-1) + totalLimit Int @default(50) @@map("categories") } diff --git a/db/postgresql/schema.prisma b/db/postgresql/schema.prisma index 9b47b9a..5511dbe 100644 --- a/db/postgresql/schema.prisma +++ b/db/postgresql/schema.prisma @@ -90,7 +90,7 @@ model Category { requireTopic Boolean @default(false) staffRoles Json tickets Ticket[] - totalLimit Int @default(-1) + totalLimit Int @default(50) @@map("categories") } diff --git a/db/sqlite/schema.prisma b/db/sqlite/schema.prisma index 86a1222..6f7542c 100644 --- a/db/sqlite/schema.prisma +++ b/db/sqlite/schema.prisma @@ -90,7 +90,7 @@ model Category { requireTopic Boolean @default(false) staffRoles String tickets Ticket[] - totalLimit Int @default(-1) + totalLimit Int @default(50) @@map("categories") } diff --git a/package.json b/package.json index 8103942..e7fcecd 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "contributors:generate": "all-contributors generate", "keygen": "node scripts/keygen", "lint": "eslint src scripts --ext mjs --fix", - "prisma": "node scripts/prisma", + "preinstall": "node scripts/preinstall", + "postinstall": "node scripts/postinstall", "start": "npm run prisma && node .", "studio": "npx prisma studio", "test": "echo \"There's nothing to test\" && exit 1" diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 8e2b303..6834ce1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -90,7 +90,7 @@ model Category { requireTopic Boolean @default(false) staffRoles Json tickets Ticket[] - totalLimit Int @default(-1) + totalLimit Int @default(50) @@map("categories") } diff --git a/scripts/prisma.js b/scripts/postinstall.js similarity index 83% rename from scripts/prisma.js rename to scripts/postinstall.js index 21db72c..bd0cdc5 100644 --- a/scripts/prisma.js +++ b/scripts/postinstall.js @@ -1,11 +1,16 @@ require('dotenv').config(); const fs = require('fs-extra'); -// const { promisify } = require('util'); -// const exec = promisify(require('child_process').exec); const { spawnSync } = require('child_process'); + const providers = ['mysql', 'postgresql', 'sqlite']; const provider = process.env.DB_PROVIDER; + +if (!provider) { + console.log('[postinstall] environment not set, exiting.'); + process.exit(0); +} + if (!providers.includes(provider)) throw new Error(`DB_PROVIDER must be one of: ${providers}`); if (!fs.existsSync('./prisma')) fs.mkdirSync('./prisma'); @@ -15,6 +20,7 @@ npx('prisma generate'); npx('prisma migrate deploy'); function npx(cmd) { + console.log(`[postinstall] > ${cmd}`); const child = spawnSync('npx', cmd.split(/\s/)); if (child.stdout) console.log(child.stdout.toString()); if (child.stderr) console.log(child.stderr.toString()); diff --git a/scripts/preinstall.js b/scripts/preinstall.js new file mode 100644 index 0000000..2f00282 --- /dev/null +++ b/scripts/preinstall.js @@ -0,0 +1,23 @@ +const { randomBytes } = require('crypto'); +const fs = require('fs'); + +const env = { + DB_CONNECTION_URL: '', + DB_PROVIDER: '', // don't default to sqlite, postinstall checks if empty + DISCORD_SECRET: '', + DISCORD_TOKEN: '', + ENCRYPTION_KEY: randomBytes(24).toString('hex'), + HTTP_BIND: 8080, + HTTP_EXTERNAL: 'http://localhost:8080', + PORTAL: '', + SUPER: '319467558166069248', +}; + +// check DISCORD_TOKEN because we don't want to force use of the .env file +if (!process.env.DISCORD_TOKEN && !fs.existsSync('./.env')) { + console.log('[preinstall] Generating ENCRYPTION_KEY'); + fs.writeFileSync('./.env', Object.entries(env).map(([k, v]) => `${k}=${v}`).join('\n')); + console.log('[preinstall] Created .env file'); +} else { + console.log('[preinstall] Nothing to do'); +} \ No newline at end of file