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 use Bazelisk, which automatically picks the correct version of Bazel for a branch
- 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
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.