From 30b370ee222a83fd7cc41ef869ba6379b4cbedd8 Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Sun, 20 Nov 2022 18:04:48 +0000 Subject: [PATCH] fix: off-by-one in std.range --- --- a/crates/jrsonnet-evaluator/src/val.rs +++ b/crates/jrsonnet-evaluator/src/val.rs @@ -347,7 +347,7 @@ } Self::Range(a, b) => { let mut out = Vec::with_capacity(self.len()); - for i in *a..*b { + for i in *a..=*b { out.push(Val::Num(f64::from(i))); } Cc::new(out) --- a/flake.nix +++ b/flake.nix @@ -17,13 +17,29 @@ }); in rec { + packages = rec { + go-jsonnet = pkgs.callPackage ./nix/go-jsonnet.nix { }; + sjsonnet = pkgs.callPackage ./nix/sjsonnet.nix { }; + jsonnet = pkgs.callPackage ./nix/jsonnet.nix { }; + # I didn't managed to build it, and nixpkgs version is marked as broken + # haskell-jsonnet = pkgs.callPackage ./nix/haskell-jsonnet.nix { }; + jrsonnet = pkgs.callPackage ./nix/jrsonnet.nix { + rustPlatform = pkgs.makeRustPlatform { + rustc = rust; + cargo = rust; + }; + }; + + benchmarks = pkgs.callPackage ./nix/benchmarks.nix { + inherit go-jsonnet sjsonnet jsonnet jrsonnet; + }; + }; devShell = pkgs.mkShell { nativeBuildInputs = with pkgs;[ rust cargo-edit lld hyperfine - go-jsonnet valgrind ]; }; --- /dev/null +++ b/nix/benchmarks.nix @@ -0,0 +1,9 @@ +{ stdenv, jrsonnet, go-jsonnet, sjsonnet, jsonnet, hyperfine }: + +stdenv.mkDerivation { + name = "benchmarks"; + __impure = true; + unpackPhase = "true"; + + installPhase = "touch $out"; +} --- /dev/null +++ b/nix/go-jsonnet.nix @@ -0,0 +1,24 @@ +{ lib, buildGo119Module, fetchFromGitHub }: + +buildGo119Module rec { + pname = "go-jsonnet"; + # Latest release is broken: https://github.com/google/go-jsonnet/issues/653 + version = "b4633b66f85e069b105b1ff076d178e4354941bc"; + + src = fetchFromGitHub { + owner = "google"; + repo = "go-jsonnet"; + rev = "${version}"; + hash = "sha256-J+bGdbYo2Ch3ORYD57yJA4jiPiS8IYASZ6kJHhyaqeU="; + }; + + vendorHash = "sha256-j1fTOUpLx34TgzW94A/BctLrg9XoTtb3cBizhVJoEEI="; + + postInstall = '' + mv $out/bin/jsonnet $out/bin/go-jsonnet + ''; + + doCheck = false; + + subPackages = [ "cmd/jsonnet" ]; +} --- /dev/null +++ b/nix/jrsonnet.nix @@ -0,0 +1,24 @@ +{ lib, fetchFromGitHub, rustPlatform }: + +let + jsonnet = fetchFromGitHub { + rev = "v${version}"; + owner = "google"; + repo = "jsonnet"; + hash = "sha256-q1MNdbyrx4vvN5woe0o90pPqaNtsZjI5RQ7KJt7rOpU="; + }; +in + +rustPlatform.buildRustPackage rec { + pname = "jrsonnet"; + version = "git"; + + src = ./..; + + cargoTestFlags = [ "--package=jrsonnet" ]; + cargoBuildFlags = [ "--package=jrsonnet" ]; + + cargoLock = { + lockFile = ../Cargo.lock; + }; +} --- /dev/null +++ b/nix/jsonnet.nix @@ -0,0 +1,22 @@ +{ stdenv, lib, jekyll, fetchFromGitHub }: + +stdenv.mkDerivation rec { + pname = "jsonnet"; + version = "0.19.1"; + + src = fetchFromGitHub { + rev = "v${version}"; + owner = "google"; + repo = "jsonnet"; + hash = "sha256-q1MNdbyrx4vvN5woe0o90pPqaNtsZjI5RQ7KJt7rOpU="; + }; + + makeFlags = [ + "jsonnet" + ]; + + installPhase = '' + mkdir -p $out/bin + cp jsonnet $out/bin/jsonnet + ''; +} --- /dev/null +++ b/nix/sjsonnet.nix @@ -0,0 +1,30 @@ +# This derivation uses released sjsonnet binary, which most users will use + +# However, recommended way of using sjsonnet - is using a client-server model, +# for which there is no released binaries: https://github.com/databricks/sjsonnet/issues/51 + +# TODO: Somehow build client-server version of sjsonnet, and use it in benchmarks + +{ stdenv, lib, fetchurl, jdk17, makeWrapper }: + +stdenv.mkDerivation { + pname = "sjsonnet"; + version = "0.4.3"; + + src = fetchurl { + url = + "https://github.com/databricks/sjsonnet/releases/download/0.4.3/sjsonnet.jar"; + hash = "sha256-XDJAAAlFu1DfQ2YlGEO8OpWpwxzG83tHlCQIDiqfRGY="; + }; + + unpackPhase = "true"; + buildInputs = + [ jdk17 makeWrapper ]; + + installPhase = '' + mkdir -p $out/bin $out/lib + cp $src $out/lib/sjsonnet.jar + makeWrapper ${jdk17}/bin/java $out/bin/sjsonnet --add-flags "-Xss100m -XX:+UseStringDeduplication -jar $out/lib/sjsonnet.jar" + ''; + separateDebugInfo = false; +} -- gitstuff