78 lines
2.1 KiB
Bash
Executable file
78 lines
2.1 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p curl jq
|
|
|
|
set -euo pipefail
|
|
|
|
# so if the script fails, debug logs are on stderr
|
|
log() {
|
|
>&2 echo "DART_UPDATER: $@"
|
|
}
|
|
|
|
# fetch the latest version number from upstream
|
|
NEW_VER_DETAILS=$(curl -sL https://storage.googleapis.com/dart-archive/channels/stable/release/latest/VERSION)
|
|
NEW_VER=$(jq -r '.version' <<< "$NEW_VER_DETAILS")
|
|
|
|
MY_PATH=$(dirname $(realpath "$0"))
|
|
SRC_FILE=$(mktemp)
|
|
|
|
log "file to write is $SRC_FILE"
|
|
|
|
PRELUDE="let version = \"$NEW_VER\"; in
|
|
{ fetchurl }: {
|
|
versionUsed = version;"
|
|
echo "$PRELUDE" > "$SRC_FILE"
|
|
log "wrote prelude"
|
|
|
|
# Fetches the source, then writes the fetcher and hash into the sources file.
|
|
# Arguments:
|
|
# - $1: VARIABLE NAME of (table of nix platform -> dart platform mappings) ("DARWIN_PLATFORMS"|"LIN_PLATFORMS")
|
|
# - $2: Dart-OS ("macos"|"linux")
|
|
write_for_platform() {
|
|
BASE_OF_ALL_URLS='https://storage.googleapis.com/dart-archive/channels/stable/release'
|
|
BASE_URL_WRITTEN="$BASE_OF_ALL_URLS/\${version}/sdk"
|
|
BASE_URL_FETCHED="$BASE_OF_ALL_URLS/$NEW_VER/sdk"
|
|
|
|
TABLE_NAME=$1
|
|
declare -n TABLE=$TABLE_NAME
|
|
|
|
for platform in "${!TABLE[@]}"; do
|
|
DART_PLATFORM="${TABLE[$platform]}"
|
|
log "trying for dartplatform $DART_PLATFORM (platform $platform) (OS $2)"
|
|
|
|
URL_POSTFIX="dartsdk-$2-$DART_PLATFORM-release.zip"
|
|
URL="$BASE_URL_FETCHED/$URL_POSTFIX"
|
|
log "URL for $DART_PLATFORM: $URL"
|
|
|
|
HASH=$(nix-prefetch-url "$URL" --type sha256)
|
|
log "hash for platform $platform: $HASH"
|
|
|
|
FETCHER=" \"\${version}-$platform\" = fetchurl {
|
|
url = \"$BASE_URL_WRITTEN/$URL_POSTFIX\";
|
|
sha256 = \"$HASH\";
|
|
};"
|
|
|
|
echo "$FETCHER" >> $SRC_FILE
|
|
done
|
|
log "finished for $1"
|
|
|
|
}
|
|
|
|
# Map nix platforms -> Dart platforms
|
|
X8664="x64"
|
|
AARCH64="arm64"
|
|
I686="ia32"
|
|
declare -A DARWIN_PLATFORMS=(["aarch64-darwin"]="$AARCH64"
|
|
["x86_64-darwin"]="$X8664")
|
|
|
|
declare -A LIN_PLATFORMS=( ["x86_64-linux"]="$X8664"
|
|
["i686-linux"]="$I686"
|
|
["aarch64-linux"]="$AARCH64")
|
|
|
|
write_for_platform "DARWIN_PLATFORMS" "macos"
|
|
write_for_platform "LIN_PLATFORMS" "linux"
|
|
|
|
echo '}' >> $SRC_FILE
|
|
|
|
log "moving tempfile to target directory"
|
|
mv "$SRC_FILE" "$MY_PATH/sources.nix"
|