#12033: feat(docker): add linux/riscv64 image to Docker release
docker
size: S
Cluster:
Docker Enhancements and Fixes
## Summary
Adds `linux/riscv64` as a third platform to the Docker release workflow, alongside the existing `linux/amd64` and `linux/arm64`.
- **Dockerfile**: Skip Bun installation on riscv64 (no binary available); all Docker build steps already use pnpm
- **Workflow**: Add QEMU-emulated `build-riscv64` job with `continue-on-error: true` so failures never block releases
- **Manifest**: `create-manifest` publishes amd64+arm64 immediately; `update-manifest` adds riscv64 after it completes (guarded by digest output)
- **Tag cleanup**: Per-arch jobs now only push suffixed tags (`-amd64`, `-arm64`, `-riscv64`); only the manifest jobs own the unsuffixed shared tags, eliminating a pre-existing race where the last-finishing arch job briefly overwrote them
Closes #11977
## Details
The `node:22-bookworm` base image already has riscv64 variants on Docker Hub. Native dependencies (`sharp`, `esbuild`) ship riscv64 prebuilts. Optional peer dependencies (`@napi-rs/canvas`, `node-llama-cpp`) are not installed in the Docker image.
Bun has no riscv64 binary, but is not used during Docker builds — all build scripts use pnpm and `OPENCLAW_PREFER_PNPM=1` is already set. The Dockerfile comment "Bun may fail on ARM/Synology architectures" already anticipates this pattern.
## Test plan
- [ ] Push to fork, verify riscv64 build job triggers and completes under QEMU
- [ ] Verify amd64 and arm64 builds are unaffected
- [ ] Verify `create-manifest` publishes amd64+arm64 without waiting for riscv64
- [ ] Verify `update-manifest` adds riscv64 to manifest only when build succeeds
- [ ] Verify `update-manifest` is skipped when riscv64 build fails (digest is empty)
- [ ] Pull riscv64 image and run `node openclaw.mjs --version`
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR extends the Docker release GitHub Actions workflow to build and publish a third architecture (`linux/riscv64`) alongside the existing `amd64` and `arm64` images. It adds a QEMU-emulated riscv64 build job (non-blocking via `continue-on-error`) and splits manifest publishing into two stages: an initial manifest for `amd64+arm64`, followed by an optional update step that adds `riscv64` when a digest is produced.
It also changes per-arch build jobs to only push architecture-suffixed tags (e.g. `-amd64`/`-arm64`/`-riscv64`), leaving the unsuffixed shared tags to the manifest jobs to avoid tag races.
<h3>Confidence Score: 4/5</h3>
- This PR is largely safe to merge, with one small Dockerfile environment consistency issue to address.
- Workflow changes are straightforward (new non-blocking riscv64 build and two-phase manifest publishing) and don’t alter runtime code. The only concrete issue found is the riscv64 path export for Bun even when Bun isn’t installed, which can lead to a misleading environment inside the image.
- Dockerfile
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#4574: - Fix Docker arm64 image crash (`exec format error`) caused by tag ...
by Abhijrathod · 2026-01-30
79.8%
#11818: fix(docker): resolve build hang by using in-place ownership and opt...
by dilly · 2026-02-08
78.4%
#22491: Use multi-stage docker build to reduce image size from 4.72GB -> 2....
by mm-zacharydavison · 2026-02-21
76.1%
#8362: Add Homebrew-based Docker image
by bugparty · 2026-02-03
75.9%
#13953: feat(docker): add .env template and improve Dockerfile
by n24q02m · 2026-02-11
75.6%
#23313: feat(docker): add optional build-arg OPENCLAW_INSTALL_DOCKER_CLI to...
by zhuxuwei88-bot · 2026-02-22
75.3%
#3324: Update Dockerfile to support Homebrew and Go for skill execution
by nnnet · 2026-01-28
75.1%
#9999: Docker: fix token mismatch and add dev setup workflow
by benclarkeio · 2026-02-06
75.0%
#9190: feat(docker): Add autonomous container self-restart and runtime pac...
by alexdredmon · 2026-02-05
75.0%
#4116: Update Dockerfile to node 24
by kotov228 · 2026-01-29
75.0%