From 2dbc5d06a128368195400fc6dc5477b4a1a78dd5 Mon Sep 17 00:00:00 2001 From: Nate <96147421+0xperp@users.noreply.github.com> Date: Sun, 4 Sep 2022 14:28:23 -0400 Subject: added solana-validator 1.10.35 --- .../blockchains/solana-validator/default.nix | 92 ++++++++++++++++++++++ .../blockchains/solana-validator/pin.json | 5 ++ .../blockchains/solana-validator/update.sh | 33 ++++++++ 3 files changed, 130 insertions(+) create mode 100644 pkgs/applications/blockchains/solana-validator/default.nix create mode 100644 pkgs/applications/blockchains/solana-validator/pin.json create mode 100644 pkgs/applications/blockchains/solana-validator/update.sh diff --git a/pkgs/applications/blockchains/solana-validator/default.nix b/pkgs/applications/blockchains/solana-validator/default.nix new file mode 100644 index 0000000000000..d9e159966a733 --- /dev/null +++ b/pkgs/applications/blockchains/solana-validator/default.nix @@ -0,0 +1,92 @@ +# largely inspired from https://github.com/saber-hq/saber-overlay/blob/master/packages/solana/solana.nix + +{ stdenv +, fetchFromGitHub +, lib +, rustPlatform +, IOKit +, Security +, AppKit +, pkg-config +, udev +, zlib +, protobuf +, clang +, llvm +, pkgconfig +, openssl +, libclang +, rustfmt +, perl +, hidapi +, solanaPkgs ? [ + "solana" + "solana-bench-tps" + "solana-faucet" + "solana-gossip" + "solana-install" + "solana-keygen" + "solana-ledger-tool" + "solana-log-analyzer" + "solana-net-shaper" + "solana-sys-tuner" + "solana-validator" + "cargo-build-bpf" + "cargo-test-bpf" + "solana-dos" + "solana-install-init" + "solana-stake-accounts" + "solana-test-validator" + "solana-tokens" + "solana-watchtower" + ] ++ [ + # XXX: Ensure `solana-genesis` is built LAST! + # See https://github.com/solana-labs/solana/issues/5826 + "solana-genesis" + ] +}: +let + pinData = lib.importJSON ./pin.json; + version = pinData.version; + sha256 = pinData.sha256; + cargoSha256 = pinData.cargoSha256; +in +rustPlatform.buildRustPackage rec { + pname = "solana-validator"; + inherit version; + + src = fetchFromGitHub { + owner = "solana-labs"; + repo = "solana"; + rev = "v${version}"; + inherit sha256; + }; + + # partly inspired by https://github.com/obsidiansystems/solana-bridges/blob/develop/default.nix#L29 + inherit cargoSha256; + verifyCargoDeps = true; + + cargoBuildFlags = builtins.map (n: "--bin=${n}") solanaPkgs; + + # weird errors. see https://github.com/NixOS/nixpkgs/issues/52447#issuecomment-852079285 + LIBCLANG_PATH = "${libclang.lib}/lib"; + BINDGEN_EXTRA_CLANG_ARGS = + "-isystem ${libclang.lib}/lib/clang/${lib.getVersion clang}/include"; + LLVM_CONFIG_PATH = "${llvm}/bin/llvm-config"; + + nativeBuildInputs = [ clang llvm pkgconfig protobuf rustfmt perl ]; + buildInputs = + [ openssl zlib libclang hidapi ] ++ (lib.optionals stdenv.isLinux [ udev ]); + strictDeps = true; + + doCheck = false; + + meta = with lib; { + description = "Web-Scale Blockchain for fast, secure, scalable, decentralized apps and marketplaces. "; + homepage = "https://solana.com"; + license = licenses.asl20; + maintainers = with maintainers; [ adjacentresearch ]; + platforms = platforms.unix; + }; + passthru.updateScript = ./update.sh; +} diff --git a/pkgs/applications/blockchains/solana-validator/pin.json b/pkgs/applications/blockchains/solana-validator/pin.json new file mode 100644 index 0000000000000..175cd79ad1bcb --- /dev/null +++ b/pkgs/applications/blockchains/solana-validator/pin.json @@ -0,0 +1,5 @@ +{ + "version": "1.10.35", + "sha256": "sha256-y7+ogMJ5E9E/+ZaTCHWOQWG7iR+BGuVqvlNUDT++Ghc=", + "cargoSha256": "sha256-idlu9qkh2mrF6MxstRcvemKrtTGNY/InBnIDqRvDQPs" +} diff --git a/pkgs/applications/blockchains/solana-validator/update.sh b/pkgs/applications/blockchains/solana-validator/update.sh new file mode 100644 index 0000000000000..ffd8b0010cc26 --- /dev/null +++ b/pkgs/applications/blockchains/solana-validator/update.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i oil -p jq sd nix-prefetch-github ripgrep + +# TODO set to `verbose` or `extdebug` once implemented in oil +shopt --set xtrace +# we need failures inside of command subs to get the correct cargoSha256 +shopt --unset inherit_errexit + +const directory = $(dirname $0 | xargs realpath) +const owner = "solana-labs" +const repo = "solana" +const latest_rev = $(curl -q https://api.github.com/repos/${owner}/${repo}/releases/latest | \ + jq -r '.tag_name') +const latest_version = $(echo $latest_rev | sd 'v' '') +const current_version = $(jq -r '.version' $directory/pin.json) +if ("$latest_version" === "$current_version") { + echo "solana is already up-to-date" + return 0 +} else { + const tarball_meta = $(nix-prefetch-github $owner $repo --rev "$latest_rev") + const tarball_hash = "sha256-$(echo $tarball_meta | jq -r '.sha256')" + + jq ".version = \"$latest_version\" | \ + .\"sha256\" = \"$tarball_hash\" | \ + .\"cargoSha256\" = \"\"" $directory/pin.json | sponge $directory/pin.json + + const new_cargo_sha256 = $(nix-build -A solana-testnet 2>&1 | \ + tail -n 2 | \ + head -n 1 | \ + sd '\s+got:\s+' '') + + jq ".cargoSha256 = \"$new_cargo_sha256\"" $directory/pin.json | sponge $directory/pin.json +} -- cgit 1.4.1