Skip to content

Commit b6569fd

Browse files
committed
Modernize for Bzlmod / Bazel 8.0 / modern kubebuilder
- Make compatible with Bzlmod - WORKSPACE is unsupported in Bazel 9. - Add support for arm64.
1 parent 6be1418 commit b6569fd

28 files changed

+1136
-283
lines changed

BUILD.bazel

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,15 @@
1-
load("@rules_pkg//:pkg.bzl", "pkg_tar")
21
load("@rules_kubebuilder//kubebuilder:def.bzl", "kubebuilder")
2+
load("@rules_pkg//:pkg.bzl", "pkg_tar")
33

44
pkg_tar(
55
name = "release",
66
srcs = glob([
77
"*.bazel",
8-
"*.bzl",
98
]) + [
109
"WORKSPACE",
1110
],
1211
extension = "tar.gz",
1312
package_dir = "rules_kubebuilder",
14-
deps = [
15-
"//controller-gen:release",
16-
"//kubebuilder:release",
17-
"//kustomize:release",
18-
],
1913
)
2014

2115
# This is just an example of how to run kubebuilder via bazel

MODULE.bazel

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
###############################################################################
2+
# Bazel now uses Bzlmod by default to manage external dependencies.
3+
# Please consider migrating your external dependencies from WORKSPACE to MODULE.bazel.
4+
#
5+
# For more details, please check https://github.com/bazelbuild/bazel/issues/18958
6+
###############################################################################
7+
8+
module(
9+
name = "rules_kubebuilder",
10+
version = "0.1.0",
11+
)
12+
13+
# Keep consistent with https://github.com/openai/openai/blob/master/MODULE.bazel
14+
bazel_dep(name = "platforms", version = "1.0.0")
15+
bazel_dep(name = "rules_go", version = "0.55.1")
16+
bazel_dep(name = "rules_pkg", version = "1.0.1")
17+
18+
# Create controller-gen and kustomize repos via local extensions so that
19+
# this module can reference them from its packages (toolchains).
20+
cg = use_extension("@rules_kubebuilder//controller-gen:extensions.bzl", "cg_ext")
21+
cg.controller_gen(
22+
arches = [
23+
"amd64",
24+
"arm64",
25+
],
26+
version = "0.17.1",
27+
) # create controller_gen_<os>_<arch>
28+
use_repo(
29+
cg,
30+
"controller_gen_darwin_amd64",
31+
"controller_gen_darwin_arm64",
32+
"controller_gen_linux_amd64",
33+
"controller_gen_linux_arm64",
34+
)
35+
36+
kz = use_extension("@rules_kubebuilder//kustomize:extensions.bzl", "kz_ext")
37+
kz.kustomize(
38+
arches = [
39+
"amd64",
40+
"arm64",
41+
],
42+
version = "5.7.1",
43+
) # create kustomize_<os>_<arch>
44+
use_repo(
45+
kz,
46+
"kustomize_darwin_amd64",
47+
"kustomize_darwin_arm64",
48+
"kustomize_linux_amd64",
49+
"kustomize_linux_arm64",
50+
)

MODULE.bazel.lock

Lines changed: 156 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,72 @@ load("@rules_kubebuilder//kubebuilder:sdk.bzl", "kubebuilder_register_sdk")
1818
kubebuilder_register_sdk(version = "2.3.1")
1919

2020
load("@rules_kubebuilder//controller-gen:deps.bzl", "controller_gen_register_toolchain")
21+
load("@rules_kubebuilder//kustomize:deps.bzl", "kustomize_register_toolchain")
2122

22-
controller_gen_register_toolchain()
23+
# Downloads binaries from GitHub for linux/darwin and amd64/arm64 by default,
24+
# and registers the matching toolchains.
25+
controller_gen_register_toolchain(version = "0.17.1", arches = ["amd64", "arm64"]) # controller-gen
26+
kustomize_register_toolchain(version = "5.7.1", arches = ["amd64", "arm64"]) # kustomize
27+
```
2328

24-
load("@rules_kubebuilder//kustomize:deps.bzl", "kustomize_register_toolchain")
29+
## Using with Bzlmod (MODULE.bazel)
30+
31+
With Bzlmod, repository creation and toolchain registration must be separated:
32+
33+
- Module extensions may create external repositories but may not call `register_toolchains()`.
34+
- Toolchains must be registered in the root `MODULE.bazel` via the `register_toolchains(...)` directive.
35+
36+
This repo provides module extensions to download the Kubebuilder SDK, controller-gen, and kustomize. Register the toolchains directly using labels from this repo.
37+
38+
Example `MODULE.bazel` snippet:
39+
40+
```starlark
41+
module(name = "your_module")
42+
43+
bazel_dep(name = "rules_kubebuilder", version = "0.1.0")
44+
45+
# Create the SDK repo(s) via the module extension
46+
kb = use_extension("@rules_kubebuilder//kubebuilder:extensions.bzl", "kb_ext")
47+
kb.kubebuilder_sdk(name = "kubebuilder_sdk_4_7_1", version = "4.7.1")
48+
use_repo(kb, "kubebuilder_sdk_4_7_1")
49+
50+
# Download controller-gen binaries for both arches
51+
cg = use_extension("@rules_kubebuilder//controller-gen:extensions.bzl", "cg_ext")
52+
cg.controller_gen(version = "0.17.1", arches = ["amd64", "arm64"]) # creates repos named controller_gen_<os>_<arch>
53+
use_repo(cg,
54+
"controller_gen_linux_amd64",
55+
"controller_gen_linux_arm64",
56+
"controller_gen_darwin_amd64",
57+
"controller_gen_darwin_arm64",
58+
)
59+
60+
# Download kustomize binaries for both arches
61+
kz = use_extension("@rules_kubebuilder//kustomize:extensions.bzl", "kz_ext")
62+
kz.kustomize(version = "5.7.1", arches = ["amd64", "arm64"]) # creates repos named kustomize_<os>_<arch>
63+
use_repo(kz,
64+
"kustomize_linux_amd64",
65+
"kustomize_linux_arm64",
66+
"kustomize_darwin_amd64",
67+
"kustomize_darwin_arm64",
68+
)
2569

26-
kustomize_register_toolchain()
70+
# Register toolchains at the root (don’t do this from an extension)
71+
register_toolchains(
72+
# controller-gen
73+
"@rules_kubebuilder//controller-gen:controller_gen_linux_amd64_toolchain",
74+
"@rules_kubebuilder//controller-gen:controller_gen_linux_arm64_toolchain",
75+
"@rules_kubebuilder//controller-gen:controller_gen_darwin_amd64_toolchain",
76+
"@rules_kubebuilder//controller-gen:controller_gen_darwin_arm64_toolchain",
77+
# kustomize
78+
"@rules_kubebuilder//kustomize:kustomize_linux_amd64_toolchain",
79+
"@rules_kubebuilder//kustomize:kustomize_linux_arm64_toolchain",
80+
"@rules_kubebuilder//kustomize:kustomize_darwin_amd64_toolchain",
81+
"@rules_kubebuilder//kustomize:kustomize_darwin_arm64_toolchain",
82+
)
2783
```
2884

85+
Note: The macros in `controller-gen/deps.bzl` and `kustomize/deps.bzl` call `native.register_toolchains(...)` and are intended for WORKSPACE-based setups. Do not call these macros from a module extension.
86+
2987
And in your `go_test()` files, add `etcd` as a data dependency like this:
3088

3189
```starlark
@@ -64,7 +122,7 @@ bazel run //:kubebuilder -- --help
64122
In order to use `controller-gen` you will need to do something like the following in your `api/v1alpha1` directory (essentially where the `*_type.go` files are):
65123

66124
```starlark
67-
load("@io_bazel_rules_go//go:def.bzl", "go_library")
125+
load("@rules_go//go:def.bzl", "go_library")
68126
load(
69127
"@rules_kubebuilder//controller-gen:controller-gen.bzl",
70128
"controller_gen_crd",
@@ -121,14 +179,7 @@ controller_gen_crd(
121179

122180
## Developers
123181

124-
The toolchain that describes `controller-gen` needs to be built and the binaries committed so that
125-
they can be used. Fortunately Go supports cross compiling so in order to build the controller, you'll
126-
need to get and install Go either from [their download page](https://golang.org/doc/install) or from
127-
homebrew by running
128-
129-
```shell
130-
brew install golang
131-
```
132-
133-
After that you can run the script in `scripts/build-controller-gen.sh` which will compile `controller-gen`
134-
for both Linux and macOS.
182+
Previously this repo committed prebuilt binaries for controller-gen and kustomize.
183+
This has been replaced with repository rules that download the official release
184+
artifacts from GitHub at fetch time. No binaries are stored in Git, and arm64
185+
is supported alongside amd64.

WORKSPACE

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,15 @@ load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")
2222
rules_pkg_dependencies()
2323

2424
http_archive(
25-
name = "io_bazel_rules_go",
25+
name = "rules_go",
2626
sha256 = "b4433651f57560237681cb9caa969106aba614f5b1e66fefa5834c42b8013b42",
2727
urls = [
2828
"https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.24.6/rules_go-v0.24.6.tar.gz",
2929
"https://github.com/bazelbuild/rules_go/releases/download/v0.24.6/rules_go-v0.24.6.tar.gz",
3030
],
3131
)
3232

33-
load("@io_bazel_rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
33+
load("@rules_go//go:deps.bzl", "go_register_toolchains", "go_rules_dependencies")
3434

3535
go_rules_dependencies()
3636

controller-gen/BUILD.bazel

Lines changed: 45 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,4 @@
11
load("@rules_kubebuilder//controller-gen:controller-gen-toolchain.bzl", "controller_gen_toolchain")
2-
load("@rules_pkg//:pkg.bzl", "pkg_tar")
3-
4-
exports_files(
5-
[
6-
"bin/controller-gen.linux",
7-
"bin/controller-gen.darwin",
8-
],
9-
visibility = ["//visibility:public"],
10-
)
112

123
filegroup(
134
name = "srcs",
@@ -18,53 +9,75 @@ filegroup(
189
visibility = ["//visibility:public"],
1910
)
2011

21-
pkg_tar(
22-
name = "release-bin",
23-
srcs = glob(["bin/*"]),
24-
package_dir = "/bin",
12+
toolchain_type(name = "toolchain")
13+
14+
# Toolchains reference externally fetched binaries. See deps.bzl and
15+
# extensions.bzl for repository creation macros.
16+
17+
# Linux x86_64
18+
controller_gen_toolchain(
19+
name = "controller_gen_linux_amd64",
20+
controller_gen_bin = "@controller_gen_linux_amd64//:controller-gen",
2521
)
2622

27-
pkg_tar(
28-
name = "release",
29-
srcs = [
30-
"BUILD.bazel",
31-
":srcs",
23+
toolchain(
24+
name = "controller_gen_linux_amd64_toolchain",
25+
exec_compatible_with = [
26+
"@platforms//os:linux",
27+
"@platforms//cpu:x86_64",
3228
],
33-
package_dir = "controller-gen",
29+
toolchain = ":controller_gen_linux_amd64",
30+
toolchain_type = ":toolchain",
3431
visibility = ["//visibility:public"],
35-
deps = [":release-bin"],
3632
)
3733

38-
toolchain_type(name = "toolchain")
39-
34+
# Linux arm64
4035
controller_gen_toolchain(
41-
name = "controller_gen_linux",
42-
controller_gen_bin = "@rules_kubebuilder//controller-gen:bin/controller-gen.linux",
36+
name = "controller_gen_linux_arm64",
37+
controller_gen_bin = "@controller_gen_linux_arm64//:controller-gen",
4338
)
4439

40+
toolchain(
41+
name = "controller_gen_linux_arm64_toolchain",
42+
exec_compatible_with = [
43+
"@platforms//os:linux",
44+
"@platforms//cpu:aarch64",
45+
],
46+
toolchain = ":controller_gen_linux_arm64",
47+
toolchain_type = ":toolchain",
48+
visibility = ["//visibility:public"],
49+
)
50+
51+
# macOS x86_64
4552
controller_gen_toolchain(
46-
name = "controller_gen_darwin",
47-
controller_gen_bin = "@rules_kubebuilder//controller-gen:bin/controller-gen.darwin",
53+
name = "controller_gen_darwin_amd64",
54+
controller_gen_bin = "@controller_gen_darwin_amd64//:controller-gen",
4855
)
4956

5057
toolchain(
51-
name = "controller_gen_linux_toolchain",
58+
name = "controller_gen_darwin_amd64_toolchain",
5259
exec_compatible_with = [
53-
"@platforms//os:linux",
60+
"@platforms//os:osx",
5461
"@platforms//cpu:x86_64",
5562
],
56-
toolchain = ":controller_gen_linux",
63+
toolchain = ":controller_gen_darwin_amd64",
5764
toolchain_type = ":toolchain",
5865
visibility = ["//visibility:public"],
5966
)
6067

68+
# macOS arm64
69+
controller_gen_toolchain(
70+
name = "controller_gen_darwin_arm64",
71+
controller_gen_bin = "@controller_gen_darwin_arm64//:controller-gen",
72+
)
73+
6174
toolchain(
62-
name = "controller_gen_darwin_toolchain",
75+
name = "controller_gen_darwin_arm64_toolchain",
6376
exec_compatible_with = [
6477
"@platforms//os:osx",
65-
"@platforms//cpu:x86_64",
78+
"@platforms//cpu:aarch64",
6679
],
67-
toolchain = ":controller_gen_darwin",
80+
toolchain = ":controller_gen_darwin_arm64",
6881
toolchain_type = ":toolchain",
6982
visibility = ["//visibility:public"],
7083
)
-20.1 MB
Binary file not shown.
-20.2 MB
Binary file not shown.

0 commit comments

Comments
 (0)