From 52dde0bffd2eb1579dd21a72c59c2b8d83e89d19 Mon Sep 17 00:00:00 2001 From: Sergey Tatarintsev Date: Thu, 14 Dec 2023 13:01:24 +0100 Subject: [PATCH] ci: Track wasm size over time Adds wasm and gzipped wasm engine size to the dashboard. Fix prisma/team-orm#666 --- nix/all-engines.nix | 37 ++++++++++++++++++++++++- nix/publish-engine-size.nix | 4 ++- query-engine/query-engine-wasm/build.sh | 15 ++++++---- 3 files changed, 48 insertions(+), 8 deletions(-) diff --git a/nix/all-engines.nix b/nix/all-engines.nix index d432afd24415..57d727fd48c3 100644 --- a/nix/all-engines.nix +++ b/nix/all-engines.nix @@ -26,7 +26,7 @@ in buildInputs = [ pkgs.openssl.out ]; nativeBuildInputs = with pkgs; [ - cargo + rustToolchain git # for our build scripts that bake in the git hash protobuf # for tonic openssl.dev @@ -114,4 +114,39 @@ in ''; }) { profile = "release"; }; + + packages.query-engine-wasm = lib.makeOverridable + ({ profile }: stdenv.mkDerivation { + name = "query-engine-wasm"; + inherit src; + inherit (self'.packages.prisma-engines) buildInputs configurePhase dontStrip; + + nativeBuildInputs = self'.packages.prisma-engines.nativeBuildInputs ++ (with pkgs; [wasm-pack wasm-bindgen-cli jq binaryen]); + + buildPhase = '' + cd query-engine/query-engine-wasm + HOME=$(mktemp -dt wasm-pack-home-XXXX) WASM_BUILD_PROFILE=${profile} ./build.sh + ''; + + installPhase = '' + cp -r pkg $out + ''; + }) + { profile = "release"; }; + + packages.query-engine-wasm-gz = lib.makeOverridable + ({ profile }: stdenv.mkDerivation { + name = "query-engine-wasm-gz"; + inherit src; + + buildPhase = '' + gzip -cn ${self'.packages.query-engine-wasm}/query_engine_bg.wasm > query_engine_bg.wasm.gz + ''; + + installPhase = '' + mkdir -p $out + cp query_engine_bg.wasm.gz $out/ + ''; + }) + { profile = "release"; }; } diff --git a/nix/publish-engine-size.nix b/nix/publish-engine-size.nix index 45e7883994ff..8681ba24c386 100644 --- a/nix/publish-engine-size.nix +++ b/nix/publish-engine-size.nix @@ -45,7 +45,9 @@ ${self'.packages.update-engine-size}/bin/update-engine-size \ ${self'.packages.query-engine-bin-and-lib}/bin/query-engine \ - ${self'.packages.query-engine-bin-and-lib}/lib/libquery_engine.node + ${self'.packages.query-engine-bin-and-lib}/lib/libquery_engine.node \ + ${self'.packages.query-engine-wasm-gz}/query_engine_bg.wasm.gz \ + ${self'.packages.query-engine-wasm}/query_engine_bg.wasm git add "$CSV_PATH" git commit --quiet -m "update engines size for $CURRENT_COMMIT_SHORT" diff --git a/query-engine/query-engine-wasm/build.sh b/query-engine/query-engine-wasm/build.sh index e4db9fbad6da..5f87e76305d6 100755 --- a/query-engine/query-engine-wasm/build.sh +++ b/query-engine/query-engine-wasm/build.sh @@ -10,11 +10,14 @@ OUT_JSON="${OUT_FOLDER}/package.json" OUT_TARGET="bundler" OUT_NPM_NAME="@prisma/query-engine-wasm" -# use `wasm-pack build --release` on CI only -if [[ -z "${BUILDKITE:-}" ]] && [[ -z "${GITHUB_ACTIONS:-}" ]]; then - BUILD_PROFILE="--dev" -else - BUILD_PROFILE="--release" +if [[ -z "${WASM_BUILD_PROFILE:-}" ]]; then + # use `wasm-pack build --release` by default on CI only + if [[ -z "${BUILDKITE:-}" ]] && [[ -z "${GITHUB_ACTIONS:-}" ]]; then + WASM_BUILD_PROFILE="dev" + else + WASM_BUILD_PROFILE="release" + fi + WASM_BUILD_PROFILE="dev" fi # Check if wasm-pack is installed @@ -25,7 +28,7 @@ then curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh fi -wasm-pack build $BUILD_PROFILE --target $OUT_TARGET --out-name query_engine +wasm-pack build "--$WASM_BUILD_PROFILE" --target $OUT_TARGET --out-name query_engine sleep 1