How bazel-contrib/bazel-gazelle works
Gazelle is a command-line tool and extensible library for creating and updating Bazel BUILD files. Its principal workflow accepts a workspace and command, walks project directories, generates language-specific rules, resolves imports against an index, and merges results into BUILD files. Go and protobuf are native generators; external extensions add other languages. The tree also contains repository-rule utilities and a compatibility layer for the v1/v2 APIs. The update orchestrator and several subsystems are unsampled, so their internal connections are shown only where documented or marked unverified.
Main entry points: update Update orchestrator · lang.go Language lifecycle · rule.go Rule model · main.go Gazelle CLI
Components 20
Command entrypoints
- Gazelle CLI
cmd/gazelle/main.go - Update orchestrator
v2/cmd/gazelle/update
Generation engine
- Workspace walker
v2/walk/walk.go - Language lifecycle
v2/language/lang.go - Import index
v2/resolve/index.go - Rule model
rule/rule.go - BUILD merger
merger/merger.go - v2 label utilities
v2/label/label.go - v2 merger
v2/merger/merger.go - v2 walker
v2/walk/walk.go
Language support
- Go generator
language/go/generate.go - Proto generator
language/proto/generate.go - API compatibility
v2/compat/compat.go
Repository utilities
- Remote repository cache
repo/remote.go - Repository config tool
cmd/generate_repo_config/main.go - Override generator
tools/override-generator/main.go - Release utility
tools/releaser/main.go
Other components
- Workspace operator
- BUILD files
- Language extensions
Connections 21
- Workspace operator → Gazelle CLI: runs
- Gazelle CLI → Update orchestrator: dispatches
cmd/gazelle/main.go - Update orchestrator → Workspace walker: walks workspace
- Update orchestrator → Language lifecycle: runs lifecycle
- Update orchestrator → Import index: resolves imports
- Update orchestrator → BUILD merger: merges updates
- Go generator → Language lifecycle: implements
language/go/generate.go - Proto generator → Language lifecycle: implements
language/proto/generate.go - Language extensions → Language lifecycle: extends
- Update orchestrator → Go generator: generates rules
- Update orchestrator → Proto generator: generates rules
- Import index → Remote repository cache: consults cache
- BUILD merger → Rule model: merges rules
merger/merger.go - Update orchestrator → BUILD files: updates
- API compatibility → Language lifecycle: adapts APIs
v2/compat/compat.go - Repository config tool → Remote repository cache: lists repositories
cmd/generate_repo_config/main.go - Override generator → Rule model: builds overrides
tools/override-generator/main.go - Release utility → Rule model: rewrites rules
tools/releaser/main.go - v2 merger → Rule model: operates on rules
v2/merger/merger.go - v2 walker → Rule model: walks rule data
v2/walk/walk.go - v2 label utilities → v2 walker: path helpers