diff options
Diffstat (limited to 'tvix')
-rw-r--r-- | tvix/cli/default.nix | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/tvix/cli/default.nix b/tvix/cli/default.nix index 0b73fa1aa59e..4c4980be76a7 100644 --- a/tvix/cli/default.nix +++ b/tvix/cli/default.nix @@ -18,11 +18,67 @@ let echo "Output was correct." ''; }; + + benchmark-gnutime-format-string = + description: + "Benchmark: " + + (builtins.toJSON { + "${description}" = { + kbytes = "%M"; + system = "%S"; + user = "%U"; + }; + }); + in (depot.tvix.crates.workspaceMembers.tvix-cli.build.override { runTests = true; -}).overrideAttrs (_: { +}).overrideAttrs (finalAttrs: previousAttrs: + +let + tvix-cli = finalAttrs.finalPackage; + + # You can run the benchmark with a simple `nix run`, like: + # + # nix run -f . tvix.cli.meta.ci.extraSteps.benchmark-nixpkgs-cross-hello-outpath + # + # TODO(amjoseph): store these results someplace more durable, like git trailers + # + mkExprBenchmark = { expr, description }: + let name = "tvix-cli-benchmark-${description}"; in + (pkgs.writeShellScriptBin name '' + ${lib.escapeShellArgs [ + "${pkgs.time}/bin/time" + "--format" "${benchmark-gnutime-format-string description}" + "${tvix-cli}/bin/tvix" + "--no-warnings" + "-E" expr + ]} + '').overrideAttrs (finalAttrs: previousAttrs: { + passthru = (previousAttrs.passthru or { }) // { + ci = { + label = ":nix: benchmark ${description} in tvix"; + needsOutput = true; + command = "${finalAttrs.finalPackage}/bin/${finalAttrs.meta.mainProgram}"; + }; + }; + }); + + mkNixpkgsBenchmark = attrpath: + mkExprBenchmark { + description = builtins.replaceStrings [ ".drv" ] [ "-drv" ] attrpath; + expr = "(import ${pkgs.path} {}).${attrpath}"; + }; + + benchmarks = { + benchmark-hello = (mkNixpkgsBenchmark "hello.outPath"); + benchmark-cross-hello = (mkNixpkgsBenchmark "pkgsCross.aarch64-multiplatform.hello.outPath"); + benchmark-firefox = (mkNixpkgsBenchmark "firefox.outPath"); + benchmark-cross-firefox = (mkNixpkgsBenchmark "pkgsCross.aarch64-multiplatform.firefox.outPath"); + }; +in +{ meta = { ci.extraSteps = { eval-nixpkgs-stdenv-drvpath = (mkNixpkgsEvalCheck "stdenv.drvPath" pkgs.stdenv.drvPath); @@ -31,5 +87,9 @@ in eval-nixpkgs-cross-stdenv-outpath = (mkNixpkgsEvalCheck "pkgsCross.aarch64-multiplatform.stdenv.outPath" pkgs.pkgsCross.aarch64-multiplatform.stdenv.outPath); eval-nixpkgs-cross-hello-outpath = (mkNixpkgsEvalCheck "pkgsCross.aarch64-multiplatform.hello.outPath" pkgs.pkgsCross.aarch64-multiplatform.hello.outPath); }; + ci.targets = builtins.attrNames benchmarks; }; + + # Expose benchmarks as standard CI targets. + passthru = benchmarks; }) |