about summary refs log tree commit diff
path: root/pkgs/applications/blockchains/polkadot
diff options
context:
space:
mode:
authorAndré Silva <andrerfosilva@gmail.com>2022-02-11 15:47:20 +0000
committerAndré Silva <andrerfosilva@gmail.com>2022-02-11 16:00:18 +0000
commitcf4e6208c1e7c7ea535c4d33860bf7cc4c7d1034 (patch)
tree01f3492981a29a7d828bd7246856dad03dbfd2ab /pkgs/applications/blockchains/polkadot
parent6321c75b5f90602133f7d84d997e433b69f410b1 (diff)
polkadot: fix commit hash fetch for version string
Diffstat (limited to 'pkgs/applications/blockchains/polkadot')
-rw-r--r--pkgs/applications/blockchains/polkadot/default.nix31
1 files changed, 29 insertions, 2 deletions
diff --git a/pkgs/applications/blockchains/polkadot/default.nix b/pkgs/applications/blockchains/polkadot/default.nix
index 122d59c8c0367..1210caaa25197 100644
--- a/pkgs/applications/blockchains/polkadot/default.nix
+++ b/pkgs/applications/blockchains/polkadot/default.nix
@@ -4,6 +4,7 @@
 , llvmPackages
 , protobuf
 , rustPlatform
+, writeShellScriptBin
 }:
 rustPlatform.buildRustPackage rec {
   pname = "polkadot";
@@ -13,12 +14,38 @@ rustPlatform.buildRustPackage rec {
     owner = "paritytech";
     repo = "polkadot";
     rev = "v${version}";
-    sha256 = "sha256-TgpQ+nRKkbyQcCwecnhgF70FI+rlDuTy7XHUNhvYy64=";
+    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-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";