Skip to Content
We are live but in Staging 🎉
API ReferenceBuildService

BuildService

Last validated: 2026-05-20

BuildService provides remote image-build orchestration and build status/log surfaces.

RPC Surface

RPCHTTP annotationPurpose
CreateBuildPOST /v1/ignite/buildsStart a build job
GetBuildGET /v1/ignite/builds/{build_id}Get build detail
ListBuildsGET /v1/ignite/buildsList builds with filters/pagination
StreamBuildLogsGET /v1/ignite/builds/{build_id}/logs/streamStream log output
CancelBuildPOST /v1/ignite/builds/{build_id}/cancelCancel build
SaveBuildSecretsPUT /v1/ignite/builds/secretsSave org-level build credentials/secrets
UploadBuildContextgRPC stream onlyUpload context in chunks and receive context_id

Build Sources

CreateBuildRequest supports one source at a time:

  1. context_id (from prior UploadBuildContext)
  2. inline zipped_code
  3. git_source (URL/ref/context directory)

Build Status Lifecycle

Build status enum includes:

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELLED

Important Notes

  1. build_tier field is currently deprecated/ignored by service logic and retained for compatibility.
  2. BuildService availability can be disabled at runtime startup when required build infrastructure initialization fails.
  3. SaveBuildSecrets covers build-specific credential storage; this is distinct from typed customer SecretService entries.

Operational Advice

  • Use UploadBuildContext for large sources.
  • Stream logs for long-running builds rather than polling only.
  • Capture build_id in automation pipelines and always query terminal status before promotion actions.

gRPC and HTTP Examples

Create build from git source (gRPC)

grpcurl \ -H "authorization: Bearer $TOKEN" \ -d '{ "name":"my-app", "registry":"ghcr.io", "repository":"acme/my-app", "tags":["latest"], "git_source":{ "url":"https://github.com/acme/my-app.git", "reference":"main", "context_dir":"." } }' \ rpc.dev.dodil.io:443 dodil.ignite.v1.BuildService/CreateBuild

Create build from git source (HTTP)

curl -sS -X POST \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://api.dev.dodil.io/v1/ignite/builds" \ -d '{ "name":"my-app", "registry":"ghcr.io", "repository":"acme/my-app", "tags":["latest"], "git_source":{ "url":"https://github.com/acme/my-app.git", "reference":"main" } }'

Get build status (gRPC)

grpcurl \ -H "authorization: Bearer $TOKEN" \ -d '{"build_id":"<build_id>"}' \ rpc.dev.dodil.io:443 dodil.ignite.v1.BuildService/GetBuild

List builds (HTTP)

curl -sS \ -H "Authorization: Bearer $TOKEN" \ "https://api.dev.dodil.io/v1/ignite/builds"

Stream build logs (gRPC)

grpcurl \ -H "authorization: Bearer $TOKEN" \ -d '{"build_id":"<build_id>","from_start":true}' \ rpc.dev.dodil.io:443 dodil.ignite.v1.BuildService/StreamBuildLogs

Save build secrets (HTTP)

curl -sS -X PUT \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ "https://api.dev.dodil.io/v1/ignite/builds/secrets" \ -d '{ "registry_credentials":{ "ghcr.io":"{\"username\":\"bot\",\"password\":\"<token>\"}" }, "build_secrets":{ "PIP_INDEX_URL":"https://pypi.example.internal/simple" } }'

Upload build context (streaming note)

UploadBuildContext is client-streaming and usually easier through CLI (dodil ignite build upload) or SDK wrappers than raw shell tooling.