3.7 KiB
Public API for write_source_files
write_source_files
write_source_files(name, files, additional_update_targets, suggested_update_target, diff_test, kwargs)
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.
Usage:
load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files")
write_source_files(
name = "write_foobar",
files = {
"foobar.json": "//some/generated:file",
},
)
To update the source file, run:
bazel run //:write_foobar
A test will fail if the source file doesn't exist or if it's out of date with instructions on how to create/update it.
You can declare a tree of generated source file targets:
load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files")
write_source_files(
name = "write_all",
additional_update_targets = [
# Other write_source_files targets to run when this target is run
"//a/b/c:write_foo",
"//a/b:write_bar",
]
)
And update them with a single run:
bazel run //:write_all
When a file is out of date, you can leave a suggestion to run a target further up in the tree by specifying suggested_update_target
. E.g.,
write_source_files(
name = "write_foo",
files = {
"foo.json": ":generated-foo",
},
suggested_update_target = "//:write_all"
)
A test failure from foo.json being out of date will yield the following message:
//a/b:c:foo.json is out of date. To update this and other generated files, run:
bazel run //:write_all
To update *only* this file, run:
bazel run //a/b/c:write_foo
If you have many sources that you want to update as a group, we recommend wrapping write_source_files in a macro that defaults suggested_update_target
to the umbrella update target.
NOTE: If you run formatters or linters on your codebase, it is advised that you exclude/ignore the outputs of this rule from those formatters/linters so as to avoid causing collisions and failing tests.
PARAMETERS