Skip to content

bazel

Migrating to Bazel Modules (a.k.a. Bzlmod) - Repo Names, Macros, and Variables

The previous two posts in this series showed how to use runfiles mechanisms and rules_pkg mechanisms to avoid dealing with canonical repository names under Bzlmod. However, one special case remains: when you need to depend on the name of a repository directory, either at build time or runtime. This post explains how to access canonical repository names in a portable way to solve such problems. We'll use a macro when we can, and a custom Make Variable when we can't, including when dealing with alias targets.

Migrating to Bazel Modules (a.k.a. Bzlmod) - Repo Names and rules_pkg

The previous post in our Bzlmod migration series demonstrated how to make runfiles paths portable to a Bzlmod world. Another common source of Bzlmod file path breakages are misconfigured rules from rules_pkg, which contains rules for building archives from build outputs and/or external repositories. This post will explain key details of some of these rules, so you can stop "holding it wrong" and easily migrate archive targets to Bzlmod.

Migrating to Bazel Modules (a.k.a. Bzlmod) - Repo Names and Runfiles

The first post in our Bzlmod migration series explained many of the problems that may arise when migrating your project. These next three posts will explore various solutions to problems arising from changes in how Bazel handles repository names under Bzlmod, beginning with runfiles paths. After applying the techniques in this post, your project should be well insulated from runfiles path related breakages, now and well into the future.

Migrating to Bazel Modules (a.k.a. Bzlmod) - The Easy Parts

You may be aware that Bazel will remove support for WORKSPACE in Bazel 9 in favor of Bazel Modules (a.k.a. Bzlmod). The current mainstream release is Bazel 7.2.0, so there's plenty of time to migrate. However, there's no time like the present to get started, to avoid further WORKSPACE dependencies and a pile of migration work in the future.

I recently completed the Bzlmod migration for EngFlow/example and our internal repos. This experience taught me a lot about Bzlmod and about migrating complex projects with challenging dependency issues that I'll share over a few blog posts. I'll also borrow from Sara Adams's earlier post, in which she described an example bzlmod migration based on EngFlow's Bazel Invocation Analyzer repo.

The Many Caches of Bazel

As its "{fast, correct} — choose two" tagline promises, a major feature of Bazel is performance. Caching is a key technique Bazel uses to improve build speed. Bazel deploys several kinds and layers of caches. There are so many caches that it’s hard to keep them straight. Additionally, frequently used terms like “action cache” can be ambiguous. This blog post will lay out the major Bazel caching mechanisms.

Bazel Bites: A Tasty Metaphor for Streamlined Builds

When you search the internet for details about Bazel, you’ll likely come across something like this:

Bazel is a build system. It’s used to build and test software, converting source code into artifacts, such as executable programs.

Bazel’s headline, “{Fast, Correct} - Choose two,” emphasizes its focus on scalability and hermeticity. It’s language agnostic, allowing you to use Bazel to build projects written in a variety of different programming languages.

If this seems confusing or overwhelming at first, don’t worry – we’ve cooked up a different approach that could help. We’ve concocted this article using a slightly rare (yes, we went there!) cooking metaphor.

Bazel explained through cooking

Bazel explained through cooking

Supercharge Traditional CI/CD Pipelines and Cut Costs With EngFlow

At EngFlow, we've been dedicated to improving the speed, efficiency, and productivity of development processes for almost half a decade. As the market has evolved and FinOps gains more traction, we've expanded our focus beyond accelerating development to include optimizing costs and fostering sustainability in software engineering.

Let's discover how EngFlow can effectively help you achieve your goals by reducing infrastructure expenses and maximizing resource utilization.

Bazel scales more than just builds

Bazel creates a structured layer between the details of building and testing for individual languages and the users, both human and machine, that perform build operations. This abstraction simplifies workflows and is the foundation for powerful build-adjacent systems not possible with other build tools. Scalable Bazel builds underpin a scalable organization and development culture.