Files
rustdesk-custom/scripts/bump-upstream.sh
T
gusadmin 1b3c3496c5 Приватность публичного репо + выкл. проверку обновлений + релиз latest
- Убраны все машинно/инфра-специфичные данные из README/CODEMAP/скриптов/
  workflows (хосты, IP, домен gitea -> github.server_url).
- preconfigure: enable-check-update=N (выкл. проверку обновлений); подсказка
  «set up your own server» и так гаснет с override-сервером.
- CI публикует exe/apk в Gitea Release `latest` (обновляется каждый прогон,
  стабильная ссылка) + версионный релиз на теге v*.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 19:13:54 +03:00

88 lines
4.7 KiB
Bash
Raw Permalink 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
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"