build: versions.env как единый контракт продукта, платформы и toolchain
Версии были размазаны: PACKAGE_VERSION в build.sh, схема конфигурации в profile.ts и в hy2xs.env, версии toolchain в deps.sh, Debian 13 в нескольких местах. Расхождение уже перестало быть теоретическим - пакет 1.0.0 сообщал "HY2XS admin version v0.0.22". Введён корневой versions.env: версия продукта, линия релиза, схема конфигурации, целевая платформа, версии и контрольные суммы Go/Bun/Node/pnpm, политика выбора Hysteria. Чего в нём нет намеренно: 1. Прикладных зависимостей - у них есть pnpm-lock.yaml, bun.lock, go.sum. Второй слой неизбежно разъедется с настоящим графом. 2. Конкретной версии Hysteria - здесь только политика HYSTERIA_CHANNEL, результат резолва живёт в hysteria-lock.env. Пин версии здесь вернул бы ручное обновление. Подход - проверка, а не генерация. profile.ts, hy2xs.env и packageManager в двух package.json остаются обычными файлами, чтобы bun test, tsc и go test работали из чистого чекаута до сборки. Новый шаг verify_versions_contract роняет сборку до создания tarball при расхождении. Контракт оркестратора сверяется не grep'ом по исходникам, а выводом print-contract.ts: это доказывает, что в бинарь попало то же значение. Версия админки перестала быть константой и приезжает через ldflags; собранный бинарь проверяется запуском hy2xs-admin version. Контрольные суммы toolchain больше не передаются через окружение. Для Bun зафиксированы обе суммы: артефакт выбирается по наличию AVX2, поэтому одной архитектурно недостаточно. Production-сборка снова запускается одной командой.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# HY2XS: единственный источник истины для контракта
|
||||
# «продукт / платформа / toolchain».
|
||||
#
|
||||
# Что здесь ЕСТЬ:
|
||||
# версия продукта, линия релиза, схема конфигурации, целевая платформа,
|
||||
# версии и контрольные суммы build-toolchain, политика выбора Hysteria.
|
||||
#
|
||||
# Чего здесь НЕТ и быть не должно:
|
||||
# 1. Прикладные зависимости (Vue, Gin, GORM, npm/Go модули). У них уже есть
|
||||
# канонические lock-механизмы: apps/frontend/pnpm-lock.yaml,
|
||||
# orchestrator/bun.lock, apps/go.sum. Второй слой неизбежно разъедется
|
||||
# с настоящим графом зависимостей.
|
||||
# 2. Конкретная версия Hysteria. Здесь живёт только ПОЛИТИКА выбора
|
||||
# (HYSTERIA_CHANNEL). Результат резолва конкретной сборки замораживается
|
||||
# в tools/build/hysteria-lock.env. Пин версии здесь вернул бы ручное
|
||||
# обновление, от которого мы ушли.
|
||||
#
|
||||
# Файл читается сборкой (tools/build/lib/versions.sh) и проверяется шагом
|
||||
# verify_versions_contract: рассинхрон с package.json / profile.ts /
|
||||
# hy2xs.env / go.mod роняет сборку до создания tarball.
|
||||
#
|
||||
# Синтаксис — POSIX shell: файл должен безопасно подключаться через `.`
|
||||
# без jq, Node и Python.
|
||||
|
||||
# ------------------------------------------------------------- продукт ---
|
||||
|
||||
HY2XS_VERSION=1.0.0
|
||||
HY2XS_RELEASE_LINE=1
|
||||
HY2XS_CONFIG_SCHEMA_VERSION=2
|
||||
|
||||
# ------------------------------------------------------------ платформа ---
|
||||
|
||||
HY2XS_BUILD_OS=debian
|
||||
HY2XS_BUILD_OS_VERSION=13
|
||||
HY2XS_BUILD_ARCH=amd64
|
||||
|
||||
HY2XS_TARGET_OS=debian
|
||||
HY2XS_TARGET_OS_VERSION=13
|
||||
HY2XS_TARGET_ARCH=amd64
|
||||
|
||||
# ------------------------------------------------------------ toolchain ---
|
||||
|
||||
GO_VERSION=1.21.13
|
||||
GO_LINUX_AMD64_SHA256=502fc16d5910562461e6a6631fb6377de2322aad7304bf2bcd23500ba9dab4a7
|
||||
|
||||
# Bun выбирает артефакт по наличию AVX2, поэтому одной контрольной суммы
|
||||
# архитектурно недостаточно: обе должны быть зафиксированы заранее.
|
||||
BUN_VERSION=1.3.13
|
||||
BUN_LINUX_X64_SHA256=79c0771fa8b92c33aae41e15a0e0d307ea99d0e2f00317c71c6c53237a78e25a
|
||||
BUN_LINUX_X64_BASELINE_SHA256=9d8a24292a7068090205daac0a5a223f5f69736f5287e37bf88d3b4031edc750
|
||||
|
||||
NODE_VERSION=20.19.0
|
||||
NODE_LINUX_X64_SHA256=b4e336584d62abefad31baecff7af167268be9bb7dd11f1297112e6eed3ca0d5
|
||||
|
||||
# pnpm ставится через corepack, отдельного архива с контрольной суммой нет.
|
||||
PNPM_VERSION=9.15.9
|
||||
|
||||
# ------------------------------------------------ политика выбора Hysteria ---
|
||||
|
||||
# stable — резолвить последний стабильный upstream-релиз на build-машине;
|
||||
# pinned — использовать закоммиченный tools/build/hysteria-lock.env офлайн.
|
||||
HYSTERIA_CHANNEL=stable
|
||||
Reference in New Issue
Block a user