Workflow: Author, Test, and Publish an App
Last validated: 2026-05-20
Goal
Create a tenant app, iterate in draft, publish a version, and validate invocation.
Inputs
- Org ID or org name
- Valid token
- API endpoint
- App source code
Python Path (CLI-first)
export ORG=my-org
# 1) Create app metadata
dodil ignite app create hello --org "$ORG" --description "hello app"
# 2) Save draft code
dodil ignite draft save "$ORG:hello" --code ./hello.py --runtime python
# 3) Test draft
dodil ignite draft test "$ORG:hello" --payload '{"name":"world"}'
# 4) Publish
dodil ignite draft publish "$ORG:hello"
# 5) Invoke published app
dodil ignite invoke "$ORG:hello" --payload '{"name":"world"}'Rust Path (CLI-first)
export ORG=my-org
dodil ignite app create hello-rs --org "$ORG"
dodil ignite draft save "$ORG:hello-rs" --code ./src --runtime rust --rust-target native
dodil ignite draft compile "$ORG:hello-rs" --follow
dodil ignite draft test "$ORG:hello-rs" --payload '{"name":"world"}'
dodil ignite draft publish "$ORG:hello-rs"
dodil ignite invoke "$ORG:hello-rs" --payload '{"name":"world"}'Expected Outcomes
- App exists and returns published invocation output
- Version list shows at least one published version
- App state indicates deployed/servable lifecycle posture
Troubleshooting
- If compile fails, run
dodil ignite draft compile-logs <id>and inspect build/compile output. - If publish succeeds but invoke fails, check app state and retry after readiness stabilization.
- If org resolution fails, pass explicit
org:appformat instead of relying on config fallback.