yq.bzlAPI docs @0.3.1

@yq.bzl//yq:yq.bzl

Load in your BUILD file:

load("@yq.bzl", "yq")

Examples

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"], )

With --stamp, causes properties to be replaced by version control info.

yq( name = "stamped", srcs = ["package.yaml"], expression = "|".join([ "load(strenv(STAMP)) as $stamp", # Provide a default using the "alternative operator" in case $stamp is empty dict. ".version = ($stamp.BUILD_EMBED_LABEL // "<unstamped>")", ]), )

Functions & Macros

yq

Invoke yq with an expression on a set of input files.

yq is capable of parsing and outputting to other formats. See their docs for more examples.

Parameters
*name

Name of the rule

*srcs

List of input file labels

expression

yq expression (https://mikefarah.gitbook.io/yq/commands/evaluate).

Defaults to the identity
expression ".". Subject to stamp variable replacements, see Stamping.
When stamping is enabled, an environment variable named "STAMP" will be available in the expression.

Be careful to write the filter so that it handles unstamped builds, as in the example above.

Default: "."
args

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.

Default: []
outs

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 argument (e.g., "-o=json"). For split operations you
must declare all outputs as the name of the output files depends on the expression.

Default: None
kwargs

Other common named parameters such as tags or visibility