WorkflowScript is a programming language for writing GCP Workflows programs in a Javascript-like syntax. This project is a compiler that compiles WorkflowScript source code into GCP Workflows native YAML syntax.
A sample program in WorkflowScript:
workflow main() {
name = "workflows"
sys.log(text="Hello, " + name)
}
The examples directory contains more sample programs.
WorkflowScript language reference documents the valid WorkflowScript syntax.
npm install workflowscript-compiler
Compiling a sample program in the file examples/hello.wfs
:
npx wfscompile examples/hello.wfs
The source can also be piped to the compiler:
cat examples/hello.wfs | npx wfscompile
The compiler will output the workflows YAML on stdout.
The wfscompile
command can take the following optional arguments:
-
--disableValidators <VALIDATOR>
: disable a named source code validator. See below for validator names. Can be given multiple times.
Run npx wfscompile -h
to see all options.
If the compiler encounters parsing errors or detects invalid syntax, it prints an error message and quits with a non-zero exit code.
Some error checks can be disabled with the --disableValidators
command line option. This might be handy, for example, if a error check is buggy and rejects a valid program. The names and functionality of checks that can be disabled:
-
duplicatedStepName
checks that there are no duplicated step names in the workflow -
duplicatedSubworkflowName
checks that there are not duplicated subworkflow names -
invalidWorkflowName
checks that the workflow names are valid -
missingJumpTarget
checks that call and next steps targets exist -
wrongNumberOfCallArguments
checks that a correct number of arguments is provided in subworkflow calls
npm install
npm run build
npm run test
Calling the Workflow compiler from a Javascript application:
import { compile } from 'workflowscript-compiler'
const sourcecode = `workflow main() {
sys.log(text="Hello workflows!")
}`
console.log(compile(sourcecode))
Compiling a source code file:
import { compileFile } from 'workflowscript-compiler'
console.log(compileFile('examples/hello.wfs'))
It is possible to disable some validators by listing the names of validators-to-be-disabled as the second argument of the compile()
or compileFile()
function invocation.
import { compile } from 'workflowscript-compiler'
const workflowSource = 'workflow main() {}'
const disabled = ['missingJumpTarget']
compile(workflowSource, disabled)
Draw WorkflowScript grammar's syntax diagrams to grammar.html:
npm run diagram
(not prioritized)
- Fix bugs. This is beta quality software! Expect at least some bugs.
- while loop
- Javascriptlike non-quoted object keys:
{firstKey: 1, second: 2}
- finally block in try?
- index variable in a for loop
- floor division:
x // 2
. Comments? - Detect uninitialized variables
- Dead code elimination (or at least dead subworkflow elimination)