feat: add sync-profile script to populate default CV from persons repo
This commit is contained in:
60
scripts/sync-profile.mjs
Normal file
60
scripts/sync-profile.mjs
Normal file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Reads cv-data.json from the persons profile directory and writes it into:
|
||||
* - src/lib/cv.json (frontend default / compile-time fallback)
|
||||
* - backend/db/init.js (backend DB seed on first boot)
|
||||
*
|
||||
* Usage:
|
||||
* node scripts/sync-profile.mjs [path/to/cv-data.json]
|
||||
*
|
||||
* Default source path: ~/workspace/persons/tuan-dat.tran/cv-data.json
|
||||
*/
|
||||
|
||||
import { readFileSync, writeFileSync } from 'fs';
|
||||
import { resolve } from 'path';
|
||||
import { homedir } from 'os';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { dirname } from 'path';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const root = resolve(__dirname, '..');
|
||||
|
||||
const sourcePath = process.argv[2]
|
||||
?? resolve(homedir(), 'workspace/persons/tuan-dat.tran/cv-data.json');
|
||||
|
||||
let data;
|
||||
try {
|
||||
data = JSON.parse(readFileSync(sourcePath, 'utf8'));
|
||||
} catch (e) {
|
||||
console.error(`Failed to read ${sourcePath}: ${e.message}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// 1. Write src/lib/cv.json
|
||||
const cvJsonPath = resolve(root, 'src/lib/cv.json');
|
||||
writeFileSync(cvJsonPath, JSON.stringify(data, null, 2) + '\n');
|
||||
console.log(`wrote ${cvJsonPath}`);
|
||||
|
||||
// 2. Rewrite the seed block in backend/db/init.js
|
||||
const initPath = resolve(root, 'backend/db/init.js');
|
||||
const initSrc = readFileSync(initPath, 'utf8');
|
||||
|
||||
const seedJson = JSON.stringify(data, null, 8)
|
||||
.split('\n')
|
||||
.map((line, i) => i === 0 ? line : ' ' + line)
|
||||
.join('\n');
|
||||
|
||||
const updated = initSrc.replace(
|
||||
/data: JSON\.stringify\([\s\S]*?\)\s*\}\);/,
|
||||
`data: JSON.stringify(${seedJson})\n });`
|
||||
);
|
||||
|
||||
if (updated === initSrc) {
|
||||
console.error('Could not find seed block in backend/db/init.js — pattern mismatch');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
writeFileSync(initPath, updated);
|
||||
console.log(`wrote ${initPath}`);
|
||||
|
||||
console.log('done — rebuild Docker images and restart with a fresh volume to apply');
|
||||
Reference in New Issue
Block a user