BlaiseBlaise
Documentation
Runner and PlugsReference

Expressions

The ${{ }} expression language, its contexts, types and timing.

Values in blaise.yml can contain ${{ … }} expressions. The language is GitHub Actions' expression language, evaluated by GitHub's own library, @actions/expressions. Syntax, operators, type coercion and case-insensitive property access work as GitHub documents them.

Functions

contains, startsWith, endsWith, format, join, toJSON, fromJSON and case. Functions that need a workflow, such as hashFiles or success(), do not exist.

Contexts

ContextAvailable inContents
enveverywhereThe runner process's environment.
sessionagent, with of plugsid, executionId, agent.name.
runagent, with of plugskind (start, resume, teardown), number.
setup.<id>.outputs.<key>with of later plugsOutputs of earlier plugs. Strings.

server and log can only use env. A context that is not available at a given place is a parse error, reported when the file loads. env is always the runner's environment, even for plugs listed below one that switches the host.

Types

A value that is exactly one expression keeps the type of the result, so ${{ fromJSON(env.LIST) }} can produce a list and ${{ run.number }} a number. Any other string with expressions in it is built by converting each part to a string and joining them.

When expressions are evaluated

PartWhen
server, logWhen the file loads.
agentWhen a run starts.
with of a plugJust before the plug runs, when the plug before it calls next().

Evaluation of with is lazy so that a plug can read the outputs of every earlier plug. Expressions are always evaluated after includes, anchors and merges, and only in string values. Every expression is parsed when the file loads, so typos fail early.

Passing values to scripts

Pass values to the shell plug through its env input and read them as shell variables. Do not inline ${{ }} into a script: substitution is textual, so it can inject commands.

On this page