This guide demonstrates how to include CUE files in an evaluation conditionally, using build attributes.

Our example CUE package is composed of four files:

@if(foo)
package example

"data from foo.cue": true
@if(!bar)
package example

"data from bar.cue": true
@if((foo && !bar) || (!foo && bar))
package example

"data from qux.cue": true
baz.cue
package example

"data from baz.cue": true

The first three of these files contain build attributes, which control if the file’s contents are included in evaluations of the example package based on the presence or absence of tags:

  • foo.cue is only included when the foo tag is present.
  • bar.cue is only included when the bar tag is not present.
  • qux.cue is only included when one of the bar or foo tags is present (but not when both or neither are present).
  • baz.cue is always included.

The following cue export invocations all specify different tags to change the evaluation as described above:

TERMINAL
$ cue export
{
    "data from bar.cue": true,
    "data from baz.cue": true
}
$ cue export -t foo
{
    "data from bar.cue": true,
    "data from baz.cue": true,
    "data from foo.cue": true,
    "data from qux.cue": true
}
$ cue export -t bar
{
    "data from baz.cue": true,
    "data from qux.cue": true
}
$ cue export -t foo -t bar
{
    "data from baz.cue": true,
    "data from foo.cue": true
}
CUE v0.13.0