78 lines
2.1 KiB
Bash
Executable File
78 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
||
# 批量升级 Dart / Flutter SDK 版本约束
|
||
#
|
||
# 无参数:从官方拉最新稳定版,Dart + Flutter 一起升级:
|
||
# melos run sdk:bump
|
||
#
|
||
# 只升 Dart(Flutter 下限不变):
|
||
# melos run sdk:bump -- --dart 3.12.0
|
||
#
|
||
# 只升 Flutter 下限(Dart 不变):
|
||
# melos run sdk:bump -- --flutter 3.40.0
|
||
#
|
||
# 手动指定两者(CI 固定版本):
|
||
# melos run sdk:bump -- --dart 3.12.0 --flutter 3.40.0
|
||
|
||
set -euo pipefail
|
||
|
||
DART_VERSION=""
|
||
FLUTTER_VERSION=""
|
||
|
||
while [[ $# -gt 0 ]]; do
|
||
case "$1" in
|
||
--dart) DART_VERSION="$2"; shift 2 ;;
|
||
--flutter) FLUTTER_VERSION="$2"; shift 2 ;;
|
||
*) echo "Unknown argument: $1"; exit 1 ;;
|
||
esac
|
||
done
|
||
|
||
# 无参数:从官方接口获取最新稳定版本,Dart + Flutter 一起升级
|
||
if [[ -z "$DART_VERSION" ]] && [[ -z "$FLUTTER_VERSION" ]]; then
|
||
OS_TYPE="macos"
|
||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||
OS_TYPE="linux"
|
||
fi
|
||
|
||
RELEASES_URL="https://storage.googleapis.com/flutter_infra_release/releases/releases_${OS_TYPE}.json"
|
||
echo "Fetching latest stable Flutter version from flutter.dev..."
|
||
|
||
RELEASES_JSON=$(curl -sf "$RELEASES_URL") || {
|
||
echo "Error: Failed to fetch Flutter releases from $RELEASES_URL"
|
||
exit 1
|
||
}
|
||
|
||
read -r FLUTTER_VERSION DART_VERSION <<< "$(echo "$RELEASES_JSON" | python3 - <<'PY'
|
||
import json, sys, re
|
||
d = json.load(sys.stdin)
|
||
stable_hash = d["current_release"]["stable"]
|
||
release = next(r for r in d["releases"] if r["hash"] == stable_hash)
|
||
flutter_ver = release["version"].lstrip("v")
|
||
dart_ver = re.search(r"[\d]+\.[\d]+\.[\d]+", release["dart_sdk_version"]).group()
|
||
print(flutter_ver, dart_ver)
|
||
PY
|
||
)"
|
||
fi
|
||
|
||
PUBSPECS=$(find . \
|
||
-name "pubspec.yaml" \
|
||
! -path "*/.dart_tool/*" \
|
||
! -path "*/build/*" \
|
||
! -path "*/.pub-cache/*")
|
||
|
||
if [[ -n "$DART_VERSION" ]]; then
|
||
echo "Dart SDK : ^$DART_VERSION"
|
||
echo "$PUBSPECS" | xargs sed -i '' \
|
||
"s/sdk: \^[0-9][0-9.]*[0-9]/sdk: ^$DART_VERSION/g"
|
||
fi
|
||
|
||
if [[ -n "$FLUTTER_VERSION" ]]; then
|
||
echo "Flutter SDK : >=$FLUTTER_VERSION"
|
||
echo "$PUBSPECS" | xargs sed -i '' \
|
||
"s/flutter: '>=[0-9][0-9.]*[0-9]'/flutter: '>=$FLUTTER_VERSION'/g"
|
||
fi
|
||
|
||
echo ""
|
||
echo "Running dart pub get..."
|
||
dart pub get
|
||
echo "Done."
|