1
0
mirror of https://github.com/spacebarchat/server.git synced 2024-11-22 18:32:29 +01:00
server/scripts/db_migrations.js
2022-09-04 10:01:42 +02:00

83 lines
2.3 KiB
JavaScript

#!/usr/bin/node
const path = require("path");
const fs = require("fs");
const { stdout, exit } = require("process");
const { execIn } = require("./utils.js");
const { ask } = require("./utils/ask.js");
async function main() {
let filename;
if (process.argv[2]) filename = process.argv[2];
else filename = await ask("Please enter the name of your migration: ");
let dbconf;
try {
dbconf = JSON.parse(fs.readFileSync("dbconf.json"));
} catch (e) {
console.log("No dbconf.json found!");
dbconf = {};
}
if (!dbconf["sqlite"])
dbconf.sqlite = {
conn_str: "migrations.db",
migrations_dir: "sqlite",
package: "sqlite3"
};
if (!dbconf["postgres"] && process.env.FC_DB_POSTGRES) {
console.log("Found FC_DB_POSTGRES environment variable. Using it!");
dbconf.postgres = {
conn_str: process.env.FC_DB_POSTGRES,
migrations_dir: "postgres",
package: "pg"
};
}
if (!dbconf["mariadb"] && process.env.FC_DB_MARIADB) {
console.log("Found FC_DB_MARIADB environment variable. Using it!");
dbconf.mariadb = {
conn_str: process.env.FC_DB_MARIADB,
migrations_dir: "mariadb",
package: "mysql2"
};
}
fs.writeFileSync("dbconf.json", JSON.stringify(dbconf, null, 4));
//build
execIn(`node scripts/build_new.js`, process.cwd(), { stdio: "inherit" });
if (fs.existsSync(".env") && !fs.existsSync(".env.bak")) fs.renameSync(".env", ".env.bak");
Object.keys(dbconf).forEach((db) => {
console.log(`Applying migrations for ${db}`);
if (!fs.existsSync(path.join("node_modules", dbconf[db].package))) execIn(`npm i ${dbconf[db].package}`, process.cwd());
fs.writeFileSync(
`.env`,
`DATABASE=${dbconf[db].conn_str}
THREADS=1
DB_MIGRATE=true
DB_VERBOSE=true`
);
execIn(`node dist/start.js`, process.cwd(), { stdio: "inherit" });
});
Object.keys(dbconf).forEach((db) => {
console.log(`Generating new migrations for ${db}`);
fs.writeFileSync(
`.env`,
`DATABASE=${dbconf[db].conn_str}
THREADS=1
DB_MIGRATE=true
DB_VERBOSE=true`
);
execIn(
`node node_modules/typeorm/cli.js migration:generate "src/util/migrations/${db}/${filename}" -d dist/util/util/Database.js -p`,
process.cwd(),
{ stdio: "inherit" }
);
});
if (fs.existsSync(".env.bak")) {
fs.rmSync(".env");
fs.renameSync(".env.bak", ".env");
}
exit(0);
}
main();