Bazel

Practical Bazel: Building Multiple Workspaces in CI
Practical Bazel bazel
Published: 2022-10-18
Practical Bazel: Building Multiple Workspaces in CI

For most Bazel projects, I strongly recommend using a single Bazel workspace per source code repository. However, it can be occasionally useful to nest multiple workspaces within a single repository. For example, when I’m writing Bazel rulesets, I will often create test cases that contain own workspace with a slightly different configuration in order to test various workspace-level configuration settings for the ruleset, while maintaining a root workspace which is the primary workspace for the ruleset.

Read more...
Practical Bazel: Use a Single .bazelrc With Multiple Configurations
Practical Bazel bazel
Published: 2022-10-17
Practical Bazel: Use a Single .bazelrc With Multiple Configurations

Bazel users commonly need to manage multiple different configurations when building and testing software, such as:

  • A configuration that is used by developers on their own PCs, which often has debug mode turned on
  • A configuration that is used by the continuous integration (CI) default build and test pipeline, which often builds in release mode
  • A configuration for generating a tagged, version release, which often has stamping enabled
  • (Perhaps many more)
Read more...
Practical Bazel: Implementing compilation_mode in Rules
Practical Bazel bazel
Published: 2022-10-13
Practical Bazel: Implementing compilation_mode in Rules

As developers know, virtually all compilers support the notion of compilation mode, e.g.. whether to compile the code in debug or release mode. In Bazel, this concept is built natively into the build system itself. When compiling software using bazel build, one can select a compilation mode using the --compilation_mode (often shorted to -c) flag.

Read more...
Practical Bazel: A Starting CI Pipeline
Practical Bazel bazel continuous-integration
Published: 2021-09-14
Practical Bazel: A Starting CI Pipeline

This post describes a pattern for implementing a continuous integration (CI) pipeline using Bazel. This pattern is my starting point whenever I set up a new Bazel-based project in CI, after which I add any project-specific pipeline customizations.

This pipeline is purely about the CI (build to release) stages of a pipeline. A full continuous delivery (CD) pipeline, which includes deployment, will be discussed in a later post.

Read more...