Skip to main content
Create and update tasks and services at runtime using the CLI. When Ona explores a new repository, it can:
  • Discover package.json scripts and expose them as tasks
  • Find services in a monorepo and create start commands for each
  • Generate test tasks for different modules it finds
  • Adapt the environment to match the project structure

Creating tasks and services dynamically

Use the CLI to pipe configuration directly:
echo '{"tasks": {"update_deps": {"name": "Update dependencies", "command": "npm update"}}}' | ona automations update -
The - signals reading from stdin. Task and service IDs can only contain alphanumeric characters, underscores, and hyphens (1-128 characters).

Example uses

Expose package.json scripts as tasks:
jq -r '.scripts | to_entries[] | {(.key | gsub("[^a-zA-Z0-9_-]"; "_")): {"name": .key, "command": .value}}' package.json |
jq -s 'add | {"tasks": .}' |
ona automations update -
Create services for monorepo components:
find ./components -type d -maxdepth 1 -mindepth 1 |
jq -R '{(. | gsub("[^a-zA-Z0-9_-]"; "_")): {"name": "Start " + ., "command": "cd " + . + " && go run ."}}' |
jq -s 'add | {"services": .}' |
ona automations update -
Load configuration from a remote source:
curl https://example.com/automations.json | ona automations update -
Only download configuration from sources you trust. Verify integrity before applying.

Control from outside environments

Manage tasks and services from outside an environment using the CLI on your local machine or in external pipelines.

Example: create, run task, clean up

# Create environment
ENV_ID=$(ona environment create https://github.com/your-repo/project --dont-wait --class-id <your-env-class-id>)

# Run a task
TASK_ID=$(ona automations task start build-and-test --environment-id $ENV_ID)

# Stream logs
ona automations task logs $TASK_ID --environment-id $ENV_ID

# Check result and clean up
TASK_STATUS=$(ona automations task get $TASK_ID --environment-id $ENV_ID -o json | jq -r .status)

if [ "$TASK_STATUS" = "succeeded" ]; then
    ona environment delete $ENV_ID
else
    echo "Task failed. Environment left for inspection."
fi