Files
curios/tools/pack.mjs
T

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')}`);