build: сверка артефакта Hysteria с upstream hashes.txt
SHA-256 считался локально от уже скачанного файла. Это защищает target от последующей подмены, но не доказывает, что builder скачал именно ожидаемый upstream artifact: сумма фиксирует то, что пришло, каким бы оно ни было. То есть trust-on-first-use, а не проверка происхождения. Upstream публикует контрольные суммы релиза ассетом hashes.txt: 6493dfff...f94 build/hysteria-linux-amd64 f24f63be...189 build/hysteria-linux-amd64-avx Теперь резолвер отдаёт и URL этого ассета, сборка скачивает его, берёт оттуда ожидаемую сумму и сверяет с ней бинарник - и только после этого записывает SHA-256 в HY2XS lock и metadata. Сопоставление идёт по базовому имени и строго на равенство: build/ - часть пути, а hysteria-linux-amd64-avx - другой артефакт, который не должен совпасть по префиксу. Разбор вынесен в parseUpstreamHashes и покрыт тестами, включая форму sha256:<hex>, верхний регистр, противоречивые и отсутствующие записи. Релиз без hashes.txt для production-сборки непригоден и отклоняется. Источник ожидаемой суммы фиксируется в metadata как hysteria_sha_source.
This commit is contained in:
@@ -102,6 +102,7 @@ function emit(resolved: ResolvedHysteriaRelease, resolution: string): void {
|
||||
console.log(`HYSTERIA_VERSION=${resolved.version}`);
|
||||
console.log(`HYSTERIA_TAG=${resolved.tag}`);
|
||||
console.log(`HYSTERIA_ARTIFACT_URL=${resolved.artifactUrl}`);
|
||||
console.log(`HYSTERIA_HASHES_URL=${resolved.hashesUrl}`);
|
||||
console.log(`HYSTERIA_PUBLISHED_AT=${resolved.publishedAt}`);
|
||||
console.log(`HYSTERIA_RESOLUTION=${resolution}`);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user