summary refs log tree commit diff
path: root/pkgs/applications/blockchains/polkadot/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/blockchains/polkadot/default.nix')
-rw-r--r--pkgs/applications/blockchains/polkadot/default.nix35
1 files changed, 31 insertions, 4 deletions
diff --git a/pkgs/applications/blockchains/polkadot/default.nix b/pkgs/applications/blockchains/polkadot/default.nix
index eddc2cd8a21..1210caaa251 100644
--- a/pkgs/applications/blockchains/polkadot/default.nix
+++ b/pkgs/applications/blockchains/polkadot/default.nix
@@ -4,21 +4,48 @@
 , llvmPackages
 , protobuf
 , rustPlatform
+, writeShellScriptBin
 }:
 rustPlatform.buildRustPackage rec {
   pname = "polkadot";
-  version = "0.9.14";
+  version = "0.9.16";
 
   src = fetchFromGitHub {
     owner = "paritytech";
     repo = "polkadot";
     rev = "v${version}";
-    sha256 = "sha256-SCi+hpdMUTX1NLF1RUce0d/2G19sVfJ5IsmM1xcAUKo=";
+    sha256 = "sha256-NXuYUmo80rrBZCcuISKon48SKyyJrkzCEhggxaJNfBM=";
+
+    # see the comment below on fakeGit for how this is used
+    leaveDotGit = true;
+    postFetch = ''
+      ( cd $out; git rev-parse --short HEAD > .git_commit )
+      rm -rf $out/.git
+    '';
   };
 
-  cargoSha256 = "sha256-ZcIsbMI96qX0LLJXmkCRS9g40ccZOH/upPbAA7XEZIw=";
+  cargoSha256 = "sha256-PIORMTzQbMdlrKwuF4MiGrLlg2nQpgLRsaHHeiCbqrg=";
 
-  nativeBuildInputs = [ clang ];
+  nativeBuildInputs =
+    let
+      # the build process of polkadot requires a .git folder in order to determine
+      # the git commit hash that is being built and add it to the version string.
+      # since having a .git folder introduces reproducibility issues to the nix
+      # build, we check the git commit hash after fetching the source and save it
+      # into a .git_commit file, and then delete the .git folder. then we create a
+      # fake git command that will just return the contents of this file, which will
+      # be used when the polkadot build calls `git rev-parse` to fetch the commit
+      # hash.
+      fakeGit = writeShellScriptBin "git" ''
+        if [[ $@ = "rev-parse --short HEAD" ]]; then
+          cat /build/source/.git_commit
+        else
+          >&2 echo "Unknown command: $@"
+          exit 1
+        fi
+      '';
+    in
+    [ clang fakeGit ];
 
   LIBCLANG_PATH = "${llvmPackages.libclang.lib}/lib";
   PROTOC = "${protobuf}/bin/protoc";