Bazel Build Optimization
Production patterns for Bazel in large-scale monorepos.
When to Use This Skill
- Setting up Bazel for monorepos
- Configuring remote caching/execution
- Optimizing build times
- Writing custom Bazel rules
- Debugging build issues
- Migrating to Bazel
Core Concepts
1. Bazel Architecture
workspace/
āāā WORKSPACE.bazel # External dependencies
āāā .bazelrc # Build configurations
āāā .bazelversion # Bazel version
āāā BUILD.bazel # Root build file
āāā apps/
ā āāā web/
ā āāā BUILD.bazel
āāā libs/
ā āāā utils/
ā āāā BUILD.bazel
āāā tools/
āāā bazel/
āāā rules/
2. Key Concepts
| Concept |
Description |
| Target |
Buildable unit (library, binary, test) |
| Package |
Directory with BUILD file |
| Label |
Target identifier //path/to:target |
| Rule |
Defines how to build a target |
| Aspect |
Cross-cutting build behavior |
Templates and detailed worked examples
Full template library and detailed worked examples live in references/details.md. Read that file when you need the concrete templates.
Best Practices
Do's
- Use fine-grained targets - Better caching
- Pin dependencies - Reproducible builds
- Enable remote caching - Share build artifacts
- Use visibility wisely - Enforce architecture
- Write BUILD files per directory - Standard convention
Don'ts
- Don't use glob for deps - Explicit is better
- Don't commit bazel-* dirs - Add to .gitignore
- Don't skip WORKSPACE setup - Foundation of build
- Don't ignore build warnings - Technical debt