git.delta.rocks / jrsonnet / refs/commits / ec8e2e1ce158

difftreelog

ci benchmark against stable release

Yaroslav Bolyukin2022-12-03parent: #fdd9d5d.patch.diff
in: master

4 files changed

modifiedflake.nixdiffbeforeafterboth
--- a/flake.nix
+++ b/flake.nix
@@ -29,9 +29,28 @@
               cargo = rust;
             };
           };
+          jrsonnet-release = pkgs.callPackage ./nix/jrsonnet-release.nix {
+            rustPlatform = pkgs.makeRustPlatform {
+              rustc = rust;
+              cargo = rust;
+            };
+          };
 
           benchmarks = pkgs.callPackage ./nix/benchmarks.nix {
-            inherit go-jsonnet sjsonnet jsonnet jrsonnet;
+            inherit go-jsonnet sjsonnet jsonnet jrsonnet jrsonnet-release;
+          };
+          benchmarks-quick = pkgs.callPackage ./nix/benchmarks.nix {
+            inherit go-jsonnet sjsonnet jsonnet jrsonnet jrsonnet-release;
+            quick = true;
+          };
+          benchmarks-against-release = pkgs.callPackage ./nix/benchmarks.nix {
+            inherit go-jsonnet sjsonnet jsonnet jrsonnet jrsonnet-release;
+            againstRelease = true;
+          };
+          benchmarks-quick-against-release = pkgs.callPackage ./nix/benchmarks.nix {
+            inherit go-jsonnet sjsonnet jsonnet jrsonnet jrsonnet-release;
+            quick = true;
+            againstRelease = true;
           };
         };
         devShell = pkgs.mkShell {
modifiednix/benchmarks.nixdiffbeforeafterboth
--- a/nix/benchmarks.nix
+++ b/nix/benchmarks.nix
@@ -5,11 +5,13 @@
 , stdenv
 , fetchFromGitHub
 , jrsonnet
+, jrsonnet-release
 , go-jsonnet
 , sjsonnet
 , jsonnet
 , hyperfine
 , quick ? false
+, againstRelease ? false
 }:
 let
   jsonnetBench = fetchFromGitHub {
@@ -53,7 +55,9 @@
         ${jsonnet-bundler}/bin/jb install
       '';
 
-  skipSlow = if quick then "slow benchmark" else "";
+  # Removes outsiders from the output
+  # Useful when comparing performance of different jrsonnet releases
+  skipSlow = if quick then "slow benchmark, but only quick requested" else "";
 in
 stdenv.mkDerivation {
   name = "benchmarks";
@@ -67,7 +71,7 @@
     jsonnet
 
     hyperfine
-  ];
+  ] ++ (if againstRelease then [ jrsonnet-release ] else [ ]);
 
   installPhase =
     let
@@ -89,23 +93,26 @@
           echo "> Note: No results for C++, ${skipCpp}" >> $out
           echo >> $out
         '' else ""}
-        echo "<details>" >> $out
-        echo "<summary>Source</summary>" >> $out
-        echo >> $out
-        echo "\`\`\`jsonnet" >> $out
-        ${if pathIsGenerator then "echo \"// Generator source\" >> $out" else ""}
-        ${if omitSource then "echo \"// Omitted: too large\" >> $out" else "cat ${path} >> $out"}
-        echo >> $out
-        echo "\`\`\`" >> $out
-        echo "</details>" >> $out
-        echo >> $out
+        ${if !quick then ''
+          echo "<details>" >> $out
+          echo "<summary>Source</summary>" >> $out
+          echo >> $out
+          echo "\`\`\`jsonnet" >> $out
+          ${if pathIsGenerator then "echo \"// Generator source\" >> $out" else ""}
+          ${if omitSource then "echo \"// Omitted: too large\" >> $out" else "cat ${path} >> $out"}
+          echo >> $out
+          echo "\`\`\`" >> $out
+          echo "</details>" >> $out
+          echo >> $out
+        '' else ""}
         path=${path}
         ${if pathIsGenerator then ''
           jrsonnet $path > generated.jsonnet
           path=generated.jsonnet
         '' else ""}
-        hyperfine -N ${if quick then "-r1" else ""} --output=pipe --style=basic --export-markdown result.md \
+        hyperfine -N -w4 --output=pipe --style=basic --export-markdown result.md \
           "jrsonnet $path ${if vendor != "" then "-J${vendor}" else ""}" -n "Rust" \
+          ${if againstRelease then "\"jrsonnet-release $path ${if vendor != "" then "-J${vendor}" else ""}\" -n \"Rust (released)\"" else "" } \
           ${if skipGo == "" then "\"go-jsonnet $path ${if vendor != "" then "-J ${vendor}" else ""}\" -n \"Go\"" else "" } \
           ${if skipScala == "" then "\"sjsonnet $path ${if vendor != "" then "-J ${vendor}" else ""}\" -n \"Scala\"" else "" } \
           ${if skipCpp == "" then "\"jsonnet $path ${if vendor != "" then "-J ${vendor}" else ""}\" -n \"C++\"" else "" }
@@ -114,40 +121,42 @@
     in
     ''
       touch $out
-      cat ${./benchmarks.md} >> $out
-      echo >> $out
+      ${if !quick then ''
+        cat ${./benchmarks.md} >> $out
+        echo >> $out
 
-      echo "<details>" >> $out
-      echo "<summary>Tested versions</summary>" >> $out
-      echo >> $out
-      echo Rust: git as $(date +'%d.%m.%Y' -u) >> $out
-      echo >> $out
-      echo "\`\`\`" >> $out
-      jrsonnet --help >> $out
-      echo "\`\`\`" >> $out
-      echo >> $out
-      echo Go: $(go-jsonnet --version) >> $out
-      echo >> $out
-      echo "\`\`\`" >> $out
-      go-jsonnet --help >> $out
-      echo "\`\`\`" >> $out
-      echo >> $out
-      echo C++: $(jsonnet --version) >> $out
-      echo >> $out
-      echo "\`\`\`" >> $out
-      jsonnet --help >> $out
-      echo "\`\`\`" >> $out
-      echo >> $out
-      echo Scala: >> $out
-      echo >> $out
-      echo "\`\`\`" >> $out
-      sjsonnet 2>> $out || true
-      echo "\`\`\`" >> $out
-      echo >> $out
-      echo "</details>" >> $out
-      echo >> $out
+        echo "<details>" >> $out
+        echo "<summary>Tested versions</summary>" >> $out
+        echo >> $out
+        echo Rust: git as $(date +'%d.%m.%Y' -u) >> $out
+        echo >> $out
+        echo "\`\`\`" >> $out
+        jrsonnet --help >> $out
+        echo "\`\`\`" >> $out
+        echo >> $out
+        echo Go: $(go-jsonnet --version) >> $out
+        echo >> $out
+        echo "\`\`\`" >> $out
+        go-jsonnet --help >> $out
+        echo "\`\`\`" >> $out
+        echo >> $out
+        echo C++: $(jsonnet --version) >> $out
+        echo >> $out
+        echo "\`\`\`" >> $out
+        jsonnet --help >> $out
+        echo "\`\`\`" >> $out
+        echo >> $out
+        echo Scala: >> $out
+        echo >> $out
+        echo "\`\`\`" >> $out
+        sjsonnet 2>> $out || true
+        echo "\`\`\`" >> $out
+        echo >> $out
+        echo "</details>" >> $out
+        echo >> $out
 
-      echo >> $out
+        echo >> $out
+      '' else ""}
       echo "## Real world" >> $out
       ${mkBench {name = "Graalvm CI"; path = "${graalvmBench}/ci.jsonnet"; skipCpp = "takes longer than a hour";}}
       ${mkBench {name = "Kube-prometheus manifests"; vendor = "${kubePrometheusBench}/vendor"; path = "${kubePrometheusBench}/example.jsonnet"; skipCpp = skipSlow;}}
modifiednix/jrsonnet-release.nixdiffbeforeafterboth
--- a/nix/jrsonnet-release.nix
+++ b/nix/jrsonnet-release.nix
@@ -3,14 +3,15 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "jrsonnet";
-  version = "5f0f8de9f52f961e2ff162e0a3fd4ca20a275f1d";
+  version = "d32fe45b8ed28fb39b5359a704922922368af1c0";
 
   src = fetchFromGitHub {
     owner = "CertainLach";
     repo = pname;
     rev = version;
-    hash = lib.fakeHash;
+    hash = "sha256-R9Xt36bYS5upVDzt8hEifwmfocXpJbIKwvxkoJNEGVc=";
   };
+  cargoHash = "sha256-V+KGWeNlUnelofaGzufNPLGDyxazoFrjZ/n391VYYws=";
 
   cargoTestFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];
   cargoBuildFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];
modifiednix/jrsonnet.nixdiffbeforeafterboth
20 pname = "jrsonnet";20 pname = "jrsonnet";
21 version = "git";21 version = "git";
2222
23 cargoTestFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];23 cargoTestFlags = [ "--features=mimalloc,legacy-this-file,nightly" ];
24 cargoBuildFlags = [ "--package=jrsonnet --features=mimalloc,legacy-this-file" ];24 cargoBuildFlags = [ "--features=mimalloc,legacy-this-file,nightly" ];
2525
26 buildInputs = [ makeWrapper ];26 buildInputs = [ makeWrapper ];
2727