Files

56 lines
1.5 KiB
TypeScript

/**
* 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));
}