workflowscript-compiler
v0.2.0
Published
A JavaScript-inspired programming language for writing GCP Workflows programs
Downloads
7
Readme
WorkflowScript - a JavaScript-inspired programming language for writing GCP Workflows programs
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.
WorkflowScript syntax and sample programs
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.
Installation
npm install workflowscript-compiler
Using the 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.
Command line options
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.
Error handling
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 workflowduplicatedSubworkflowName
checks that there are not duplicated subworkflow namesinvalidWorkflowName
checks that the workflow names are validmissingJumpTarget
checks that call and next steps targets existwrongNumberOfCallArguments
checks that a correct number of arguments is provided in subworkflow calls
Build
npm install
npm run build
Test
npm run test
Compiler API
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)
Syntax diagram
Draw WorkflowScript grammar's syntax diagrams to grammar.html:
npm run diagram
Roadmap
(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)