Common useful functions for writing BUILD files and Starlark macros/rules
Go to file
Mike Lundy dfcffca8f5
jq: add data file and location expansion support (#757)
This teaches the jq rule about a `data` attribute and adds conditional
support to do bazel location expansion. The expansion is disabled by
default because it likely would cause compat concerns (since jq can take
arbitrary text as input args).
2024-02-26 17:43:56 -08:00
.aspect chore: upgrade to Aspect Workflows 5.9.11 (#765) 2024-02-26 13:30:30 -08:00
.bcr chore: BCR testing on Bazel 6 and 7 (#736) 2024-01-27 12:06:36 -08:00
.circleci chore: green up CI (#767) 2024-02-26 16:58:03 -08:00
.github/workflows chore(deps): update actions/github-script action to v7 (#759) 2024-02-26 17:34:30 -08:00
docs jq: add data file and location expansion support (#757) 2024-02-26 17:43:56 -08:00
e2e chore(deps): update dependency bazel_skylib to v1.5.0 2024-01-30 00:18:44 -08:00
lib jq: add data file and location expansion support (#757) 2024-02-26 17:43:56 -08:00
platforms ci: enable engflow RBE for github actions 2022-08-19 08:42:00 -07:00
shlib chore: bazel run //:format (#682) 2023-12-08 00:30:39 -08:00
tools Fix prerelease (#708) 2024-01-04 12:07:19 -08:00
.bazelignore chore: turn on more basic precommit checks 2023-02-17 11:00:00 -08:00
.bazeliskrc chore: upgrade to Aspect Workflows 5.9.0-rc.9 (#705) 2023-12-22 15:08:16 -08:00
.bazelrc fix(ci): always build with -c opt (#555) 2023-09-27 09:56:35 -07:00
.bazelversion chore: upgrade to Aspect Workflows 5.9.0-rc.9 (#705) 2023-12-22 15:08:16 -08:00
.editorconfig chore: bazel run //:format (#682) 2023-12-08 00:30:39 -08:00
.gitattributes fix: exclude bazeliskrc from smoke test (#654) 2023-11-14 15:39:56 -08:00
.gitignore Avoid expanding mtree spec during analysis phase (#576) 2023-10-05 12:36:55 -07:00
.pre-commit-config.yaml chore: upgrade to Aspect Workflows 5.9.0.rc.10 (#710) 2024-01-03 00:16:47 -08:00
.prettierignore chore: upgrade to Aspect Workflows 5.9.0-rc.15 (#722) 2024-01-13 13:38:51 -08:00
BUILD.bazel feat: add is_bazel_7_or_greater utility (#714) 2024-01-07 16:42:57 -08:00
CONTRIBUTING.md docs: add minimum pre-commit version (#544) 2023-09-24 17:17:49 -07:00
LICENSE chore: turn on more basic precommit checks 2023-02-17 11:00:00 -08:00
MODULE.bazel chore(deps): update dependency bazel_skylib_gazelle_plugin to v1.5.0 2024-02-01 18:29:26 -08:00
MODULE.bazel.lock chore: upgrade to Aspect Workflows 5.9.0-rc.9 (#705) 2023-12-22 15:08:16 -08:00
README.md docs: add bats docs 2024-02-26 15:55:48 -08:00
WORKSPACE chore: upgrade to Aspect Workflows 5.9.0-rc.15 (#722) 2024-01-13 13:38:51 -08:00
deps.bzl fix(deps): update golang.org/x/exp digest to f3f8817 2023-12-08 11:52:13 -08:00
go.mod fix(deps): update golang.org/x/exp digest to 1b97071 2024-01-30 00:19:09 -08:00
go.sum fix(deps): update golang.org/x/exp digest to 1b97071 2024-01-30 00:19:09 -08:00
internal_deps.bzl chore(deps): update dependency bazel_skylib_gazelle_plugin to v1.5.0 2024-02-01 18:29:26 -08:00
renovate.json Update renovate.json (#572) 2024-02-26 17:39:52 -08:00

README.md

Aspect's Bazel helpers library

Base Starlark libraries and basic Bazel rules which are useful for constructing rulesets and BUILD files.

This module depends on bazel-skylib. In theory all these utilities could be upstreamed to bazel-skylib, but the declared scope of that project is narrow and it's very difficult to get anyone's attention to review PRs there.

bazel-lib is just a part of what Aspect provides:

Installation

Installation instructions are included on each release: https://github.com/aspect-build/bazel-lib/releases

To use a commit rather than a release, you can point at any SHA of the repo.

For example to use commit abc123:

  1. Replace url = "https://github.com/aspect-build/bazel-lib/releases/download/v0.1.0/bazel-lib-v0.1.0.tar.gz" with a GitHub-provided source archive like url = "https://github.com/aspect-build/bazel-lib/archive/abc123.tar.gz"
  2. Replace strip_prefix = "bazel-lib-0.1.0" with strip_prefix = "bazel-lib-abc123"
  3. Update the sha256. The easiest way to do this is to comment out the line, then Bazel will print a message with the correct value.

Note that GitHub source archives don't have a strong guarantee on the sha256 stability, see https://github.blog/2023-02-21-update-on-the-future-stability-of-source-code-archives-and-hashes

Public API

Copying files

  • copy_directory Copies directories to another package.
  • copy_file Copies files to another package.
  • copy_to_bin Copies a source file to output tree at the same workspace-relative path.
  • copy_to_directory Copies and arranges files and directories into a new directory.
  • write_source_files Write to one or more files or folders in the source tree. Stamp out tests that ensure the sources exist and are up to date.

Transforming files

  • jq A toolchain and custom rule for running jq, a tool that is "like sed for json".
  • yq A toolchain and custom rule for running yq, a "YAML, JSON and XML processor".

Manipulating paths

  • directory_path Provide a label to reference some path within a directory, via DirectoryPathInfo.
  • output_files Forwards a subset of the files (via the DefaultInfo provider) from a given target's DefaultInfo or OutputGroupInfo.

Writing rules

  • expand_make_vars Perform make variable and location substitions in strings..
  • expand_template Substitute templates with make variables, location resolves, stamp variables, and arbitrary strings.
  • paths Useful path resolution methods.
  • transitions Transition sources to a provided platform.
  • lists Functional-style helpers for working with list data structures.
  • utils Various utils for labels and globs.
  • params_file Generate encoded params file from a list of arguments.
  • repo_utils Useful methods for repository rule implementations.
  • run_binary Like skylib's run_binary but adds directory output support.
  • stamping Support version stamping in custom rules.
  • base64 Starlark Base64 encoder & decoder.

Testing

Generating documentation

  • docs Rules for generating docs and stamping tests to ensure they are up to date.