- src/nodes/*.js (6 nodes + template snapshot) = source de vérité unique. - n8n-push.mjs reconstruit le JSON depuis src/ avant syntaxe+golden+PUT (src gagne toujours; n8n-extract.mjs pour resynchroniser si édition UI). - n8n-build.mjs --check pour vérifier la synchro. - Copies historiques déplacées dans archive/ (mortes, dérivées de la prod). - .gitignore: backups locaux de rollback. - AGENTS.md: règle R2 pour toutes les futures sessions (dont Qwen local). - Validé: idempotence, mutation/restauration, pipeline push complet en réel.
39 lines
1.5 KiB
JavaScript
39 lines
1.5 KiB
JavaScript
#!/usr/bin/env node
|
|
// R2 — BUILD : src/nodes/*.js → workflow JSON (src/ = SOURCE DE VÉRITÉ, src gagne).
|
|
// Usage : node tools/n8n-build.mjs [--check]
|
|
// --check : vérifie que le JSON est déjà synchronisé avec src/ (exit 1 sinon),
|
|
// sans rien écrire.
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { WORKFLOW_FILE, SRC_DIR, NODE_MAP, getCode, setCode } from './lib-node-map.mjs';
|
|
|
|
const CHECK = process.argv.includes('--check');
|
|
const wf = JSON.parse(fs.readFileSync(WORKFLOW_FILE, 'utf8'));
|
|
|
|
let changes = 0;
|
|
for (const { file, node, kind } of NODE_MAP) {
|
|
const srcPath = path.join(SRC_DIR, file);
|
|
if (!fs.existsSync(srcPath)) throw new Error(`Fichier source manquant: ${srcPath}`);
|
|
const srcCode = fs.readFileSync(srcPath, 'utf8');
|
|
const n = wf.nodes.find(x => x.name === node);
|
|
if (!n) throw new Error(`Node introuvable dans le JSON: ${node}`);
|
|
if (getCode(n, kind) !== srcCode) {
|
|
changes++;
|
|
console.log(`${CHECK ? 'DÉSYNCHRONISÉ' : 'inject'}: ${file} → "${node}"`);
|
|
if (!CHECK) setCode(n, kind, srcCode);
|
|
}
|
|
}
|
|
|
|
if (CHECK) {
|
|
console.log(changes ? `\n${changes} node(s) désynchronisé(s) : lancer node tools/n8n-build.mjs` : 'JSON synchronisé avec src/nodes/');
|
|
process.exit(changes ? 1 : 0);
|
|
}
|
|
|
|
if (changes) {
|
|
fs.writeFileSync(WORKFLOW_FILE, JSON.stringify(wf, null, 2) + '\n');
|
|
console.log(`\nBuild OK: ${changes} node(s) injecté(s) dans ${WORKFLOW_FILE}`);
|
|
} else {
|
|
console.log('Build: aucun changement (déjà synchronisé)');
|
|
}
|