Skip to content

ci(images): build OpenClaw base image on native runners#7520

Merged
apurvvkumaria merged 4 commits into
NVIDIA:mainfrom
senthilr-nv:codex/native-openclaw-base-builds
Jul 25, 2026
Merged

ci(images): build OpenClaw base image on native runners#7520
apurvvkumaria merged 4 commits into
NVIDIA:mainfrom
senthilr-nv:codex/native-openclaw-base-builds

Conversation

@senthilr-nv

@senthilr-nv senthilr-nv commented Jul 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

OpenClaw base-image publication runs its full Perl regression suite for arm64 under QEMU, which can exceed the 90-minute job timeout. This change builds each platform on a native GitHub-hosted runner and publishes user-facing tags only after both immutable digests succeed.

Changes

  • Build the OpenClaw amd64 and arm64 images on native runners with separate 60-minute timeouts and cache namespaces. The GHCR publisher needs the complete Perl suite from fix(security): update sandbox Perl runtime #7504; increasing the QEMU timeout does not remove the emulation bottleneck.
  • Transfer immutable platform digests to a 10-minute manifest job. The manifest job preserves the existing required-check name and updates release, latest, and SHA tags only after both builds pass.
  • Keep the Hermes and Deep Agents Code QEMU publisher and its 90-minute timeout unchanged.
  • Update the base-image workflow, Perl remediation, build-argument, and publication-gate contracts for the native and atomic publication behavior.

Type of Change

  • Code change (feature, bug fix, or refactor)
  • Code change with doc updates
  • Doc only (prose changes, no code sample modifications)
  • Doc only (includes code sample changes)

Quality Gates

  • Tests added or updated for changed behavior
  • Existing tests cover changed behavior — justification:
  • Tests not applicable — justification:
  • Docs updated for user-facing behavior changes
  • Docs not applicable — justification: This changes the internal image publication workflow. It does not change a CLI, configuration, API, policy, documented behavior, or image content.
  • Sensitive paths changed (security, policy, credentials, preflight, onboarding, inference, runner, sandbox, or messaging)
  • Sensitive-path review completed or maintainer-approved waiver recorded — reviewer/approval link/justification:
  • Non-success, skipped, or missing CI check accepted by maintainer — check name, approval link, and follow-up issue:

Documentation Writer Review

  • Documentation writer subagent reviewed the completed changes
  • Result: no-docs-needed
  • Evidence: Internal base-image publication now builds OpenClaw on native amd64 and arm64 runners and publishes the manifest after both builds pass. No CLI, configuration, API, policy, documented behavior, or image content changes.
  • Agent: Codex Desktop documentation writer subagent

DGX Station Hardware Evidence

  • Tested on DGX Station
  • Tested commit: Not applicable
  • Station profile/scenario: Not applicable
  • Result: Not applicable
  • Supporting evidence: Not applicable

Verification

  • PR description includes a Signed-off-by: line and every commit appears as Verified in GitHub
  • Normal pre-commit, commit-msg, and pre-push hooks passed, or npm run check:diff passed when hooks were skipped or unavailable
  • Targeted behavior tests pass for the current change set, or tests are marked not applicable above — command/result or justification: Integration workflow, Perl remediation, and build-argument tests passed (18/18). The E2E-support base-image publication tests passed (33/33).
  • Applicable broad gate passed — npm test for broad runtime/test-harness changes; npm run check for repo-wide validation/coverage changes — command/result: Not applicable; focused workflow contracts cover this change.
  • Quality Gates section completed with required justifications or waivers
  • No secrets, API keys, or credentials committed
  • npm run docs builds without warnings (doc changes only)
  • Doc pages follow the style guide (doc changes only)
  • New doc pages include SPDX header and frontmatter (new pages only)

Signed-off-by: Senthil Ravichandran senthilr@nvidia.com

Summary by CodeRabbit

  • New Features
    • OpenClaw sandbox base images are now built per-platform on native AMD64 and ARM64 runners, published via validated immutable digests, and assembled into multi-platform manifests before releasing user-facing tags.
  • Bug Fixes
    • Added stricter validation for the OpenClaw version input and strengthened checks to ensure only expected platforms and well-formed digest/manifest data are published.
  • Documentation
    • Updated multi-architecture build comments to reflect consistent behavior across AMD64/ARM64 and improved clarity on test parallelization.
  • Tests
    • Expanded workflow and dependency review coverage for per-platform publishing and manifest creation behavior.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@senthilr-nv senthilr-nv added the area: security Security controls, permissions, secrets, or hardening label Jul 25, 2026
@senthilr-nv senthilr-nv self-assigned this Jul 25, 2026
@coderabbitai

coderabbitai Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

OpenClaw base-image publishing now builds amd64 and arm64 images on native runners, stores immutable digests, and creates a validated multi-platform manifest. Shared publishing excludes OpenClaw, while workflow and remediation tests follow the new job structure.

Changes

OpenClaw publishing workflow

Layer / File(s) Summary
Native platform build path
.github/workflows/base-image.yaml, test/dcode-base-image-workflow.test.ts
Adds native amd64 and arm64 OpenClaw builds with version and digest validation, removes OpenClaw from the shared build matrix, and expands publisher discovery, input validation, and workflow assertions.
Digest manifest assembly
.github/workflows/base-image.yaml
Downloads exactly two platform digests, creates multi-platform tags, and verifies that the published manifest contains amd64 and arm64.
Workflow contract and remediation checks
test/dcode-base-image-workflow.test.ts, test/openclaw-dependency-review.test.ts, test/perl-critical-cve-remediation.test.ts, Dockerfile.base
Updates job wiring and remediation assertions for native OpenClaw publishing, and revises Perl multi-architecture build documentation.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
  participant NativeBuild as build-openclaw-platforms
  participant Artifacts as Digest artifacts
  participant ManifestJob as build-and-push-openclaw
  participant Registry as Container registry
  NativeBuild->>Registry: Push amd64 and arm64 images by digest
  NativeBuild->>Artifacts: Upload platform digests
  Artifacts->>ManifestJob: Provide exactly two digests
  ManifestJob->>Registry: Create and push multi-platform manifest
  ManifestJob->>Registry: Verify amd64 and arm64 platforms
Loading

Possibly related PRs

Suggested labels: integration: openclaw, area: ci, bug-fix

Suggested reviewers: apurvvkumaria, prekshivyas, cv

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: OpenClaw base images are built on native runners.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@apurvvkumaria
apurvvkumaria enabled auto-merge (squash) July 25, 2026 06:29

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (2)
.github/workflows/base-image.yaml (1)

86-87: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Consider persist-credentials: false on the new checkout.

This job only needs the tree to build; the token isn't used afterward. Setting it avoids leaving credentials in .git/config inside the build context (context: .).

🔒 Proposed hardening
       - name: Checkout
         uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
+        with:
+          persist-credentials: false
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/base-image.yaml around lines 86 - 87, Update the Checkout
step using actions/checkout to set persist-credentials to false, ensuring the
build context does not retain the checkout token in .git/config.

Source: Linters/SAST tools

test/dcode-base-image-workflow.test.ts (1)

330-417: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider splitting this into focused cases.

One it now covers matrix topology, guard ordering, cache namespacing, digest export/upload, and manifest-job wiring; a failure anywhere reports as one opaque case. Splitting per claim (platform matrix / per-arch build contract / manifest assembly) would keep each assertion diagnosable.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@test/dcode-base-image-workflow.test.ts` around lines 330 - 417, Split the
single test case around “publishes OpenClaw atomically from native architecture
runners” into focused cases for platform matrix topology, per-architecture build
and digest contracts, and manifest assembly wiring. Move each related assertion
group into its corresponding test while preserving the existing expectations and
shared setup.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@test/dcode-base-image-workflow.test.ts`:
- Around line 90-120: Update validatePublishers and its callers so the
publishers returned by openClawPlatformPublishers are included in trigger-path
and copiedInputs validation. Preserve platform-specific differences by relaxing
only expectations that do not apply to native OpenClaw builds, while retaining
coverage for Dockerfile.base paths and copied production inputs; do not rely
solely on the separate structural assertions.

---

Nitpick comments:
In @.github/workflows/base-image.yaml:
- Around line 86-87: Update the Checkout step using actions/checkout to set
persist-credentials to false, ensuring the build context does not retain the
checkout token in .git/config.

In `@test/dcode-base-image-workflow.test.ts`:
- Around line 330-417: Split the single test case around “publishes OpenClaw
atomically from native architecture runners” into focused cases for platform
matrix topology, per-architecture build and digest contracts, and manifest
assembly wiring. Move each related assertion group into its corresponding test
while preserving the existing expectations and shared setup.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7fe2938e-c946-4ff3-8de2-1425fc5781a1

📥 Commits

Reviewing files that changed from the base of the PR and between 1f40cd3 and 5f0bbb8.

📒 Files selected for processing (5)
  • .github/workflows/base-image.yaml
  • Dockerfile.base
  • test/dcode-base-image-workflow.test.ts
  • test/openclaw-dependency-review.test.ts
  • test/perl-critical-cve-remediation.test.ts

Comment thread test/dcode-base-image-workflow.test.ts
@github-actions

github-actions Bot commented Jul 25, 2026

Copy link
Copy Markdown
Contributor

PR Review Advisor — Informational

Advisor assessment: Informational / low confidence
Next action: Review the warnings below.
Findings: 0 blockers · 1 warning · 0 suggestions
Status: Partial review preserved 1 canonical finding(s) before the advisor stopped.

Model lanes

  • GPT-5.6 Terra (primary): Failed after a partial review · low confidence · 0 blockers · 1 warning · 0 suggestions
  • Nemotron 3 Ultra (second opinion): Completed · high confidence · 0 blockers · 0 warnings · 0 suggestions

Nemotron output stays in workflow artifacts and does not change the assessment above.

E2E guidance

Advisory only. E2E / PR Gate selects and runs jobs independently.

Recommended E2E: cloud-onboard

1 warning · 0 suggestions

Warnings

Warnings do not block.

PRA-1 Warning — Prove the native Configure result before retaining the Perl probe override

  • Location: Dockerfile.base:80
  • Category: correctness
  • Problem: The Dockerfile retains `-Dd_syscallproto=define` and changes its removal condition to native amd64 and arm64 Configure probes. The changed tests only check the comment and workflow shape; they do not run Configure without the override or record its result.
  • Impact: A future change can remove or retain the override without evidence that both supported native builds use the required libc declaration. That can reintroduce the Perl build failure or preserve an obsolete workaround.
  • Recommendation: Add checked-in native-platform probe coverage that runs Perl Configure without `-Dd_syscallproto=define` and asserts `d_syscallproto=define` on amd64 and arm64. Keep the override until that evidence is available.
  • Verification: Inspect the Perl regression tests and base-image workflow for a native, unforced Configure probe on both `linux/amd64` and `linux/arm64`.
  • Test coverage: A native amd64 and arm64 regression test that configures the pinned Perl release without the override and asserts `d_syscallproto=define`.
  • Evidence: Dockerfile.base:78-82 retains `-Dd_syscallproto=define` and states that removal requires native Configure probe results on amd64 and arm64. test/perl-critical-cve-remediation.test.ts asserts the revised comment and native workflow strings, but does not execute or assert an unforced Configure result.

Workflow run details

This automated review informs maintainers. Warnings and suggestions do not require a response. A maintainer decides whether to merge.

Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
Signed-off-by: Senthil Ravichandran <senthilr@nvidia.com>
@coderabbitai coderabbitai Bot mentioned this pull request Jul 25, 2026
23 tasks
@apurvvkumaria
apurvvkumaria merged commit 64df93a into NVIDIA:main Jul 25, 2026
98 of 103 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: security Security controls, permissions, secrets, or hardening

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants