Bazel builds ¶
Building with bazel offers a deterministic, faster build, including creating smaller docker images.
While bazel works well for small projects, building with kubernetes still has a few challenges. We take the following approach:
- We don't yet generate files in bazel - we use external scripts (for now)
- We vendor our dependencies, rather than relying on gazelle (although actually gazelle works, the issue is when external dependencies like apimachinery include bazel files that confuse gazelle)
- We strip bazel files from external dependencies, so we don't confuse gazelle
Bazel versions: ¶
For building kOps release branches 1.14 and older, you may need to run an older version of bazel such as
0.24.0. kOps 1.15 and newer should be able to use more recent versions of bazel due to deprecation fixes that have not be backported.
How to run ¶
make bazel-build make bazel-build-cli # To build end to end and upload to s3 make bazel-upload
Regenerate bazel files using gazelle:
Other changes needed ¶
- By default the
go_testcommand doesn't allow tests to use data. So we need to use
data = glob(["testdata/**"]),or similar. We add
# keepto stop gazelle from removing it.
datadoesn't make it easy to access files in a parent directory, so we'll have to clean up some of the test / package structure.