OpenClaw EnterpriseDOCSGitHub

Publish the OCE Helm chart

The protected Enterprise Containers workflow optionally publishes the OpenClaw Control Plane (OCC) chart to public GHCR at oci://ghcr.io/openclaw/charts/openclaw-enterprise. It also gives the controller and runtime images a tag matching the chart. The existing sha-<source-sha> tags remain available. Deploy with the digest references recorded in the chart and publication receipt.

Choose one release version

Advance the SemVer version in root package.json and set both version and appVersion in deploy/helm/openclaw-enterprise/Chart.yaml to the same value. Do this for each chart release, including releases with image changes. Image-only publication does not require a new chart version. OCE is evolving quickly; one version gives operators a chart and image pair tested from one source commit without an independent chart compatibility matrix. The shared tag identifies the release, while the recorded digests identify the exact bytes.

Review and merge the version change to main. Wait for that exact main-push CI run to pass, including CI Required. Follow package setup and bootstrap once. Bootstrap creates a nondeployable chart marker as well as image markers; confirm all three packages are public and grant this repository Actions access. Then dispatch Enterprise Containers on main with its full source_sha, matching ci_run_id, and publish: true and publish_chart: true (the latter defaults to false).

The image job publishes and verifies images first. A separate chart job consumes that run/attempt's image receipt, checks version tags against its digests, then packages and pushes the chart. Both jobs use the protected publication environment. The workflow holds the shared publication lock across both jobs, including preparation, so overlapping runs cannot replace a pending chart job. The chart job rejects an existing version whose packaged files differ. Its chart-publication-<run-id>-<attempt> artifact records the chart manifest digest, source SHA, and both image digests. The older container-publication receipt retains its image-only format. If a step fails, inspect registry digests before starting a new full dispatch for the same source; existing tags with different bytes are never replaced. Rerunning only a failed chart job is unsupported: its new attempt has no matching image receipt. There is no dedicated chart recovery workflow. A later source commit requires a new OCE version for chart publication.

A chart failure fails the combined run, while the image job and its verified images remain successful. Use the separate job results and final run summary to distinguish these outcomes. Image-only publication never calls the chart publisher.

Treat release version tags as single-writer state. Limit package-write access for the chart and both images to this repository's reviewed publication workflows and trusted package administrators; do not retag them during publication. The workflow concurrency group serializes participating jobs only. The receipt records the chart's immutable manifest digest after verification, but an independent writer changing the version tag between the pull and digest lookup would break that binding. Coordinated external writers need a registry-supported conditional write or an equivalent shared lock before using this flow.

Pull and install

Public GHCR chart pulls do not require a workstation login. Select the version from the completed publication receipt:

bash
export OCE_VERSION='<published-version>'helm pull oci://ghcr.io/openclaw/charts/openclaw-enterprise \  --version "$OCE_VERSION" --destination "${OCC_INPUT_DIRECTORY:?select a protected directory}"chart="$OCC_INPUT_DIRECTORY/openclaw-enterprise-$OCE_VERSION.tgz"helm show chart "$chart"helm show values "$chart"

Compare the digest printed by helm pull with the chart manifest digest in the publication receipt. Check the local chart's openclaw.dev/source-revision, openclaw.dev/controller-image, and openclaw.dev/runtime-image annotations against the receipt. Set images.controller in your protected Helm values to the controller digest and set the Installation's drivers.compute.configuration.images.gateway and agent to the runtime digest. The packaged controller default is pinned, but operator values take precedence. The production example values contain a placeholder image, so replace it before installation.

Prepare the other operator-owned values, database, Secrets, routing, and bootstrap volume as described in the production installation guide. Public GHCR image pulls need no node pull Secret. Private mirrors still need node pull credentials configured by the operator. Use the matching CLI and the reviewed local archive for the first install and handoff:

bash
INSTALL_RECEIPT_DIRECTORY="$OCC_INPUT_DIRECTORY/install-receipt"occ installation install --release oce --chart "$chart" \  --kubeconfig "$KUBECONFIG_FILE" --context "$CONTEXT" --kube-namespace openclaw-system \  --values "$OCC_INPUT_DIRECTORY/values.yaml" --receipt "$INSTALL_RECEIPT_DIRECTORY"

If the response is lost or Helm refuses the release name, stop; do not rerun or switch to an upgrade. Resume the original installation.

This release packages the chart and images. It does not distribute the repository's bootstrap helper or Installation examples, and does not complete a fresh k3d trial without a checkout.

Search documentation