From 5b6e2b440711637e26add4e6575f9742f9c88aa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Desgroppes?= Date: Fri, 26 Sep 2025 12:07:41 +0200 Subject: [PATCH] Compose `buildifier` from upstream and `multitool` Currently, `buildifier` targets don't work out of the box on Windows - credits to Ofek for reporting. Sadly, it turns out that two separate attempts have already been made to remedy this: 1. In the upstream `bazelbuild/buildtools` (`go` source, but `workspace` suitable): https://github.com/bazelbuild/buildtools/pull/1230 (merged) 2. `keith/buildifier-prebuilt` (`bzlmod` suitable, providing slightly outdated `go` binaries published by `bazelbuild/buildtools`): https://github.com/keith/buildifier-prebuilt/pull/89 (well tested, but pending CI feedback... for months!) Inspired by Tony's [tips](https://datadoghq.atlassian.net/browse/ABLD-174?focusedCommentId=2644283), the present change proposes the "least intrusive" change so that: - we don't need to start a third effort (rules, `.bash` and `.bat` scripts), - we benefit from the validated and merged upstream behavior, - we don't depend on the goodwill of `keith/buildifier-prebuilt` to publish the version `8.2.1` of the binaries (nor subsequent versions), - we don't have to manage a complex patch, but instead simply inhibit the upstream lines that we do not need, given `buildifier` implementations are provided by `multitool` again. In short, this change combines the best of both worlds through a simple indirection made possible by the configurability of upstream rules which, unlike `keith/buildifier-prebuilt`, allow us to define which implementation of `buildifier` to use. --- MODULE.bazel | 11 ++- MODULE.bazel.lock | 142 ++++++++++++++++++++++++++++++++- bazel/buildifier/BUILD.bazel | 4 +- bazel/patches/buildifier.patch | 17 ++++ bazel/prebuilt_buildtools.json | 55 +++++++++++++ 5 files changed, 225 insertions(+), 4 deletions(-) create mode 100644 bazel/patches/buildifier.patch diff --git a/MODULE.bazel b/MODULE.bazel index c4c4aab4b95c8e..1f0732eb06772b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -11,7 +11,16 @@ bazel_dep(name = "rules_pkg", version = "1.1.0") ## Prebuilt binaries ## ######################### -bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2", dev_dependency = True) +http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "com_github_bazelbuild_buildtools", + patch_strip = 1, + patches = ["//bazel/patches:buildifier.patch"], + sha256 = "53119397bbce1cd7e4c590e117dcda343c2086199de62932106c80733526c261", + strip_prefix = "buildtools-8.2.1", + urls = ["https://github.com/bazelbuild/buildtools/archive/refs/tags/v8.2.1.tar.gz"], +) bazel_dep(name = "rules_multitool", version = "1.9.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 8b9e4bb4df6e00..28b84d6819c633 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -43,8 +43,7 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6", "https://bcr.bazel.build/modules/bazel_skylib/1.8.1/source.json": "7ebaefba0b03efe59cac88ed5bbc67bcf59a3eff33af937345ede2a38b2d368a", "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/MODULE.bazel": "537faf0ad9f5892910074b8e43b4c91c96f1d5d86b6ed04bdbe40cf68aa48b68", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.2.0.2/MODULE.bazel": "a9b689711d5b69f9db741649b218c119b9fdf82924ba390415037e09798edd03", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.2.0.2/source.json": "51eb0a4b38aaaeab7fa64361576d616c4d8bfd0f17a0a10184aeab7084d79f8e", + "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/source.json": "55153a5e6ca9c8a7e266c4b46b951e8a010d25ec6062bc35d5d4f89925796bad", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", @@ -187,6 +186,145 @@ }, "selectedYankedVersions": {}, "moduleExtensions": { + "@@buildifier_prebuilt+//:defs.bzl%buildifier_prebuilt_deps_extension": { + "general": { + "bzlTransitiveDigest": "u4exIm/Ie7MnBJpWnXNoPRCqYpyYnW2ns2kmg+V/3To=", + "usagesDigest": "eWMDBEn8E8CrwAPXrlrjIap2pseSMhxDyDdrntHBOOE=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "buildifier_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71" + } + }, + "buildifier_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813" + } + }, + "buildifier_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-amd64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009" + } + }, + "buildifier_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c" + } + }, + "buildifier_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-windows-amd64.exe" + ], + "downloaded_file_path": "buildifier.exe", + "executable": true, + "sha256": "370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8" + } + }, + "buildozer_darwin_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2" + } + }, + "buildozer_darwin_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364" + } + }, + "buildozer_linux_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4" + } + }, + "buildozer_linux_arm64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-arm64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328" + } + }, + "buildozer_windows_amd64": { + "repoRuleId": "@@bazel_tools//tools/build_defs/repo:http.bzl%http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-windows-amd64.exe" + ], + "downloaded_file_path": "buildozer.exe", + "executable": true, + "sha256": "58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf" + } + }, + "buildifier_prebuilt_toolchains": { + "repoRuleId": "@@buildifier_prebuilt+//:defs.bzl%_buildifier_toolchain_setup", + "attributes": { + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf\",\"version\":\"v7.3.1\"}]" + } + } + }, + "recordedRepoMappingEntries": [ + [ + "buildifier_prebuilt+", + "bazel_skylib", + "bazel_skylib+" + ], + [ + "buildifier_prebuilt+", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@pybind11_bazel+//:python_configure.bzl%extension": { "general": { "bzlTransitiveDigest": "OMjJ8aOAn337bDg7jdyvF/juIrC2PpUcX6Dnf+nhcF0=", diff --git a/bazel/buildifier/BUILD.bazel b/bazel/buildifier/BUILD.bazel index 7377d86cadd748..63f266f0ee4e41 100644 --- a/bazel/buildifier/BUILD.bazel +++ b/bazel/buildifier/BUILD.bazel @@ -1,4 +1,4 @@ -load("@buildifier_prebuilt//:rules.bzl", "buildifier", "buildifier_test") +load("@com_github_bazelbuild_buildtools//buildifier:def.bzl", "buildifier", "buildifier_test") exclude_patterns = [ "./.bazelbsp/**", @@ -7,6 +7,7 @@ exclude_patterns = [ buildifier( name = "buildifier", + buildifier = "@multitool//tools/buildifier", exclude_patterns = exclude_patterns, lint_mode = "fix", mode = "fix", @@ -19,6 +20,7 @@ buildifier( # - requires additional arguments: `no_sandbox` and `workspace` buildifier_test( name = "test", + buildifier = "@multitool//tools/buildifier", exclude_patterns = exclude_patterns, lint_mode = "warn", lint_warnings = ["-module-docstring"], diff --git a/bazel/patches/buildifier.patch b/bazel/patches/buildifier.patch new file mode 100644 index 00000000000000..ca70d3f1c3bf60 --- /dev/null +++ b/bazel/patches/buildifier.patch @@ -0,0 +1,17 @@ +diff --git a/buildifier/BUILD.bazel b/buildifier/BUILD.bazel +index 1f1cd67..2f2a5b1 100644 +--- a/buildifier/BUILD.bazel ++++ b/buildifier/BUILD.bazel +@@ -1,3 +1,4 @@ ++INHIBITED_IN_FAVOR_OF_PREBUILT = """ + load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library") + load("@rules_shell//shell:sh_test.bzl", "sh_test") + +@@ -108,6 +109,7 @@ go_library( + "//wspace", + ], + ) ++""" + + exports_files( + [ diff --git a/bazel/prebuilt_buildtools.json b/bazel/prebuilt_buildtools.json index 2ad0f60dff4d60..cc86c6e51cdbb8 100644 --- a/bazel/prebuilt_buildtools.json +++ b/bazel/prebuilt_buildtools.json @@ -1,4 +1,59 @@ { + "buildifier": { + "version": "v8.2.1", + "binaries": [ + { + "kind": "file", + "url": "https://github.com/bazelbuild/buildtools/releases/download/v8.2.1/buildifier-darwin-amd64", + "sha256": "9f8cffceb82f4e6722a32a021cbc9a5344b386b77b9f79ee095c61d087aaea06", + "os": "macos", + "cpu": "x86_64", + "size": 7776816, + "published_at": "2025-06-10T13:25:35Z", + "asset_url": "https://api.github.com/repos/bazelbuild/buildtools/releases/assets/262636654" + }, + { + "kind": "file", + "url": "https://github.com/bazelbuild/buildtools/releases/download/v8.2.1/buildifier-darwin-arm64", + "sha256": "cfab310ae22379e69a3b1810b433c4cd2fc2c8f4a324586dfe4cc199943b8d5a", + "os": "macos", + "cpu": "arm64", + "size": 7717890, + "published_at": "2025-06-10T13:25:35Z", + "asset_url": "https://api.github.com/repos/bazelbuild/buildtools/releases/assets/262636658" + }, + { + "kind": "file", + "url": "https://github.com/bazelbuild/buildtools/releases/download/v8.2.1/buildifier-linux-amd64", + "sha256": "6ceb7b0ab7cf66fceccc56a027d21d9cc557a7f34af37d2101edb56b92fcfa1a", + "os": "linux", + "cpu": "x86_64", + "size": 7882884, + "published_at": "2025-06-10T13:25:35Z", + "asset_url": "https://api.github.com/repos/bazelbuild/buildtools/releases/assets/262636637" + }, + { + "kind": "file", + "url": "https://github.com/bazelbuild/buildtools/releases/download/v8.2.1/buildifier-linux-arm64", + "sha256": "3baa1cf7eb41d51f462fdd1fff3a6a4d81d757275d05b2dd5f48671284e9a1a5", + "os": "linux", + "cpu": "arm64", + "size": 7755744, + "published_at": "2025-06-10T13:25:35Z", + "asset_url": "https://api.github.com/repos/bazelbuild/buildtools/releases/assets/262636641" + }, + { + "kind": "file", + "url": "https://github.com/bazelbuild/buildtools/releases/download/v8.2.1/buildifier-windows-amd64.exe", + "sha256": "802104da0bcda0424a397ac5be0004c372665a70289a6d5146e652ee497c0dc6", + "os": "windows", + "cpu": "x86_64", + "size": 8020480, + "published_at": "2025-06-10T13:25:35Z", + "asset_url": "https://api.github.com/repos/bazelbuild/buildtools/releases/assets/262636662" + } + ] + }, "buildozer": { "version": "v8.2.1", "binaries": [