837f0fa63f
Close deployment IDOR and gate stub payment endpoints, add production secret validation, health probes, Redis-backed build progress, GitHub Actions CI, expanded tests, billing/k8s refactors, and ops runbooks. Co-authored-by: Cursor <cursoragent@cursor.com>
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Copy SQL migrations from backend/migrations/ into the Helm chart ConfigMap source.
|
|
* Run after adding or editing migration files: npm run sync:migrations
|
|
*/
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const sourceDir = path.resolve(__dirname, '../migrations');
|
|
const targetDir = path.resolve(__dirname, '../helm/cloudhost-platform/migrations');
|
|
|
|
if (!fs.existsSync(sourceDir)) {
|
|
console.error(`Source not found: ${sourceDir}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
|
|
const files = fs.readdirSync(sourceDir).filter((f) => f.endsWith('.sql')).sort();
|
|
for (const file of files) {
|
|
fs.copyFileSync(path.join(sourceDir, file), path.join(targetDir, file));
|
|
}
|
|
|
|
// Remove stale SQL files no longer in source
|
|
for (const existing of fs.readdirSync(targetDir)) {
|
|
if (existing.endsWith('.sql') && !files.includes(existing)) {
|
|
fs.unlinkSync(path.join(targetDir, existing));
|
|
}
|
|
}
|
|
|
|
console.log(`Synced ${files.length} migration(s) to ${targetDir}`);
|