Skip to content

Build and deploy a workflow project

Initialize a Python workflow project, publish a workflow release, and deploy it to a development cluster.

Use workflow releases when the code under test should match the code that runners execute. A release packages a Python workflow project, records the discovered task identifiers, and lets release runners load the deployed code from a cluster.

This guide summarizes the build and deploy path. For the underlying model, see Workflow releases and Release lifecycle.

  • You have installed the Tilebox CLI.
  • TILEBOX_API_KEY is set in the shell where you run commands.
  • uv is installed and available on PATH.

Create a project directory and initialize it as a Tilebox workflow project.

Terminal window
mkdir my-workflow
cd my-workflow
tilebox workflow init --name "My Workflow"

The init command creates the Tilebox workflow, writes tilebox.workflow.toml, creates a minimal Python project with runner.py, adds the tilebox dependency, and runs uv sync. It aborts if tilebox.workflow.toml, pyproject.toml, runner.py, or uv.lock already exists in the current directory.

  • Directorymy-workflow/
    • pyproject.toml
    • uv.lock
    • tilebox.workflow.toml
    • runner.py

Create a logical cluster to deploy the workflow release to, enabling release runners.

Terminal window
tilebox cluster create "workflow-dev"
Output
Slug workflow-dev-<...>
Name workflow-dev
Deletable true

Add the returned cluster slug to tilebox.workflow.toml so deployment commands can refer to a logical environment instead of repeating cluster slugs.

tilebox.workflow.toml
[workflow]
slug = "my-workflow-<...>"
root = "."
runner = "runner:runner"
[build]
include = [
"tilebox.workflow.toml",
"pyproject.toml",
"uv.lock",
"runner.py",
]
[targets.dev]
clusters = ["workflow-dev-<...>"]

Create a new release of the workflow and publish it to Tilebox.

Terminal window
tilebox workflow publish-release

Publishing creates an immutable release. It does not change what any cluster runs until you deploy it.

Deploy the release to the development target.

Terminal window
tilebox workflow deploy-release --latest --target dev

Start a release runner in an environment you control.

Terminal window
tilebox runner start --cluster workflow-dev-9xK2mQ4pL8nR7s --debug

Submit a task that matches one of the identifiers discovered from the release.

Terminal window
tilebox job submit \
--name my-workflow-test \
--task my-workflow/HelloWorld \
--version v0.1 \
--cluster workflow-dev-9xK2mQ4pL8nR7s \
--input '{"name":"Tilebox"}' \
--wait
Job submitted: 019ef7a2-56b4-7a86-9c4d-52a1792b1e90

Inspect the result before making the next change.

Terminal window
tilebox job logs <JOB_ID>
tilebox job spans <JOB_ID>