Files
rustdesk-custom/scripts/bump-upstream.sh
T
gusadmin eb638b2ce4 Механизм обновления версии: bump-upstream.sh + provision-windows.ps1
bump-upstream.sh [tag|latest] тянет пины тулчейна из CI-конфигов
целевого тега RustDesk -> upstream.txt (не разъезжается с Flutter/
vcpkg/LLVM/FRB). provision-windows.ps1 идемпотентно доводит тулчейн
до пинов; build-windows.ps1 зовёт его сам -> бамп+пересборка = 1 команда.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 17:28:51 +03:00

88 lines
4.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Обновляет пины RustDesk-апстрима в upstream.txt под указанный релиз-тег (или latest).
# Тянет версии тулчейна из CI-конфигов САМОГО тега (flutter-build.yml + bridge.yml) — чтобы бамп
# версии RustDesk не разъезжался с Flutter/vcpkg/LLVM/FRB/NDK, которые апстрим меняет между релизами.
#
# Usage: scripts/bump-upstream.sh [<tag>|latest]
# без аргумента / latest — берёт последний стабильный релиз rustdesk/rustdesk.
# После бампа: provision-windows.ps1 (если пины изменились) -> build-windows.ps1.
set -euo pipefail
REPO="rustdesk/rustdesk"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
UP="$ROOT/upstream.txt"
TAG="${1:-latest}"
api() { curl -fsSL ${GH_TOKEN:+-H "Authorization: Bearer $GH_TOKEN"} "$@"; }
raw() { curl -fsSL "https://raw.githubusercontent.com/$REPO/$1"; }
if [ "$TAG" = "latest" ]; then
TAG="$(api "https://api.github.com/repos/$REPO/releases/latest" | grep -o '"tag_name": *"[^"]*"' | head -1 | sed -E 's/.*"tag_name": *"([^"]*)".*/\1/')"
fi
[ -n "$TAG" ] || { echo "не удалось определить тег" >&2; exit 1; }
echo "Целевой тег RustDesk: $TAG"
FB="$(raw "$TAG/.github/workflows/flutter-build.yml")" || { echo "нет flutter-build.yml в $TAG" >&2; exit 1; }
BR="$(raw "$TAG/.github/workflows/bridge.yml")" || { echo "нет bridge.yml в $TAG" >&2; exit 1; }
# Вытаскиваем ` KEY: "value" # comment` -> value (без кавычек и комментария).
yenv() {
printf '%s\n' "$1" | grep -E "^[[:space:]]*$2:[[:space:]]*" | head -1 \
| sed -E "s/^[[:space:]]*$2:[[:space:]]*//; s/#.*$//; s/^\"//; s/\"[[:space:]]*$//; s/[[:space:]]*$//"
}
RUST_VERSION="$(yenv "$FB" RUST_VERSION)"
LLVM_VERSION="$(yenv "$FB" LLVM_VERSION)"
FLUTTER_VERSION="$(yenv "$FB" FLUTTER_VERSION)"
VCPKG_COMMIT_ID="$(yenv "$FB" VCPKG_COMMIT_ID)"
NDK_VERSION="$(yenv "$FB" NDK_VERSION)"
CARGO_NDK_VERSION="$(yenv "$FB" CARGO_NDK_VERSION)"
ANDROID_FLUTTER_VERSION="$(yenv "$FB" ANDROID_FLUTTER_VERSION)"
FRB_VERSION="$(yenv "$BR" FLUTTER_RUST_BRIDGE_VERSION)"
CARGO_EXPAND_VERSION="$(yenv "$BR" CARGO_EXPAND_VERSION)"
# Триплет не меняется апстримом — сохраняем текущий (или дефолт).
VCPKG_TRIPLET="$(grep -E '^VCPKG_TRIPLET=' "$UP" 2>/dev/null | cut -d= -f2)"; VCPKG_TRIPLET="${VCPKG_TRIPLET:-x64-windows-static}"
# Проверяем, что все пины вытащились (иначе апстрим переименовал переменную — не молча ломаемся).
for v in RUST_VERSION LLVM_VERSION FLUTTER_VERSION VCPKG_COMMIT_ID NDK_VERSION CARGO_NDK_VERSION \
ANDROID_FLUTTER_VERSION FRB_VERSION CARGO_EXPAND_VERSION; do
if [ -z "${!v}" ]; then echo "ОШИБКА: не удалось извлечь $v из CI-конфигов $TAG (апстрим переименовал?)." >&2; exit 1; fi
done
echo "=== было -> станет ==="
show() { local old; old="$(grep -E "^$1=" "$UP" 2>/dev/null | cut -d= -f2-)"; printf ' %-24s %s -> %s\n' "$1" "${old:-}" "$2"; }
show RUSTDESK_TAG "$TAG"
show RUST_VERSION "$RUST_VERSION"; show LLVM_VERSION "$LLVM_VERSION"; show FLUTTER_VERSION "$FLUTTER_VERSION"
show VCPKG_COMMIT_ID "$VCPKG_COMMIT_ID"; show FRB_VERSION "$FRB_VERSION"; show CARGO_EXPAND_VERSION "$CARGO_EXPAND_VERSION"
show NDK_VERSION "$NDK_VERSION"; show CARGO_NDK_VERSION "$CARGO_NDK_VERSION"; show ANDROID_FLUTTER_VERSION "$ANDROID_FLUTTER_VERSION"
cat > "$UP" <<EOF
# Пины апстрима RustDesk и тулчейна (правило: никаких latest).
# Автогенерится scripts/bump-upstream.sh из CI-конфигов целевого тега (flutter-build.yml + bridge.yml).
# Обновить: scripts/bump-upstream.sh [<tag>|latest] -> provision-windows.ps1 -> build-windows.ps1.
RUSTDESK_TAG=$TAG
RUSTDESK_REPO=https://github.com/rustdesk/rustdesk.git
# Тулчейн (Windows x64 flutter-сборка)
RUST_VERSION=$RUST_VERSION
LLVM_VERSION=$LLVM_VERSION
FLUTTER_VERSION=$FLUTTER_VERSION
VCPKG_COMMIT_ID=$VCPKG_COMMIT_ID
VCPKG_TRIPLET=$VCPKG_TRIPLET
# flutter_rust_bridge codegen (генерит src/bridge_generated.rs)
FRB_VERSION=$FRB_VERSION
CARGO_EXPAND_VERSION=$CARGO_EXPAND_VERSION
# Android (VM 118)
ANDROID_FLUTTER_VERSION=$ANDROID_FLUTTER_VERSION
CARGO_NDK_VERSION=$CARGO_NDK_VERSION
NDK_VERSION=$NDK_VERSION
EOF
echo
echo "upstream.txt обновлён на $TAG."
echo "Дальше: pwsh -File scripts/provision-windows.ps1 (доведёт тулчейн до пинов) -> scripts/build-windows.ps1"