Skip to Content
We are live but in Staging 🎉

Builds — API Reference

Package: dodil.ignite.v1 · Service: BuildService

These RPCs drive a remote container image build with Kaniko  and push the result to the platform’s org-scoped registry. A build takes a source (an uploaded context, an inline zip, or a git repo), runs your Dockerfile, and produces one or more image refs you can run in image-mode Compute. Builds are asynchronousCreateBuild returns immediately with a buildId; follow progress with StreamBuildLogs and read the final result with GetBuild.

gRPC reaches every method at dodil.ignite.v1.BuildService/<Method> on $IGNITE_GRPC; the HTTP gateway mirrors each one. See Conventions → Using gRPC for grpcurl setup. gRPC requests use the proto field names (snake_case); HTTP uses pbjson (camelCase). Responses render camelCase. int64/uint64 fields (timeoutSecs, createdAtMs, …) serialize as JSON strings.

RPCHTTPstreaming
CreateBuildPOST /v1/ignite/buildsunary
GetBuildGET /v1/ignite/builds/{build_id}unary
ListBuildsGET /v1/ignite/buildsunary
StreamBuildLogsGET /v1/ignite/builds/{build_id}/logs/streamserver-stream
CancelBuildPOST /v1/ignite/builds/{build_id}/cancelunary

BuildStatus (used throughout) is one of: BUILD_STATUS_PENDING, BUILD_STATUS_RUNNING, BUILD_STATUS_SUCCEEDED, BUILD_STATUS_FAILED, BUILD_STATUS_CANCELLED.

CreateBuild

Starts a build. Exactly one source must be set:

  • context_id — id from a prior UploadBuildContext; use this for contexts too large for the inline path.
  • zipped_code — an inline tar.gz/zip of the build context (bytes). Must be under 4 MB; for anything larger, upload a context first.
  • git_source — clone and build from a git repo.

Request

Field (proto)HTTP (pbjson)TypeNotes
namenamestringRequired. Build / image name.
dockerfiledockerfilestringPath to the Dockerfile, relative to the context root. Default Dockerfile.
tagstagsrepeated stringImage tags. Defaults to ["latest"].
build_argsbuildArgsmap<string, string>Docker build args (ARG).
no_cachenoCacheboolDisable layer caching for this build.
timeout_secstimeoutSecsuint64Build timeout in seconds. 0 = server default. JSON string.
platformplatformstringTarget platform, e.g. linux/amd64.
context_idcontextIdstringsource. Id from UploadBuildContext.
zipped_codezippedCodebytessource. Inline tar.gz/zip, base64 over JSON. Under 4 MB.
git_sourcegitSourceGitSourcesource. Build from a git repo.

GitSource:

Field (proto)HTTP (pbjson)TypeNotes
urlurlstringRepo URL.
referencereferencestringBranch, tag, or commit SHA. Default main.
context_dircontextDirstringSubdirectory within the repo to build from. Optional.

For private repos, store a PAT once with SaveBuildSecrets — it is auto-applied to git_source builds.

curl -sS -X POST "https://api.dev.dodil.io/v1/ignite/builds" \ -H "Authorization: Bearer $DODIL_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "my-data-processor", "dockerfile": "Dockerfile", "tags": ["v1", "latest"], "buildArgs": { "NODE_ENV": "production" }, "noCache": false, "timeoutSecs": "600", "platform": "linux/amd64", "gitSource": { "url": "https://github.com/acme-corp/data-processor.git", "reference": "main", "contextDir": "services/processor" } }'

Response

{ "buildId": "bld_01HZX9ABCD", "status": "BUILD_STATUS_PENDING" }

Next: tail progress with StreamBuildLogs, then read the result with GetBuild.

GetBuild

Fetches the full Build record by id — including final status, the pushed imageRefs, and metrics.

Request

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

Response

GetBuildResponse { Build build = 1; } — the full Build.

{ "build": { "id": "bld_01HZX9ABCD", "name": "my-data-processor", "organizationId": "acme-corp", "status": "BUILD_STATUS_SUCCEEDED", "dockerfile": "Dockerfile", "imageRefs": [ "registry.example/acme-corp/my-data-processor:v1", "registry.example/acme-corp/my-data-processor:latest" ], "buildArgs": { "NODE_ENV": "production", "NPM_TOKEN": "***" }, "createdAtMs": "1748390400000", "startedAtMs": "1748390402000", "completedAtMs": "1748390461000", "error": "", "metrics": { "durationMs": "59000", "contextSizeBytes": "2480000", "imageSizeBytes": "184320000", "layerCount": 11, "cacheUsed": true } } }

The Build record

Field (proto)HTTP (pbjson)TypeNotes
ididstringBuild id.
namenamestringBuild / image name.
organization_idorganizationIdstringOwning organization.
statusstatusBuildStatusCurrent state.
dockerfiledockerfilestringDockerfile path used.
image_refsimageRefsrepeated stringFull registry/org/name:tag refs the build pushed.
build_argsbuildArgsmap<string, string>Build args; secret values are redacted to ***.
created_at_mscreatedAtMsint64Submission time, ms epoch. JSON string.
started_at_msstartedAtMsint64Build start, ms epoch. JSON string.
completed_at_mscompletedAtMsint64Build end, ms epoch. JSON string.
errorerrorstringFailure reason; empty on success.
metricsmetricsBuildMetricsBuild statistics.

BuildMetrics:

Field (proto)HTTP (pbjson)TypeNotes
duration_msdurationMsint64Wall-clock build duration. JSON string.
context_size_bytescontextSizeBytesint64Size of the build context. JSON string.
image_size_bytesimageSizeBytesint64Size of the produced image. JSON string.
layer_countlayerCountuint32Number of image layers.
cache_usedcacheUsedboolWhether cached layers were reused.

ListBuilds

Lists recent builds for the calling organization, newest first.

Request

Field (proto)HTTP (pbjson)TypeNotes
limitlimitint32Max results. Default 20, max 100.
status_filterstatusFilterBuildStatusOnly return builds in this state.
curl -sS "https://api.dev.dodil.io/v1/ignite/builds?limit=50&statusFilter=BUILD_STATUS_SUCCEEDED" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "builds": [ { "id": "bld_01HZX9ABCD", "name": "my-data-processor", "status": "BUILD_STATUS_SUCCEEDED", "imageRefs": ["registry.example/acme-corp/my-data-processor:v1"], "createdAtMs": "1748390400000" } ] }

Each entry is a full Build.

StreamBuildLogs

Server-streaming build log — each message is a chunk of raw build output. The build log is persisted, so you can attach at any time: set from_start to true to replay the full log from the beginning, or false to tail from the current position. The stream ends when the build reaches a terminal BuildStatus.

Request

Field (proto)HTTP (pbjson)TypeNotes
build_idbuildIdstringPath parameter {build_id}.
from_startfromStartbooltrue replays the full persisted log; false tails from now.
curl -sS -N "https://api.dev.dodil.io/v1/ignite/builds/bld_01HZX9ABCD/logs/stream?fromStart=true" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

Server-stream of BuildLogChunk messages, one per chunk of build output, until the build finishes:

message BuildLogChunk { bytes data = 1; // raw log output (base64 over JSON) int64 timestamp_ms = 2; // chunk timestamp, ms epoch }

Over HTTP each chunk arrives as a newline-delimited JSON object; data is base64 in JSON and raw bytes over gRPC. After the stream ends, call GetBuild for the final status, imageRefs, and metrics.

CancelBuild

Requests cancellation of a pending or running build. Terminal builds are unaffected.

Request

curl -sS -X POST "https://api.dev.dodil.io/v1/ignite/builds/bld_01HZX9ABCD/cancel" \ -H "Authorization: Bearer $DODIL_TOKEN"

Response

{ "status": "BUILD_STATUS_CANCELLED" }

See also

  • Builds — overview
  • Build concepts — sources, caching, image refs
  • Compute — image-mode runs the built image
  • Secrets — registry and git credentials applied to builds
  • Conventions — transport, auth, wire format, streaming