mirror of
https://gitlab.com/veilid/veilid.git
synced 2026-10-14 02:12:12 -05:00
62 lines
3.1 KiB
Bash
62 lines
3.1 KiB
Bash
# Shared Flutter SDK installer for the veilidchat dev-setup (macOS + Linux). Sourced after
|
|
# versions.env (needs FLUTTER_VERSION). Flutter is a build dependency; flutter-packer can also
|
|
# provide it, in which case it's already on PATH and the dep_min version check skips this install.
|
|
|
|
# Managed, namespaced install dir so it never clobbers a dev's own flutter checkout.
|
|
FLUTTER_SDK_DIR="${FLUTTER_SDK_DIR:-$HOME/.local/share/veilid-flutter}"
|
|
|
|
# flutter --version -> "Flutter 3.47.1 • channel stable • ..."; empty when flutter isn't installed.
|
|
# The tool's first run in a fresh container prints only its spinner and update banner and no
|
|
# version line, so ask twice
|
|
flutter_ver() {
|
|
command -v flutter >/dev/null 2>&1 || return 0
|
|
local v
|
|
for _ in 1 2; do
|
|
v="$(flutter --version 2>/dev/null | grep -m1 '^Flutter ')"
|
|
[ -n "$v" ] && break
|
|
done
|
|
echo "$v"
|
|
}
|
|
|
|
# Put the flutter bin on this session's PATH + persist it to the user's shell rc (idempotent).
|
|
_flutter_persist_path() {
|
|
local bin="$1" rc
|
|
export PATH="$bin:$PATH"
|
|
case "${SHELL:-}" in *zsh) rc="$HOME/.zshrc" ;; *bash) rc="$HOME/.bashrc" ;; *) rc="$HOME/.profile" ;; esac
|
|
[ -e "$rc" ] || rc="$HOME/.profile"
|
|
if ! grep -qsF "$bin" "$rc" 2>/dev/null; then
|
|
printf '\n# Flutter SDK (veilidchat dev-setup)\nexport PATH="%s:$PATH"\n' "$bin" >> "$rc"
|
|
echo " added $bin to PATH ($rc)"
|
|
fi
|
|
}
|
|
|
|
# Download + extract the pinned FLUTTER_VERSION archive for this OS/arch, then put it on PATH.
|
|
i_flutter() {
|
|
local ver="$FLUTTER_VERSION" base="https://storage.googleapis.com/flutter_infra_release/releases/stable" url file tmp bin i
|
|
case "$(uname -s)" in
|
|
Darwin) if [ "$(uname -m)" = arm64 ]; then url="$base/macos/flutter_macos_arm64_${ver}-stable.zip"; else url="$base/macos/flutter_macos_${ver}-stable.zip"; fi ;;
|
|
Linux) url="$base/linux/flutter_linux_${ver}-stable.tar.xz" ;;
|
|
*) echo " flutter: unsupported OS — install manually from https://docs.flutter.dev"; return 0 ;;
|
|
esac
|
|
echo " installing Flutter $ver -> $FLUTTER_SDK_DIR/flutter"
|
|
tmp="$(mktemp -d)"; file="$tmp/${url##*/}"
|
|
# Retried whole: curl's --retry ignores a TLS handshake failure, which an archive this
|
|
# size draws often enough to redden CI (the veilid build container cannot use its own
|
|
# /usr/local/bin/retry here -- deps-flutter starts from the Flutter build image).
|
|
i=1
|
|
until curl -fSL --retry "${RETRY_COUNT:-12}" --retry-connrefused "$url" -o "$file"; do
|
|
if [ "$i" -ge "${RETRY_COUNT:-12}" ]; then echo " flutter download failed (network?)"; rm -rf "$tmp"; return 1; fi
|
|
echo " retry #$i..."; i=$((i+1)); sleep 10
|
|
done
|
|
rm -rf "$FLUTTER_SDK_DIR"; mkdir -p "$FLUTTER_SDK_DIR"
|
|
case "$file" in
|
|
*.zip) unzip -q "$file" -d "$FLUTTER_SDK_DIR" ;;
|
|
*.tar.xz) tar -xJf "$file" -C "$FLUTTER_SDK_DIR" ;;
|
|
esac
|
|
rm -rf "$tmp"
|
|
bin="$FLUTTER_SDK_DIR/flutter/bin"
|
|
[ -x "$bin/flutter" ] || { echo " flutter extract failed"; return 1; }
|
|
_flutter_persist_path "$bin"
|
|
flutter --version 2>/dev/null | head -1
|
|
}
|