Files
shorebird-workspace/scripts/verify_dart_tool_sdk.sh
T
2026-06-26 04:42:09 +08:00

46 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DART_SRC="${DART_SRC:-$ROOT/dart-sdk}"
TOOL_SDK="$DART_SRC/tools/sdks/dart-sdk"
ENGINE_DART="$ROOT/flutter/engine/src/flutter/third_party/dart"
required_constraint="$(
ruby -ryaml -e 'puts YAML.load_file(ARGV[0]).fetch("environment").fetch("sdk")' \
"$DART_SRC/pkg/front_end/pubspec.yaml"
)"
required_major_minor="$(
ruby -e 'ARGV[0] =~ /([0-9]+)\.([0-9]+)/ or abort "unable to parse SDK constraint"; puts "#{$1}.#{$2}"' \
"$required_constraint"
)"
if [[ ! -x "$TOOL_SDK/bin/dart" ]]; then
echo "missing executable Dart tool SDK: $TOOL_SDK/bin/dart" >&2
exit 66
fi
version_output="$("$TOOL_SDK/bin/dart" --version 2>&1)"
actual_major_minor="$(
ruby -e 'ARGV[0] =~ /Dart SDK version: ([0-9]+)\.([0-9]+)/ or abort "unable to parse Dart version"; puts "#{$1}.#{$2}"' \
"$version_output"
)"
if [[ "$actual_major_minor" != "$required_major_minor" ]]; then
echo "Dart tool SDK version does not satisfy front_end SDK constraint." >&2
echo " required major.minor: $required_major_minor from $required_constraint" >&2
echo " actual: $version_output" >&2
exit 70
fi
if [[ -e "$ENGINE_DART" ]]; then
engine_real="$(python3 -c 'import os, sys; print(os.path.realpath(sys.argv[1]))' "$ENGINE_DART")"
dart_real="$(python3 -c 'import os, sys; print(os.path.realpath(sys.argv[1]))' "$DART_SRC")"
if [[ "$engine_real" != "$dart_real" ]]; then
echo "Flutter engine Dart checkout points at $engine_real, expected $dart_real" >&2
exit 70
fi
fi
echo "[open-source-sync] Dart tool SDK is compatible: $version_output"