Skip to content
This repository was archived by the owner on Dec 29, 2025. It is now read-only.

Commit c461819

Browse files
committed
Use pre-built buildifier binaries when available
1 parent a79a103 commit c461819

File tree

9 files changed

+193
-30
lines changed

9 files changed

+193
-30
lines changed

.bazelversion

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
5.3.0
1+
6.5.0

README.md

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -185,18 +185,11 @@ This repository has rules for buildifier, black, and gofmt. It is also used for
185185
**WORKSPACE.bazel**
186186

187187
```bzl
188-
BUILDTOOLS_VERSION = "3.5.0"
188+
load("@rules_file//buildifier:workspace.bzl", "buildifier_repositories", "buildifier_toolchains")
189189

190-
http_archive(
191-
name = "com_github_bazelbuild_buildtools",
192-
sha256 = "f5b666935a827bc2b6e2ca86ea56c796d47f2821c2ff30452d270e51c2a49708",
193-
strip_prefix = "buildtools-%s" % BUILDTOOLS_VERSION,
194-
url = "https://github.com/bazelbuild/buildtools/archive/%s.zip" % BUILDTOOLS_VERSION,
195-
)
196-
197-
load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_dependencies")
190+
buildifier_repositories()
198191

199-
buildifier_dependencies()
192+
buildifier_toolchains()
200193

201194
files(
202195
name = "files"
@@ -205,20 +198,19 @@ files(
205198
)
206199
```
207200

201+
The `@rules_file//buildifier:toolchain_type` toolchain will download a
202+
pre-build executable of buildifier, if it exists. Otherwise, it will rely on the
203+
`@com_github_bazelbuild_buildtools` repo to build from source.
204+
208205
**BUILD.bazel**
209206

210207
```bzl
211-
load("@rules_file//buildifier:rules.bzl", "buildifier")
212208
load("@rules_file//generate:rules.bzl", "format", "generate_test")
213209

214-
buildifier(
215-
name = "buildifier",
216-
)
217-
218210
format(
219211
name = "buildifier_format",
220212
srcs = ["@files//:buildifier_files"],
221-
formatter = ":buildifier",
213+
formatter = "@rules_file//buildifier",
222214
strip_prefix = "files",
223215
)
224216

WORKSPACE.bazel

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,14 @@ http_archive(
8484
url = "https://github.com/rivethealth/rivet-bazel-util/archive/%s.tar.gz" % RIVET_BAZEL_UTIL_VERSION,
8585
)
8686

87+
# Buildifier
88+
89+
load("@rules_file//buildifier:workspace.bzl", "buildifier_repositories", "buildifier_toolchains")
90+
91+
buildifier_repositories()
92+
93+
buildifier_toolchains()
94+
8795
# Format
8896

8997
load("//file:workspace.bzl", "files")

buildifier/BUILD.bazel

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
load(":rules.bzl", "buildifier")
2+
3+
buildifier(
4+
name = "buildifier",
5+
visibility = ["//visibility:public"],
6+
)
7+
8+
toolchain_type(
9+
name = "toolchain_type",
10+
visibility = ["//visibility:public"],
11+
)
12+
13+
toolchain(
14+
name = "macos_arm64_toolchain",
15+
exec_compatible_with = [
16+
"@platforms//cpu:aarch64",
17+
"@platforms//os:macos",
18+
],
19+
target_compatible_with = [
20+
"@platforms//cpu:aarch64",
21+
"@platforms//os:macos",
22+
],
23+
toolchain = "//buildifier/default:darwin_arm64",
24+
toolchain_type = ":toolchain_type",
25+
)
26+
27+
toolchain(
28+
name = "macos_amd64_toolchain",
29+
exec_compatible_with = [
30+
"@platforms//cpu:x86_64",
31+
"@platforms//os:macos",
32+
],
33+
target_compatible_with = [
34+
"@platforms//cpu:x86_64",
35+
"@platforms//os:macos",
36+
],
37+
toolchain = "//buildifier/default:darwin_amd64",
38+
toolchain_type = ":toolchain_type",
39+
)
40+
41+
toolchain(
42+
name = "linux_arm64_toolchain",
43+
exec_compatible_with = [
44+
"@platforms//cpu:aarch64",
45+
"@platforms//os:linux",
46+
],
47+
target_compatible_with = [
48+
"@platforms//cpu:aarch64",
49+
"@platforms//os:linux",
50+
],
51+
toolchain = "//buildifier/default:linux_arm64",
52+
toolchain_type = ":toolchain_type",
53+
)
54+
55+
toolchain(
56+
name = "linux_amd64_toolchain",
57+
exec_compatible_with = [
58+
"@platforms//cpu:x86_64",
59+
"@platforms//os:linux",
60+
],
61+
target_compatible_with = [
62+
"@platforms//cpu:x86_64",
63+
"@platforms//os:linux",
64+
],
65+
toolchain = "//buildifier/default:linux_amd64",
66+
toolchain_type = ":toolchain_type",
67+
)
68+
69+
toolchain(
70+
name = "windows_amd64_toolchain",
71+
exec_compatible_with = [
72+
"@platforms//cpu:x86_64",
73+
"@platforms//os:windows",
74+
],
75+
target_compatible_with = [
76+
"@platforms//cpu:x86_64",
77+
"@platforms//os:windows",
78+
],
79+
toolchain = "//buildifier/default:windows_amd64",
80+
toolchain_type = ":toolchain_type",
81+
)
82+
83+
toolchain(
84+
name = "src_toolchain",
85+
toolchain = "//buildifier/default:src",
86+
toolchain_type = ":toolchain_type",
87+
)

buildifier/buildifier.bzl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
BUILDIFIER_REPO_NAMES = [
2+
"darwin_amd64",
3+
"darwin_arm64",
4+
"linux_amd64",
5+
"linux_arm64",
6+
"windows_amd64",
7+
]
8+
9+
BUILDIFIER_REPOS = {
10+
"v6.4.0": {
11+
"darwin_amd64": struct(
12+
path = "buildifier-darwin-amd64",
13+
sha256 = "eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed",
14+
),
15+
"darwin_arm64": struct(
16+
path = "buildifier-darwin-arm64",
17+
sha256 = "fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05",
18+
),
19+
"linux_amd64": struct(
20+
path = "buildifier-linux-amd64",
21+
sha256 = "be63db12899f48600bad94051123b1fd7b5251e7661b9168582ce52396132e92",
22+
),
23+
"linux_arm64": struct(
24+
path = "buildifier-linux-arm64",
25+
sha256 = "18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd",
26+
),
27+
"windows_amd64": struct(
28+
path = "buildifier-windows-amd64.exe",
29+
sha256 = "da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c",
30+
),
31+
},
32+
}

buildifier/default/BUILD.bazel

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
load("//buildifier:buildifier.bzl", "BUILDIFIER_REPO_NAMES")
2+
load("//buildifier:rules.bzl", "buildifier_toolchain")
3+
4+
[
5+
buildifier_toolchain(
6+
name = name,
7+
buildifier = "@buildifier_%s//file" % name,
8+
visibility = ["//visibility:public"],
9+
)
10+
for name in BUILDIFIER_REPO_NAMES
11+
]
12+
13+
buildifier_toolchain(
14+
name = "src",
15+
buildifier = "@com_github_bazelbuild_buildtools//buildifier",
16+
visibility = ["//visibility:public"],
17+
)

buildifier/rules.bzl

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ def _buildifier_format(ctx, path, src, out, bin):
1010
)
1111

1212
def _buildifier_impl(ctx):
13-
bin = ctx.attr.bin[DefaultInfo]
13+
buildifier = ctx.toolchains[":toolchain_type"]
14+
15+
bin = buildifier.buildifier
1416

1517
def format(ctx, path, src, out):
1618
_buildifier_format(ctx, path, src, out, bin.files_to_run)
@@ -25,12 +27,21 @@ def _buildifier_impl(ctx):
2527

2628
buildifier = rule(
2729
implementation = _buildifier_impl,
30+
toolchains = [":toolchain_type"],
31+
)
32+
33+
def _buildifier_toolchain_impl(ctx):
34+
buildifier_default = ctx.attr.buildifier[DefaultInfo]
35+
36+
toolchain_info = platform_common.ToolchainInfo(
37+
buildifier = buildifier_default,
38+
)
39+
40+
return [toolchain_info]
41+
42+
buildifier_toolchain = rule(
43+
implementation = _buildifier_toolchain_impl,
2844
attrs = {
29-
"bin": attr.label(
30-
cfg = "exec",
31-
default = "@com_github_bazelbuild_buildtools//buildifier",
32-
doc = "Buildifier",
33-
executable = True,
34-
),
45+
"buildifier": attr.label(cfg = "target", executable = True, mandatory = True),
3546
},
3647
)

buildifier/workspace.bzl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_file")
2+
load(":buildifier.bzl", "BUILDIFIER_REPOS")
3+
4+
def buildifier_repositories(version = "v6.4.0"):
5+
for name, info in BUILDIFIER_REPOS[version].items():
6+
http_file(
7+
name = "buildifier_%s" % name,
8+
executable = True,
9+
sha256 = info.sha256,
10+
url = "https://github.com/bazelbuild/buildtools/releases/download/%s/%s" % (version, info.path),
11+
)
12+
13+
def buildifier_toolchains():
14+
native.register_toolchains(
15+
"@rules_file//buildifier:macos_amd64_toolchain",
16+
"@rules_file//buildifier:macos_arm64_toolchain",
17+
"@rules_file//buildifier:linux_amd64_toolchain",
18+
"@rules_file//buildifier:linux_arm64_toolchain",
19+
"@rules_file//buildifier:windows_amd64_toolchain",
20+
"@rules_file//buildifier:src_toolchain",
21+
)

tools/BUILD.bazel

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
load("//buildifier:rules.bzl", "buildifier")
21
load("//file:rules.bzl", "bazelrc_deleted_packages", "find_packages")
32
load("//generate:rules.bzl", "format", "generate", "generate_test", "multi_generate")
43
load("//black:rules.bzl", "configure_black")
@@ -15,10 +14,6 @@ format(
1514
strip_prefix = "/files",
1615
)
1716

18-
buildifier(
19-
name = "buildifier",
20-
)
21-
2217
multi_generate(
2318
name = "format",
2419
deps = [
@@ -35,7 +30,7 @@ generate_test(
3530
format(
3631
name = "buildifier_format",
3732
srcs = ["@files//:buildifier_files"],
38-
formatter = ":buildifier",
33+
formatter = "//buildifier",
3934
strip_prefix = "/files",
4035
)
4136

0 commit comments

Comments
 (0)