/** * Build-time CLI: достаёт ожидаемый SHA-256 артефакта из upstream hashes.txt. * * Вынесено в отдельную команду, чтобы разбор формата жил в одном месте и был * покрыт юнит-тестами, а не повторялся awk-выражением в bash. * * bun run tools/parse-upstream-hashes.ts --file hashes.txt --asset hysteria-linux-amd64 */ import { parseUpstreamHashes } from "../src/build/hysteriaRelease"; import { readText } from "../src/lib/fs"; function fail(message: string): never { console.error(`[hy2xs-build] ERROR: ${message}`); process.exit(1); } function parseArgs(argv: string[]): { file: string; asset: string } { let file = ""; let asset = ""; for (let i = 0; i < argv.length; i += 1) { const arg = argv[i]; const value = argv[i + 1]; if (arg === "--file") { file = value ?? ""; i += 1; continue; } if (arg === "--asset") { asset = value ?? ""; i += 1; continue; } fail(`unknown argument: ${arg}`); } if (!file) { fail("missing --file"); } if (!asset) { fail("missing --asset"); } return { file, asset }; } const { file, asset } = parseArgs(Bun.argv.slice(2)); try { const text = await readText(file); process.stdout.write(`${parseUpstreamHashes(text, asset)}\n`); } catch (error) { fail(error instanceof Error ? error.message : String(error)); }