Variables
Defining a variable in Werk is a let
-statement. Values are either strings or
lists (no numbers). Lists may contain other lists. All strings are valid UTF-8.
Syntax: let identifier = expression
. The left-hand side of the =
must be a
valid identifier (Unicode is supported), and the right-hand side is any
expression. All expressions produce a value.
let my-string = "value"
let my-list = ["a", "b", "c"]
All variables are immutable, but variable names may shadow local or global variables with the same name.
let foo = "a"
let foo = "b" # valid
let bar = foo # == "b"
Global variables are public
Variables defined at the global scope (i.e., outside of any recipe) are public,
and will appear in the output of werk --list
. They can be overridden by
passing -Dkey=value
on the command-line. Comments immediately preceding a
global variable will appear in the output as documentation for that variable.
# Set the build profile.
let profile = "debug"
$ werk --list
Global variables:
profile = "debug" # Set the build profile.
Local variables
Variables defined within a recipe are local to that recipe. Recipes cannot change global variables, but they may shadow global variables in their local scope by defining a variable with the same name as a global variable.