Workflow engine core with Starlark-subset parser, DAG execution, and cache planning primitives.
Dependencies
import {
"mizchi/bitflow/workflow" @wf,
}
let nodes = [@wf.new_node("root", []), @wf.new_node("dep", ["root"])]
let tasks = [
@wf.new_task("root:build", "root", "build", []),
@wf.new_task("dep:test", "dep", "test", ["root:build"]),
]
let ir = @wf.new_ir("ci", nodes, tasks, entry_targets=["dep:test"])
let result = @wf.execute_ir(ir, fn(_task : @wf.FlowTask) { (true, "") })
inspect(result.ok, content="true")import {
"mizchi/bitflow/workflow" @wf,
}
let adapter = @wf.WorkflowAdapter::new(
@wf.FsAdapter::memory_with({
"workflow.star":
#|workflow(name="ci")
#|node(id="root", depends_on=[])
#|task(id="root:build", node="root", cmd="build", needs=[])
#|entrypoint(targets=["root:build"]),
}),
@wf.CommandAdapter::none(),
)
let signatures : Map[String, String] = { "root": "sig-root" }
let writeback = @wf.writeback_task_cache_from_fs(
"workflow.star",
adapter,
signatures,
{},
["root:build"],
)
inspect(writeback.updated.length(), content="1")
let next_plan = @wf.plan_task_cache_from_fs(
"workflow.star",
adapter,
signatures,
writeback.entries,
)
inspect(next_plan.decisions[0].hit, content="true")fn fib(n : Int) -> Int64test {
inspect(fib(10), content="89")
}Workflow engine core with Starlark-subset parser, DAG execution, and cache planning primitives.
Dependencies