Add updater procedure

+130 -72
+20
pkgs/by-name/wi/windmill/fetchers.nix
··· 1 + # not a stable interface, do not reference outside the windmill package but make a copy if you need 2 + { 3 + lib, 4 + stdenv, 5 + fetchurl, 6 + }: 7 + 8 + { 9 + fetchLibrustyV8 = 10 + args: 11 + fetchurl { 12 + name = "librusty_v8-${args.version}"; 13 + url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a.gz"; 14 + sha256 = args.shas.${stdenv.hostPlatform.system}; 15 + meta = { 16 + inherit (args) version; 17 + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 18 + }; 19 + }; 20 + }
+11
pkgs/by-name/wi/windmill/librusty_v8.nix
··· 1 + # auto-generated file -- DO NOT EDIT! 2 + { fetchLibrustyV8 }: 3 + 4 + fetchLibrustyV8 { 5 + version = "0.106.0"; 6 + shas = { 7 + # NOTE; Follows supported platforms of package (see meta.platforms attribute)! 8 + x86_64-linux = "18r0bdsl5xpf0x9q6kkylgq52azqmqg9d6danya9znb94by2bdlc"; 9 + aarch64-linux = "175p9ly6fvfy04vhx2rif0riv8drxlq4yz5p42d0yp491qr022dq"; 10 + }; 11 + }
+61 -72
pkgs/by-name/wi/windmill/package.nix
··· 1 1 { 2 2 lib, 3 + callPackage, 3 4 rustPlatform, 4 5 fetchFromGitHub, 5 6 buildNpmPackage, ··· 21 22 rustfmt, 22 23 stdenv, 23 24 swagger-cli, 25 + _experimental-update-script-combinators, 26 + nix-update-script, 27 + writeScript, 28 + librusty_v8 ? ( 29 + callPackage ./librusty_v8.nix { 30 + inherit (callPackage ./fetchers.nix { }) fetchLibrustyV8; 31 + } 32 + ), 24 33 }: 25 34 26 35 let ··· 35 44 }; 36 45 37 46 pythonEnv = python3.withPackages (ps: [ ps.pip-tools ]); 38 - 39 - frontend-build = buildNpmPackage { 40 - inherit version src; 41 - 42 - pname = "windmill-ui"; 43 - 44 - sourceRoot = "${src.name}/frontend"; 45 - 46 - npmDepsHash = "sha256-3AeDGd/4dGHm8kGKEH3sqNOuQ1LPjP5n4qOEaqVMm0w="; 47 - 48 - # without these you get a 49 - # FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 50 - env.NODE_OPTIONS = "--max-old-space-size=8192"; 51 - 52 - preBuild = '' 53 - npm run generate-backend-client 54 - ''; 55 - 56 - buildInputs = [ 57 - pixman 58 - cairo 59 - pango 60 - giflib 61 - ]; 62 - nativeBuildInputs = [ 63 - python3 64 - pkg-config 65 - ]; 66 - 67 - installPhase = '' 68 - mkdir -p $out/share 69 - mv build $out/share/windmill-frontend 70 - ''; 71 - }; 72 47 in 73 - rustPlatform.buildRustPackage { 74 - inherit pname version; 75 - src = "${src}/backend"; 48 + rustPlatform.buildRustPackage (finalAttrs: { 49 + inherit pname version src; 50 + sourceRoot = "${src.name}/backend"; 76 51 77 52 env = { 78 53 SQLX_OFFLINE = "true"; 79 - RUSTY_V8_ARCHIVE = 80 - let 81 - fetch_librusty_v8 = 82 - args: 83 - fetchurl { 84 - name = "librusty_v8-${args.version}"; 85 - url = "https://github.com/denoland/rusty_v8/releases/download/v${args.version}/librusty_v8_release_${stdenv.hostPlatform.rust.rustcTarget}.a"; 86 - sha256 = 87 - args.shas.${stdenv.hostPlatform.system} 88 - or (throw "Unsupported platform ${stdenv.hostPlatform.system}"); 89 - meta = { 90 - inherit (args) version; 91 - sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; 92 - }; 93 - }; 94 - in 95 - fetch_librusty_v8 { 96 - version = "0.83.2"; 97 - shas = { 98 - x86_64-linux = "sha256-RJNdy5jRZK3dTgrHsWuZZAHUyy1EogyNNuBekZ3Arrk="; 99 - aarch64-linux = "sha256-mpOmuqtd7ob6xvrgH4P/6GLa/hXTS/ok0WOYo7+7ZhI="; 100 - x86_64-darwin = "sha256-2o8CvJ3r5+4PLNGTySqPPDTqbU0piX4D1UtZMscMdHU="; 101 - aarch64-darwin = "sha256-WHeITWSHjZxfQJndxcjsp4yIERKrKXSHFZ0UBc43p8o="; 102 - }; 103 - }; 54 + FRONTEND_BUILD_DIR = "${finalAttrs.passthru.web-ui}/share/windmill-frontend"; 55 + RUSTY_V8_ARCHIVE = librusty_v8; 104 56 }; 105 57 106 58 cargoLock = { ··· 130 82 131 83 substituteInPlace src/main.rs \ 132 84 --replace 'unknown-version' 'v${version}' 133 - 134 - pushd .. 135 - 136 - mkdir -p frontend/build 137 - cp -R ${frontend-build}/share/windmill-frontend/* frontend/build 138 - cp ${src}/openflow.openapi.yaml . 139 - 140 - popd 141 85 ''; 142 86 143 87 buildInputs = [ ··· 150 94 nativeBuildInputs = [ 151 95 pkg-config 152 96 makeWrapper 153 - swagger-cli 154 97 cmake # for libz-ng-sys crate 155 98 ]; 156 99 ··· 177 120 --set NSJAIL_PATH "${nsjail}/bin/nsjail" 178 121 ''; 179 122 123 + passthru.web-ui = buildNpmPackage { 124 + inherit version src; 125 + 126 + pname = "windmill-ui"; 127 + 128 + sourceRoot = "${src.name}/frontend"; 129 + 130 + npmDepsHash = "sha256-3AeDGd/4dGHm8kGKEH3sqNOuQ1LPjP5n4qOEaqVMm0w="; 131 + 132 + # without these you get a 133 + # FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 134 + env.NODE_OPTIONS = "--max-old-space-size=8192"; 135 + 136 + postUnpack = '' 137 + cp ${src}/openflow.openapi.yaml . 138 + ''; 139 + 140 + preBuild = '' 141 + npm run generate-backend-client 142 + ''; 143 + 144 + buildInputs = [ 145 + pixman 146 + cairo 147 + pango 148 + ]; 149 + nativeBuildInputs = [ 150 + pkg-config 151 + ]; 152 + 153 + installPhase = '' 154 + mkdir -p $out/share 155 + mv build $out/share/windmill-frontend 156 + ''; 157 + }; 158 + 159 + passthru.updateScript = _experimental-update-script-combinators.sequence [ 160 + (nix-update-script { 161 + extraArgs = [ 162 + "--subpackage" 163 + "web-ui" 164 + ]; 165 + }) 166 + (./update-librusty.sh) 167 + ]; 168 + 180 169 meta = { 181 170 changelog = "https://github.com/windmill-labs/windmill/blob/${src.rev}/CHANGELOG.md"; 182 171 description = "Open-source developer platform to turn scripts into workflows and UIs"; ··· 194 183 "aarch64-linux" 195 184 ]; 196 185 }; 197 - } 186 + })
+38
pkgs/by-name/wi/windmill/update-librusty.sh
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i bash -p gnugrep gnused nix 3 + # shellcheck shell=bash 4 + 5 + set -eu -o pipefail 6 + 7 + # ASSUMES; The Cargo.lock file inside this directory holds the correct librusty version 8 + 9 + PACKAGE_DIR=$(dirname "$(readlink --canonicalize-existing "${BASH_SOURCE[0]}")") 10 + OUTPUT_FILE="$PACKAGE_DIR/librusty_v8.nix" 11 + NEW_VERSION="$(grep --after-context 5 'name = "v8"' "$PACKAGE_DIR/Cargo.lock" | grep 'version =' | sed -E 's/version = "//;s/"//')" 12 + 13 + CURRENT_VERSION="" 14 + if [ -f "$OUTPUT_FILE" ]; then 15 + CURRENT_VERSION="$(grep 'version =' "$OUTPUT_FILE" | sed -E 's/version = "//;s/"//')" 16 + fi 17 + 18 + if [ "$CURRENT_VERSION" == "$NEW_VERSION" ]; then 19 + echo "No update needed, $CURRENT_VERSION is already latest" 20 + exit 0 21 + fi 22 + 23 + TEMP_FILE="$OUTPUT_FILE.tmp" 24 + cat > "$TEMP_FILE" <<EOF 25 + # auto-generated file -- DO NOT EDIT! 26 + { fetchLibrustyV8 }: 27 + 28 + fetchLibrustyV8 { 29 + version = "$NEW_VERSION"; 30 + shas = { 31 + # NOTE; Follows supported platforms of package (see meta.platforms attribute)! 32 + x86_64-linux = "$(nix-prefetch-url --type sha256 https://github.com/denoland/rusty_v8/releases/download/v"$NEW_VERSION"/librusty_v8_release_x86_64-unknown-linux-gnu.a.gz)"; 33 + aarch64-linux = "$(nix-prefetch-url --type sha256 https://github.com/denoland/rusty_v8/releases/download/v"$NEW_VERSION"/librusty_v8_release_aarch64-unknown-linux-gnu.a.gz)"; 34 + }; 35 + } 36 + EOF 37 + 38 + mv "$TEMP_FILE" "$OUTPUT_FILE"