yq
Public API for yq
Macros and Functions
yq
Invoke yq with an expression on a set of input files.
For yq documentation, see https://mikefarah.gitbook.io/yq.
To use this rule you must register the yq toolchain in your WORKSPACE:
load("@aspect_bazel_lib//lib:repositories.bzl", "register_yq_toolchains")
register_yq_toolchains()
Usage examples:
load("@aspect_bazel_lib//lib:yq.bzl", "yq")
# Remove fields
yq(
name = "safe-config",
srcs = ["config.yaml"],
expression = "del(.credentials)",
)
# Merge two yaml documents
yq(
name = "ab",
srcs = [
"a.yaml",
"b.yaml",
],
expression = ". as $item ireduce ({}; . * $item )",
)
# Split a yaml file into several files
yq(
name = "split",
srcs = ["multidoc.yaml"],
outs = [
"first.yml",
"second.yml",
],
args = [
"-s '.a'", # Split expression
"--no-doc", # Exclude document separator --
],
)
# Convert a yaml file to json
yq(
name = "convert-to-json",
srcs = ["foo.yaml"],
args = ["-o=json"],
outs = ["foo.json"],
)
# Convert a json file to yaml
yq(
name = "convert-to-yaml",
srcs = ["bar.json"],
args = ["-P"],
outs = ["bar.yaml"],
)
# Call yq in a genrule
genrule(
name = "generate",
srcs = ["farm.yaml"],
outs = ["genrule_output.yaml"],
cmd = "$(YQ_BIN) '.moo = "cow"' $(location farm.yaml) > $@",
toolchains = ["@yq_toolchains//:resolved_toolchain"],
)
yq is capable of parsing and outputting to other formats. See their docs for more examples.
name
Required.
Name of the rule
srcs
Required.
List of input file labels
expression
Optional. Default: "."
yq expression (https://mikefarah.gitbook.io/yq/commands/evaluate). Defaults to the identity expression "."
args
Optional. Default: []
Additional args to pass to yq. Note that you do not need to pass eval or eval-all as this
is handled automatically based on the number srcs
. Passing the output format or the parse format
is optional as these can be guessed based on the file extensions in srcs
and outs
.
outs
Optional. Default: None
Name of the output files. Defaults to a single output with the name plus a ".yaml" extension, or the extension corresponding to a passed output argment (e.g., "-o=json"). For split operations you must declare all outputs as the name of the output files depends on the expression.
kwargs
Optional.
Other common named parameters such as tags
or visibility