From cf4e6208c1e7c7ea535c4d33860bf7cc4c7d1034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Silva?= Date: Fri, 11 Feb 2022 15:47:20 +0000 Subject: [PATCH] polkadot: fix commit hash fetch for version string --- .../blockchains/polkadot/default.nix | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/blockchains/polkadot/default.nix b/pkgs/applications/blockchains/polkadot/default.nix index 122d59c8c036..1210caaa2519 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";