@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 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 Default: [] |
outs | Name of the output files. Defaults to a single output with the name plus a ".yaml" extension, or Default: None |
kwargs | Other common named parameters such as |