build-bazel-package: switch hash mode to “flat”

flat hashes can be substituted through hashed-mirrors, while recursive
hashes can’t. This is especially important for Bazel since the bazel
fetch dependencies can come from multiple different methods (git,
http, ftp, etc.). To do this, we create tar archives from the
output/external directory, which is then extracted to build. All of
the Bazel hashes are all updated.
This commit is contained in:
Matthew Bauer 2020-05-08 20:48:30 -05:00
parent 1771d468c4
commit 2a8d05627b
8 changed files with 16 additions and 16 deletions

View File

@ -76,7 +76,7 @@ in buildBazelPackage rec {
rm -f "$bazelOut"/java.log "$bazelOut"/java.log.* rm -f "$bazelOut"/java.log "$bazelOut"/java.log.*
''; '';
sha256 = "1bn7nhv5pag8fdm8l8nvgg3fzvhpy2yv9yl2slrb16lckxzha3v6"; sha256 = "0r11kbyp1ambgcj35gvjjmxrsrdg7b9jb9sq3kih4lik7zyljp25";
}; };
buildAttrs = { buildAttrs = {

View File

@ -42,7 +42,7 @@ in stdenv.mkDerivation (fBuildAttrs // {
inherit name bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget; inherit name bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget;
deps = stdenv.mkDerivation (fFetchAttrs // { deps = stdenv.mkDerivation (fFetchAttrs // {
name = "${name}-deps"; name = "${name}-deps.tar.gz";
inherit bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget; inherit bazelFlags bazelBuildFlags bazelFetchFlags bazelTarget;
nativeBuildInputs = fFetchAttrs.nativeBuildInputs or [] ++ [ bazel ]; nativeBuildInputs = fFetchAttrs.nativeBuildInputs or [] ++ [ bazel ];
@ -120,9 +120,9 @@ in stdenv.mkDerivation (fBuildAttrs // {
ln -sf "$new_target" "$symlink" ln -sf "$new_target" "$symlink"
done done
cp -r $bazelOut/external $out echo '${bazel.name}' > $bazelOut/external/.nix-bazel-version
echo '${bazel.name}' > $out/.nix-bazel-version (cd $bazelOut/ && tar czf $out --sort=name --mtime='@1' --owner=0 --group=0 --numeric-owner external/)
runHook postInstall runHook postInstall
''; '';
@ -130,7 +130,6 @@ in stdenv.mkDerivation (fBuildAttrs // {
dontFixup = true; dontFixup = true;
allowedRequisites = []; allowedRequisites = [];
outputHashMode = "recursive";
outputHashAlgo = "sha256"; outputHashAlgo = "sha256";
outputHash = fetchAttrs.sha256; outputHash = fetchAttrs.sha256;
}); });
@ -146,14 +145,15 @@ in stdenv.mkDerivation (fBuildAttrs // {
preConfigure = '' preConfigure = ''
mkdir -p "$bazelOut" mkdir -p "$bazelOut"
test "${bazel.name}" = "$(<$deps/.nix-bazel-version)" || { (cd $bazelOut && tar xfz $deps)
test "${bazel.name}" = "$(<$bazelOut/external/.nix-bazel-version)" || {
echo "fixed output derivation was built for a different bazel version" >&2 echo "fixed output derivation was built for a different bazel version" >&2
echo " got: $(<$deps/.nix-bazel-version)" >&2 echo " got: $(<$bazelOut/external/.nix-bazel-version)" >&2
echo "expected: ${bazel.name}" >&2 echo "expected: ${bazel.name}" >&2
exit 1 exit 1
} }
cp -r $deps $bazelOut/external
chmod -R +w $bazelOut chmod -R +w $bazelOut
find $bazelOut -type l | while read symlink; do find $bazelOut -type l | while read symlink; do
ln -sf $(readlink "$symlink" | sed "s,NIX_BUILD_TOP,$NIX_BUILD_TOP,") "$symlink" ln -sf $(readlink "$symlink" | sed "s,NIX_BUILD_TOP,$NIX_BUILD_TOP,") "$symlink"

View File

@ -36,7 +36,7 @@ let
bazelTarget = ":install"; bazelTarget = ":install";
fetchAttrs = { fetchAttrs = {
sha256 = "0wb2gh9ji8bgq4s9ci9x017dybxqzjhncpw33b1wjksm2yhbkvlz"; sha256 = "0jlgmwcanfkhkwvh4vxibpi0zyyl6xkjzcz2xqn7raympqscq81a";
}; };
bazelFlags = [ bazelFlags = [

View File

@ -61,7 +61,7 @@ let
bazelTarget = ":pip_pkg"; bazelTarget = ":pip_pkg";
fetchAttrs = { fetchAttrs = {
sha256 = "0135nxxvkmjzpd80r1g9fdkk9h62g0xlvp32g5zgk0hkma5kq0bx"; sha256 = "0nmk7sbgl1ag20333v9r7l5cka6wapbskikfhi3y5a8l9f6hxkl3";
}; };
buildAttrs = { buildAttrs = {

View File

@ -300,9 +300,9 @@ let
# cudaSupport causes fetch of ncclArchive, resulting in different hashes # cudaSupport causes fetch of ncclArchive, resulting in different hashes
sha256 = if cudaSupport then sha256 = if cudaSupport then
"1qygfcvvn9vysap9nk6xccxi9mgmzyxiywz6k456f811l1v70p2c" "09j57w6kc0vkfcdwr0qggy3qgrgq82kfa2jrwvvcnij4bl3wj40j"
else else
"0kfjanw0mfbh30vi1ms2xlg8yp429cbyfriik6yxd5cla2pncg2j"; "14g8z49qz7d8n1c2mcsfhr7yqpcy7mhmpm6hgmqvpgb8vm7yvwrc";
}; };
buildAttrs = { buildAttrs = {

View File

@ -294,9 +294,9 @@ let
# cudaSupport causes fetch of ncclArchive, resulting in different hashes # cudaSupport causes fetch of ncclArchive, resulting in different hashes
sha256 = if cudaSupport then sha256 = if cudaSupport then
"0hg3ysy644950a34j28hrb317cz8gcbb9n84d36wdailvnlshghb" "1kqk1gx5g63kb2zdj392x6mnpbrmgqghrdv597aipn7s23xzj8pd"
else else
"1gy4pz9kn30wb9c4a9584fibb88c3h38y3dqa99yw1lbsbyyi28c"; "1plpcm2ydpajsrxdvmmpfy7l0gfdir78hap72w4k7ddm6d3rm2fv";
}; };
buildAttrs = { buildAttrs = {

View File

@ -60,7 +60,7 @@ buildBazelPackage rec {
sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
''; '';
sha256 = "0wj573dcirssr2cmq90b4yl57mv3gsxaj1s26afvkz1dvyxmq7sz"; sha256 = "0ili0123xcl0mjcrn4r1r1q9d7a8a3bbh9r3zhlshl39awfm4r2d";
}; };
buildAttrs = { buildAttrs = {

View File

@ -64,7 +64,7 @@ buildBazelPackage rec {
sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
''; '';
sha256 = "141kw2zpr612xdcrg6x9kslg4d5b3fbpzx0vgp3lqwdihfj3sc1l"; sha256 = "1hzb84zxav68ysdwkimaaz0b9rq95k3bgifw01m644v7idabrz50";
}; };
buildAttrs = { buildAttrs = {