These are build rules for working with Jsonnet files with Bazel.
To use the Jsonnet rules, simply copy the contents of jsonnet.WORKSPACE
into your WORKSPACE
file.
jsonnet_library(name, srcs, deps, imports)
Suppose you have the following directory structure:
[workspace]/ WORKSPACE configs/ BUILD backend.jsonnet frontend.jsonnet
You can use the jsonnet_library
rule to build a collection of .jsonnet
files that can be imported by other .jsonnet
files as dependencies:
configs/BUILD
:
load("/tools/build_defs/jsonnet/jsonnet", "jsonnet_library") jsonnet_library( name = "configs", srcs = [ "backend.jsonnet", "frontend.jsonnet", ], )
jsonnet_to_json(name, src, deps, outs, multiple_outputs, imports)
{ “foo.json”: foo, } imports List of strings, optional List of import -J flags to be passed to the jsonnet compiler.
Suppose you have the following directory structure:
[workspace]/ WORKSPACE workflows/ BUILD workflow.jsonnet wordcount.jsonnet intersection.jsonnet
Say that workflow.jsonnet
is a base configuration library for a workflow scheduling system and wordcount.jsonnet
and intersection.jsonnet
both import workflow.jsonnet
to define workflows for performing a wordcount and intersection of two files, respectively.
First, create a jsonnet_library
target with workflow.jsonnet
:
workflows/BUILD
:
load("/tools/build_defs/jsonnet/jsonnet", "jsonnet_library") jsonnet_library( name = "workflow", srcs = ["workflow.jsonnet"], )
To compile wordcount.jsonnet
and intersection.jsonnet
to JSON, define two jsonnet_to_json
targets:
jsonnet_to_json( name = "wordcount", src = "wordcount.jsonnet", outs = ["wordcount.json"], deps = [":workflow"], ) jsonnet_to_json( name = "intersection", src = "intersection.jsonnet", outs = ["intersection.json"], deps = [":workflow"], )
To use Jsonnet's multiple output files, suppose you add a file shell-workflows.jsonnet
that imports wordcount.jsonnet
and intersection.jsonnet
:
workflows/shell-workflows.jsonnet
:
local wordcount = import "workflows/wordcount.jsonnet"; local intersection = import "workflows/intersection.jsonnet"; { "wordcount-workflow.json": wordcount, "intersection-workflow.json": intersection, }
To compile shell-workflows.jsonnet
into the two JSON files, wordcount-workflow.json
and intersection-workflow.json
, first create a jsonnet_library
target containing the two files that shell-workflows.jsonnet
depends on:
jsonnet_library( name = "shell-workflows-lib", srcs = [ "wordcount.jsonnet", "intersection.jsonnet", ], deps = [":workflow"], )
Then, create a jsonnet_to_json
target and set outs
to the list of output files to indicate that multiple output JSON files are generated:
jsonnet_to_json( name = "shell-workflows", src = "shell-workflows.jsonnet", deps = [":shell-workflows-lib"], outs = [ "wordcount-workflow.jsonnet", "intersection-workflow.jsonnet", ], )