Commit 36abb0e5 authored by gilice's avatar gilice
Browse files

dart: add update script

parent a585ce72
Loading
Loading
Loading
Loading
+25 −53
Original line number Diff line number Diff line
@@ -4,43 +4,11 @@
, unzip
, runCommand
, darwin
# we need a way to build other dart versions
# than the latest, because flutter might want
# another version
, version ? "2.19.3"
, sources ? let
    base = "https://storage.googleapis.com/dart-archive/channels";
    x86_64 = "x64";
    i686 = "ia32";
    aarch64 = "arm64";
in
  {
    "${version}-aarch64-darwin" = fetchurl {
      url = "${base}/stable/release/${version}/sdk/dartsdk-macos-${aarch64}-release.zip";
      sha256 = "sha256-wfUh6rXy8jAC0TVQJzXh4SrV2DQs9SvY8PGtNgZx+cA=";
    };
    "${version}-x86_64-darwin" = fetchurl {
      url = "${base}/stable/release/${version}/sdk/dartsdk-macos-${x86_64}-release.zip";
      sha256 = "sha256-zyu6r8akId/AHpBKH95wJXXu1LD9CKShWYKfppnSRx4=";
    };
    "${version}-x86_64-linux" = fetchurl {
      url = "${base}/stable/release/${version}/sdk/dartsdk-linux-${x86_64}-release.zip";
      sha256 = "sha256-45HE7Y9iO5dI+JfLWF1ikFfBFB+er46bK+EYkyuhFjI=";
    };
    "${version}-i686-linux" = fetchurl {
      url = "${base}/stable/release/${version}/sdk/dartsdk-linux-${i686}-release.zip";
      sha256 = "sha256-IkSJWfAocT1l8F2igAkR+Y5PNYD5PZ0j21D8aJk9JCY=";
    };
    "${version}-aarch64-linux" = fetchurl {
      url = "${base}/stable/release/${version}/sdk/dartsdk-linux-${aarch64}-release.zip";
      sha256 = "sha256-Bt18brbJA/XfiyP5o197HDXMuGm+a1AZx92Thoriv78=";
    };
  }
, sources ? import ./sources.nix {inherit fetchurl;}
, version ? sources.versionUsed
}:

assert version != null && version != "";
assert sources != null && (builtins.isAttrs sources);

stdenv.mkDerivation (finalAttrs: {
  pname = "dart";
  inherit version;
@@ -59,7 +27,9 @@ stdenv.mkDerivation (finalAttrs: {

  libPath = lib.makeLibraryPath [ stdenv.cc.cc ];
  dontStrip = true;
  passthru.tests = {
  passthru = {
    updateScript = ./update.sh;
    tests = {
      testCreate = runCommand "dart-test-create" { nativeBuildInputs = [ finalAttrs.finalPackage ]; } ''
        PROJECTNAME="dart_test_project"
        dart create --no-pub $PROJECTNAME
@@ -82,6 +52,8 @@ stdenv.mkDerivation (finalAttrs: {
        touch $out
      '';
    };
  };

  meta = with lib; {
    homepage = "https://www.dartlang.org/";
    maintainers = with maintainers; [ grburst ];
+27 −0
Original line number Diff line number Diff line
# This file was generated by ./update.sh.
# If you do not find a line of three #-s at the end, it is broken and should not be used.
let version = "2.19.3"; in
{  fetchurl }: {
  versionUsed = version;
  "${version}-x86_64-darwin" = fetchurl {
    url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${version}/sdk/dartsdk-macos-x64-release.zip";
    sha256 = "193hf56j7bws8bzqxxzz2sgbn2d80g5s8vp8ihi22cm3mmppfi4v";
  };
  "${version}-aarch64-darwin" = fetchurl {
    url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${version}/sdk/dartsdk-macos-arm64-release.zip";
    sha256 = "0b30l8kfcsl1j6w2vbq08p0v4h4gca013l5fpznjqq0midxhybnw";
  };
  "${version}-aarch64-linux" = fetchurl {
    url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${version}/sdk/dartsdk-linux-arm64-release.zip";
    sha256 = "0qyi7ppsf4rmzx1qgx3qbn4k7bgbncxjql6a9f2b1aj6l6lllvmg";
  };
  "${version}-x86_64-linux" = fetchurl {
    url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${version}/sdk/dartsdk-linux-x64-release.zip";
    sha256 = "0iq7mdwpsnykk3j2bsgmazg30m4qg7i2lpv1ygbhy2lbhrkdpdck";
  };
  "${version}-i686-linux" = fetchurl {
    url = "https://storage.googleapis.com/dart-archive/channels/stable/release/${version}/sdk/dartsdk-linux-ia32-release.zip";
    sha256 = "0xksis14ff6bzjvycgxgldg96n88rh42adjyrrhcay2s183vh480";
  };
}
###
+80 −0
Original line number Diff line number Diff line
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p curl jq

set -euo pipefail

# so if the script fails, debug logs are on stdenv
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="$MY_PATH/sources.nix"
log "file to write is $SRC_FILE"

PRELUDE="# This file was generated by ./update.sh.
# If you do not find a line of three #-s at the end, it is broken and should not be used.
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 "Replacing version in dart/default.nix"
sed -i "s/$UPDATE_NIX_OLD_VERSION/$NEW_VER/g" "$MY_PATH/default.nix"