Files
vendoo/tools/verify-git-staging.mjs

52 lines
3.0 KiB
JavaScript

import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
import { join } from 'node:path';
import { tmpdir } from 'node:os';
import { prepareGitStaging } from './prepare-git-staging.mjs';
const temp = mkdtempSync(join(tmpdir(), 'vendoo-git-staging-'));
const source = join(temp, 'source');
const destination = join(temp, 'repo');
const write = (rel, value = rel) => {
const target = join(source, rel);
mkdirSync(join(target, '..'), { recursive: true });
writeFileSync(target, value, 'utf8');
};
try {
mkdirSync(source, { recursive: true });
mkdirSync(join(destination, '.git'), { recursive: true });
writeFileSync(join(destination, '.git', 'marker'), 'keep', 'utf8');
writeFileSync(join(destination, 'old-file.txt'), 'remove', 'utf8');
write('package.json', '{"name":"vendoo"}');
write('.env.example', 'OPENAI_API_KEY=');
write('.env.docker.example', 'VENDOO_SETUP_TOKEN=');
write('.env.local', 'OPENAI_API_KEY=local-secret-should-never-copy');
write('operations/staging/job.json', '{}');
write('updates/backups/slice22_1_20260707-194953/scripts/install-local-flux.ps1', 'Write-Host local-backup');
write('updates/backups/slice22_1_20260707-194953/setup.bat', '@echo local-backup');
write('updates/backups/slice22_1_20260707-194953/setup.ps1', 'Write-Host local-backup');
write('Archiv/Vendoo_Alt/vendoo/server.mjs', "import { missing } from './app/modules/inventory/routes.mjs';");
write('logs/server.log', 'secret');
write('modules/vendoo.ext-demo/package.vmod', '{"secret":"runtime-package"}');
write('uploads/image.jpg', 'binary');
write('db/vendoo.db', 'database');
write('local-ai/comfyui/models/model.safetensors', 'model');
write('docs/readme.md', '# safe');
const result = prepareGitStaging(source, destination);
const required = ['package.json', '.env.example', '.env.docker.example', 'docs/readme.md', '.git/marker'];
const forbidden = ['old-file.txt', '.env.local', 'operations/staging/job.json', 'updates/backups/slice22_1_20260707-194953/scripts/install-local-flux.ps1', 'updates/backups/slice22_1_20260707-194953/setup.bat', 'updates/backups/slice22_1_20260707-194953/setup.ps1', 'Archiv/Vendoo_Alt/vendoo/server.mjs', 'logs/server.log', 'modules/vendoo.ext-demo/package.vmod', 'uploads/image.jpg', 'db/vendoo.db', 'local-ai/comfyui/models/model.safetensors'];
for (const rel of required) {
if (!existsSync(join(destination, rel))) throw new Error(`Pflichtdatei fehlt im Staging: ${rel}`);
}
for (const rel of forbidden) {
if (existsSync(join(destination, rel))) throw new Error(`Verbotene Datei wurde kopiert: ${rel}`);
}
if (readFileSync(join(destination, '.git', 'marker'), 'utf8') !== 'keep') throw new Error('.git wurde verändert.');
if (result.copied < 4 || result.skipped < 7) throw new Error('Staging-Zähler sind unplausibel.');
console.log(`Git-Staging-Regressionstest erfolgreich: ${result.copied} sichere Dateien kopiert, ${result.skipped} lokale Einträge ausgeschlossen.`);
} finally {
rmSync(temp, { recursive: true, force: true });
}