52 lines
3.0 KiB
JavaScript
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 });
|
|
}
|