Use this file to discover all available pages before exploring further.
aspect buildifier formats Starlark files — BUILD, BUILD.bazel, MODULE.bazel, .bzl, .axl, WORKSPACE, and more — using the buildifier binary from buildifier_prebuilt.It is currently registered as an alias of aspect format via format.alias() in .aspect/config.axl. This makes it a first-class CLI command without any BUILD target or rules_lint dependency — just a bazel_dep on buildifier_prebuilt and a few lines of AXL.Under the hood, aspect buildifier runs through the same aspect format infrastructure: the same change-detection logic, the same git snapshot technique, the same --on-change behavior, and the same artifact upload. The only difference is the formatter binary and the file pattern filter.
The alias setup below is the supported configuration today. A future release of the Aspect CLI may ship aspect buildifier as a built-in task that requires no format.alias() block — at which point the alias becomes optional. For now, follow the setup below.
bazel_dep(name = "buildifier_prebuilt", version = "8.5.1.2")
.aspect/config.axl:
load("@aspect//format.axl", "format")buildifier = format.alias( defaults = { "formatter_target": "@buildifier_prebuilt//buildifier", # buildifier_binary is a symlink to the raw Go binary; it does not # switch to $BUILD_WORKING_DIRECTORY on its own, so we run it in # the user's cwd to make relative paths resolve. "run_in_cwd": True, # Fires only when the format task would otherwise pass zero files # to the formatter (e.g. `--scope=all`, or a `--scope=changed` run # that degraded because no changed files matched). The bare # buildifier binary needs `-r .` to walk the tree on its own. Inert # whenever a file list is passed, so `--scope=changed` (the default) # and per-file invocations are unaffected. "formatter_args_for_tree_walk": ["-r", "."], "include_patterns": [ "**/BUCK", "**/BUILD", "**/BUILD.bazel", "**/MODULE.bazel", "**/*.MODULE.bazel", "**/Tiltfile", "**/WORKSPACE", "**/WORKSPACE.bazel", "**/*.axl", "**/*.bzl", "**/*.star", ], }, summary = "Format Starlark files using buildifier.",)def config(ctx: ConfigContext): ctx.tasks.add(buildifier)
This registers aspect buildifier as a real CLI command. Run it locally:
aspect buildifier # format changed Starlark files (default)aspect buildifier --scope=all # walk the tree and format every Starlark fileaspect buildifier BUILD.bazel # format specific files explicitly
--scope=all covers a narrower file set than --scope=changed. In --scope=all the format task hands off discovery to buildifier’s -r . tree walk, which has a hard-coded list of recognized file types: BUILD, BUILD.bazel, MODULE.bazel, WORKSPACE, WORKSPACE.bazel, *.bzl, *.star. Files matching the alias’s include_patterns but not on buildifier’s list — notably *.axl, *.MODULE.bazel, Tiltfile, BUCK — are silently skipped. include_patterns filters the changed-file list in --scope=changed and the post-format diff in both modes, but it does not extend buildifier’s tree walk.In --scope=changed (the default) the task passes the changed file list to buildifier positionally, so every extension in include_patterns is formatted. The same applies when you pass files explicitly (aspect buildifier path/to/file.axl).For a CI job that needs full coverage of an extension buildifier doesn’t auto-discover, prefer --scope=changed against a broader base ref, or invoke buildifier on the file set yourself.
All aspect format configuration applies: --scope, --on-change, --ignore-pattern, --upload-format-diff. The format.alias() defaults bake in the formatter target and file patterns so you don’t repeat them at invocation time.To add or remove file patterns from the defaults:
.aspect/config.axl
buildifier = format.alias( defaults = { "formatter_target": "@buildifier_prebuilt//buildifier", "include_patterns": [ "**/BUILD", "**/BUILD.bazel", "**/*.bzl", # omit .axl and .star if you don't use those extensions ], }, summary = "Format Starlark files using buildifier.",)