-
Notifications
You must be signed in to change notification settings - Fork 0
/
run-migrations.ts
66 lines (57 loc) · 1.53 KB
/
run-migrations.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import * as path from 'node:path';
import { promises as fs } from 'node:fs';
import {
FileMigrationProvider,
Kysely,
Migrator,
PostgresDialect,
} from 'kysely';
import { config } from 'dotenv';
import { Pool } from 'pg';
config();
// TODO: migrate down
export const migrateToLatest = async () => {
const database = new Kysely({
dialect: new PostgresDialect({
pool: new Pool({
database: process.env['DB_NAME'],
host: process.env['DB_HOST'],
password: process.env['DB_PASSWORD'],
port: Number(process.env['DB_PORT']),
user: process.env['DB_USER'],
}),
}),
});
const migrator = new Migrator({
db: database,
provider: new FileMigrationProvider({
fs,
// eslint-disable-next-line unicorn/prefer-module
migrationFolder: path.join(__dirname, './migrations'),
path,
}),
});
const { error, results } = await migrator.migrateToLatest();
if (error) {
console.error(error);
throw new Error('Failed to migrate');
}
if (results)
for (const result of results) {
if (result.status === 'Success') {
console.log(
`migration "${result.migrationName}" was executed successfully`,
);
} else if (result.status === 'Error') {
console.error(`failed to execute migration "${result.migrationName}"`);
throw new Error('Failed to migrate');
}
}
await database.destroy();
};
try {
migrateToLatest();
} catch {
// eslint-disable-next-line unicorn/no-process-exit
process.exit(1);
}