1b3c3496c5
- Убраны все машинно/инфра-специфичные данные из 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>
88 lines
4.7 KiB
Bash
88 lines
4.7 KiB
Bash
#!/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"
|