From 680f5bfc0c1a0de4469a2b77c2caf16793decd2c Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Tue, 5 Jul 2022 17:54:40 +0200 Subject: [PATCH 1/7] bazel-watcher: 0.14.0 -> 0.16.2 --- pkgs/development/tools/bazel-watcher/default.nix | 13 +++++++++---- .../tools/bazel-watcher/use-go-in-path.patch | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index 5b0dd0349439..5ec39ffa4c75 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -1,4 +1,5 @@ { buildBazelPackage +, bazel_5 , fetchFromGitHub , git , go @@ -13,18 +14,19 @@ let in buildBazelPackage rec { pname = "bazel-watcher"; - version = "0.14.0"; + version = "0.16.2"; src = fetchFromGitHub { owner = "bazelbuild"; repo = "bazel-watcher"; rev = "v${version}"; - sha256 = "0gigl1lg8sb4bj5crvj54329ws4yirldbncs15f96db6vhp0ig7r"; + sha256 = "sha256-yRXta6pPhgIonTL0q9GSzNQg/jHMIeC7xvfVYrZMmnc="; }; nativeBuildInputs = [ go git python3 ]; removeRulesCC = false; + bazel = bazel_5; bazelTarget = "//ibazel"; fetchAttrs = { @@ -32,6 +34,8 @@ buildBazelPackage rec { preBuild = '' patchShebangs . + + echo ${bazel_5.version} > .bazelversion ''; preInstall = '' @@ -56,7 +60,7 @@ buildBazelPackage rec { sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker ''; - sha256 = "1j175z3d4fbi4pl35py7yjq7ywrvwin6id131jv32hx0ck4g1m46"; + sha256 = "sha256-vij20VMBlKTBOACjH+XP4Z15BOmXYvlmErkVgjOln3M="; }; buildAttrs = { @@ -66,10 +70,11 @@ buildBazelPackage rec { patchShebangs . substituteInPlace ibazel/BUILD --replace '{STABLE_GIT_VERSION}' ${version} + echo ${bazel_5.version} > .bazelversion ''; installPhase = '' - install -Dm755 bazel-bin/ibazel/*_pure_stripped/ibazel $out/bin/ibazel + install -Dm755 bazel-bin/ibazel/ibazel_/ibazel $out/bin/ibazel ''; }; diff --git a/pkgs/development/tools/bazel-watcher/use-go-in-path.patch b/pkgs/development/tools/bazel-watcher/use-go-in-path.patch index 010ba56165d9..d9d90c9127f0 100644 --- a/pkgs/development/tools/bazel-watcher/use-go-in-path.patch +++ b/pkgs/development/tools/bazel-watcher/use-go-in-path.patch @@ -6,7 +6,7 @@ index 51273b6..fcf9ffb 100644 go_rules_dependencies() --go_register_toolchains() +-go_register_toolchains(version = "1.17.6") +go_register_toolchains(go_version = "host") load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") From b38a131850c00c1cf2deafe36b5c1b91e03aac8b Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Tue, 5 Jul 2022 17:55:06 +0200 Subject: [PATCH 2/7] bazel-watcher: Fix build on darwin --- pkgs/development/tools/bazel-watcher/default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index 5ec39ffa4c75..86b19cd3170e 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -27,6 +27,7 @@ buildBazelPackage rec { removeRulesCC = false; bazel = bazel_5; + bazelBuildFlags = lib.optionals stdenv.cc.isClang [ "--cxxopt=-x" "--cxxopt=c++" "--host_cxxopt=-x" "--host_cxxopt=c++" ]; bazelTarget = "//ibazel"; fetchAttrs = { @@ -84,7 +85,5 @@ buildBazelPackage rec { license = licenses.asl20; maintainers = with maintainers; [ kalbasit ]; platforms = platforms.all; - # broken on darwin, see https://github.com/NixOS/nixpkgs/issues/105573 - broken = stdenv.isDarwin; }; } From 0917e349670cff11beb8748f76b27c4f695b7240 Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Tue, 5 Jul 2022 20:28:06 +0200 Subject: [PATCH 3/7] bazel_{3,4,5}: Use `arm64` as arch suffix on aarch64 The official bazel wrapper script uses `$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m)` as the `os-arch` suffix. On aarch64 Darwin, `uname -m` returns "arm64", on aarch64 Linux it returns "aarch64". --- .../tools/build-managers/bazel/bazel_3/default.nix | 4 +++- .../tools/build-managers/bazel/bazel_4/default.nix | 4 +++- .../tools/build-managers/bazel/bazel_5/default.nix | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix b/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix index 2cb085a4c01d..6544db85a7f3 100644 --- a/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix +++ b/pkgs/development/tools/build-managers/bazel/bazel_3/default.nix @@ -110,7 +110,9 @@ let # and libraries path. # We prefetch it, patch it, and override it in a global bazelrc. system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux"; - arch = stdenv.hostPlatform.parsed.cpu.name; + + # on aarch64 Darwin, `uname -m` returns "arm64" + arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name; remote_java_tools = stdenv.mkDerivation { name = "remote_java_tools_${system}"; diff --git a/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix b/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix index aa9794b5869c..511234a1e595 100644 --- a/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix +++ b/pkgs/development/tools/build-managers/bazel/bazel_4/default.nix @@ -135,7 +135,9 @@ let # and libraries path. # We prefetch it, patch it, and override it in a global bazelrc. system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux"; - arch = stdenv.hostPlatform.parsed.cpu.name; + + # on aarch64 Darwin, `uname -m` returns "arm64" + arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name; remote_java_tools = stdenv.mkDerivation { name = "remote_java_tools_${system}"; diff --git a/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix b/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix index 9e2685091ddd..0c06d6128317 100644 --- a/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix +++ b/pkgs/development/tools/build-managers/bazel/bazel_5/default.nix @@ -126,7 +126,9 @@ let platforms = lib.platforms.linux ++ lib.platforms.darwin; system = if stdenv.hostPlatform.isDarwin then "darwin" else "linux"; - arch = stdenv.hostPlatform.parsed.cpu.name; + + # on aarch64 Darwin, `uname -m` returns "arm64" + arch = with stdenv.hostPlatform; if isDarwin && isAarch64 then "arm64" else parsed.cpu.name; bazelRC = writeTextFile { name = "bazel-rc"; From b26c9b529065ab035a664ff6e1d31451ed691a6c Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Wed, 6 Jul 2022 08:57:04 +0200 Subject: [PATCH 4/7] bazel-watcher: Set `mainProgram` to "ibazel" --- pkgs/development/tools/bazel-watcher/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index 86b19cd3170e..cc1d2508491c 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -84,6 +84,7 @@ buildBazelPackage rec { description = "Tools for building Bazel targets when source files change"; license = licenses.asl20; maintainers = with maintainers; [ kalbasit ]; + mainProgram = "ibazel"; platforms = platforms.all; }; } From 8d97e13ef3edea3b2019eb08beeb0b8b9af348f9 Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Mon, 11 Jul 2022 00:03:24 +0200 Subject: [PATCH 5/7] bazel-watcher: Ensure to always build protoc from source --- .../tools/bazel-watcher/default.nix | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index cc1d2508491c..708de63b858e 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -11,6 +11,21 @@ let patches = [ ./use-go-in-path.patch ]; + + # Patch the protoc alias so that it always builds from source. + rulesProto = fetchFromGitHub { + owner = "bazelbuild"; + repo = "rules_proto"; + rev = "4.0.0-3.19.2"; + sha256 = "sha256-wdmp+Tmf63PPr7G4X5F7rDas45WEETU3eKb47PFVI6o="; + postFetch = '' + sed -i 's|name = "protoc"|name = "_protoc_original"|' $out/proto/private/BUILD.release + cat <>$out/proto/private/BUILD.release + alias(name = "protoc", actual = "@com_github_protocolbuffers_protobuf//:protoc", visibility = ["//visibility:public"]) + EOF + ''; + }; + in buildBazelPackage rec { pname = "bazel-watcher"; @@ -27,6 +42,7 @@ buildBazelPackage rec { removeRulesCC = false; bazel = bazel_5; + bazelFlags = [ "--override_repository=rules_proto=${rulesProto}" ]; bazelBuildFlags = lib.optionals stdenv.cc.isClang [ "--cxxopt=-x" "--cxxopt=c++" "--host_cxxopt=-x" "--host_cxxopt=c++" ]; bazelTarget = "//ibazel"; @@ -61,7 +77,7 @@ buildBazelPackage rec { sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker ''; - sha256 = "sha256-vij20VMBlKTBOACjH+XP4Z15BOmXYvlmErkVgjOln3M="; + sha256 = "sha256-Tkmq5/vrakWeIsnTQ9o0h2XhT/Ot+r6LRSCE5c6PSEk="; }; buildAttrs = { From e7d5889381bb5a9d9ffc24b7c772b34fad635efa Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Mon, 11 Jul 2022 16:26:10 +0200 Subject: [PATCH 6/7] bazel-watcher: Ensure fixed output hashes are system independent bazel-watcher uses different libraries depending on the system now which results in different fixed output hashes for the dependencies. That's why we set `fetchConfigured = false`. Also remove the `external/com_google_protobuf` deps output directory since it contained symlinks to files with different permissions on Linux and Darwin. --- pkgs/development/tools/bazel-watcher/default.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index 708de63b858e..1391debf4ef5 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -46,6 +46,7 @@ buildBazelPackage rec { bazelBuildFlags = lib.optionals stdenv.cc.isClang [ "--cxxopt=-x" "--cxxopt=c++" "--host_cxxopt=-x" "--host_cxxopt=c++" ]; bazelTarget = "//ibazel"; + fetchConfigured = false; # we want to fetch all dependencies, regardless of the current system fetchAttrs = { inherit patches; @@ -75,9 +76,12 @@ buildBazelPackage rec { # should be equivalent. rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker} sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker + + # remove com_google_protobuf because it had files with different permissions on linux and darwin + rm -rf $bazelOut/external/com_google_protobuf ''; - sha256 = "sha256-Tkmq5/vrakWeIsnTQ9o0h2XhT/Ot+r6LRSCE5c6PSEk="; + sha256 = "sha256-QjMsWTIHCy6Mbbphk5eK2wIiw900AvmyA0ZV9Be7nPI="; }; buildAttrs = { From c8f4d819fb055ab29629d81aabf8f7c804c7edd2 Mon Sep 17 00:00:00 2001 From: Claudio Bley Date: Fri, 29 Jul 2022 21:51:06 +0200 Subject: [PATCH 7/7] bazel-watcher: 0.16.2 -> 0.17.0 --- pkgs/development/tools/bazel-watcher/default.nix | 6 +++--- pkgs/top-level/all-packages.nix | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/pkgs/development/tools/bazel-watcher/default.nix b/pkgs/development/tools/bazel-watcher/default.nix index 1391debf4ef5..816326489d8c 100644 --- a/pkgs/development/tools/bazel-watcher/default.nix +++ b/pkgs/development/tools/bazel-watcher/default.nix @@ -29,13 +29,13 @@ let in buildBazelPackage rec { pname = "bazel-watcher"; - version = "0.16.2"; + version = "0.17.0"; src = fetchFromGitHub { owner = "bazelbuild"; repo = "bazel-watcher"; rev = "v${version}"; - sha256 = "sha256-yRXta6pPhgIonTL0q9GSzNQg/jHMIeC7xvfVYrZMmnc="; + sha256 = "sha256-aK18Q2nYxYajk9f/EEmtV7YJ8cYqbamR7vh3BTgu53Q="; }; nativeBuildInputs = [ go git python3 ]; @@ -81,7 +81,7 @@ buildBazelPackage rec { rm -rf $bazelOut/external/com_google_protobuf ''; - sha256 = "sha256-QjMsWTIHCy6Mbbphk5eK2wIiw900AvmyA0ZV9Be7nPI="; + sha256 = "sha256-R+Hc9ldYcKgAXETKr2+Hk7IrjJ93WkrjyJ1SQRoM9V4="; }; buildAttrs = { diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b9c4d651ba5f..ce94bb7392ea 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -15398,7 +15398,9 @@ with pkgs; bazel-remote = callPackage ../development/tools/build-managers/bazel/bazel-remote { }; - bazel-watcher = callPackage ../development/tools/bazel-watcher { }; + bazel-watcher = callPackage ../development/tools/bazel-watcher { + go = go_1_18; + }; bazel-gazelle = callPackage ../development/tools/bazel-gazelle { };