#!/usr/bin/env bash # Подпись релиза 3X-UI KIT. Запускает только автор, на своём компьютере, перед тегом: # # tools/release.sh [~/.ssh/3xui_kit_release] # # Проверяет, что версии сходятся и установщик 3X-UI не подменили, пишет SHA256SUMS, # подписывает его закрытым ключом (ssh-keygen спросит пароль ключа) и сразу проверяет # подпись открытым ключом, записанным в kit. Сервер 3X-UI KIT ставит обновление, только # если эта проверка у него тоже сошлась. Закрытый ключ никуда не отправляется. set -euo pipefail cd "$(dirname "$0")/.." die() { printf '✗ %s\n' "$*" >&2; exit 1; } ok() { printf '✓ %s\n' "$*"; } sha() { if command -v sha256sum >/dev/null; then sha256sum "$@"; else shasum -a 256 "$@"; fi; } key=${1:-$HOME/.ssh/3xui_kit_release} [[ -f $key ]] || die "Нет закрытого ключа $key. Создать: ssh-keygen -t ed25519 -C \"3X-UI KIT releases\" -f $key" NS="3x-ui-kit-release" ID="releases@3x-ui-kit" FILES=(scripts/3x-ui.sh scripts/hysteria2.sh scripts/kit.sh scripts/kit-sub.py scripts/kit-local.sh scripts/3x-ui-local.sh VERSION) v=$(tr -d '[:space:]' SHA256SUMS rm -f SHA256SUMS.sig ssh-keygen -Y sign -f "$key" -n "$NS" SHA256SUMS >/dev/null tmp=$(mktemp) trap 'rm -f "$tmp"' EXIT signers scripts/kit.sh | while read -r k; do printf '%s namespaces="%s" %s\n' "$ID" "$NS" "$k"; done >"$tmp" ssh-keygen -Y verify -f "$tmp" -I "$ID" -n "$NS" -s SHA256SUMS.sig /dev/null || die "Подпись не прошла проверку." ok "SHA256SUMS подписан и проверен так же, как это сделает сервер" echo cat SHA256SUMS echo echo "Дальше:" echo " git add SHA256SUMS SHA256SUMS.sig && git commit -m \"Релиз v$v: подпись\"" echo " git tag v$v && git push origin main v$v"