38 lines
2.2 KiB
JavaScript
38 lines
2.2 KiB
JavaScript
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
import { createHash } from 'node:crypto';
|
|
import { pathToFileURL } from 'node:url';
|
|
import path from 'node:path';
|
|
import { root, run, suite, output, troveBin } from './suite.mjs';
|
|
|
|
run(process.execPath, ['tools/build.mjs']);
|
|
await mkdir(path.join(output, 'packages'), { recursive: true });
|
|
const entries = [];
|
|
for (const item of suite) {
|
|
const directory = path.join(root, 'curios', item.directory);
|
|
const manifest = JSON.parse(await readFile(path.join(directory, 'curio.json'), 'utf8'));
|
|
run(troveBin, ['curio', 'check', directory, '--json']);
|
|
const file = path.join(output, 'packages', `${manifest.id}-${manifest.version}.curio`);
|
|
run(troveBin, ['curio', 'pack', directory, '--out', file, '--overwrite', '--no-input', '--json']);
|
|
const bytes = await readFile(file);
|
|
entries.push({ ...item, manifest, file, artifact: {
|
|
target: manifest.backend ? `${process.arch === 'arm64' ? 'aarch64' : 'x86_64'}-apple-darwin` : 'any',
|
|
url: pathToFileURL(file).href,
|
|
sha256: createHash('sha256').update(bytes).digest('hex'), size: bytes.length,
|
|
} });
|
|
}
|
|
const date = new Date().toISOString();
|
|
function index(id, name, selected) {
|
|
const curios = [];
|
|
for (const { manifest: m, artifact } of selected) {
|
|
let curio = curios.find(curio => curio.id === m.id);
|
|
if (!curio) { curio = { id: m.id, name: m.name, description: m.description, versions: [] }; curios.push(curio); }
|
|
curio.versions.unshift({ version: m.version, engine: m.engine, releasedAt: date, artifacts: [artifact] });
|
|
}
|
|
return { schemaVersion: 1, id, name, generatedAt: date, curios };
|
|
}
|
|
await writeFile(path.join(output, 'index.json'), JSON.stringify(index('trove-qa', 'Trove 常规测试插件', entries.filter(item => !item.fault)), null, 2) + '\n');
|
|
await writeFile(path.join(output, 'faults-index.json'), JSON.stringify(index('trove-qa-faults', 'Trove 故障注入插件(手动安装)', entries.filter(item => item.fault)), null, 2) + '\n');
|
|
await writeFile(path.join(output, 'suite.json'), JSON.stringify(entries, null, 2) + '\n');
|
|
run('python3', ['tools/invalid-fixtures.py']);
|
|
console.log(`\n常规软件源:${path.join(output, 'index.json')}\n故障软件源:${path.join(output, 'faults-index.json')}`);
|