71 lines
2.0 KiB
JavaScript
71 lines
2.0 KiB
JavaScript
import { existsSync, readFileSync, readdirSync, statSync } from 'node:fs';
|
|
import { resolve } from 'node:path';
|
|
import { spawnSync } from 'node:child_process';
|
|
|
|
const repoRoot = resolve(new URL('../..', import.meta.url).pathname);
|
|
const migrationsDir = resolve(repoRoot, 'prisma/migrations');
|
|
const schemaPath = resolve(repoRoot, 'prisma/schema.prisma');
|
|
const dryRun = process.argv.includes('--dry-run');
|
|
const prismaCommand = process.platform === 'win32' ? 'npx.cmd' : 'npx';
|
|
|
|
for (const envPath of ['.env', '.env.local', 'backend/.env', 'backend/.env.local']) {
|
|
const absolutePath = resolve(repoRoot, envPath);
|
|
if (!existsSync(absolutePath)) {
|
|
continue;
|
|
}
|
|
|
|
const content = readFileSync(absolutePath, 'utf8');
|
|
for (const line of content.split(/\r?\n/)) {
|
|
const trimmed = line.trim();
|
|
if (!trimmed || trimmed.startsWith('#')) {
|
|
continue;
|
|
}
|
|
|
|
const separatorIndex = trimmed.indexOf('=');
|
|
if (separatorIndex === -1) {
|
|
continue;
|
|
}
|
|
|
|
const key = trimmed.slice(0, separatorIndex).trim();
|
|
const value = trimmed.slice(separatorIndex + 1).trim();
|
|
if (key && !(key in process.env)) {
|
|
process.env[key] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
const migrations = readdirSync(migrationsDir)
|
|
.filter((name) => /^\d+_/.test(name))
|
|
.filter((name) => statSync(resolve(migrationsDir, name)).isDirectory())
|
|
.sort((left, right) => left.localeCompare(right));
|
|
|
|
if (migrations.length === 0) {
|
|
console.error('No Prisma migrations found.');
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Found ${migrations.length} migrations.`);
|
|
if (dryRun) {
|
|
migrations.forEach((migration) => console.log(`- ${migration}`));
|
|
process.exit(0);
|
|
}
|
|
|
|
for (const migration of migrations) {
|
|
console.log(`Marking migration as applied: ${migration}`);
|
|
const result = spawnSync(
|
|
prismaCommand,
|
|
['prisma', 'migrate', 'resolve', '--applied', migration, '--schema', schemaPath],
|
|
{
|
|
cwd: repoRoot,
|
|
stdio: 'inherit',
|
|
env: process.env,
|
|
},
|
|
);
|
|
|
|
if (result.status !== 0) {
|
|
process.exit(result.status ?? 1);
|
|
}
|
|
}
|
|
|
|
console.log('Legacy Prisma baseline completed.');
|