Skip to content

Fixes arm64 docker build failure#5408

Merged
myurasov-nv merged 1 commit into
isaac-sim:developfrom
myurasov-nv:my-postmerge-ci-fix-2
Apr 27, 2026
Merged

Fixes arm64 docker build failure#5408
myurasov-nv merged 1 commit into
isaac-sim:developfrom
myurasov-nv:my-postmerge-ci-fix-2

Conversation

@myurasov-nv

@myurasov-nv myurasov-nv commented Apr 27, 2026

Copy link
Copy Markdown
Member

Description

Post-merge CI on develop has been failing on arm64. The chain is: isaaclab_teleop pulls isaacteleop[retargeters], which transitively pins nlopt==2.6.2, and nlopt 2.6.2 has no aarch64 wheel.

Fix: add swig to apt deps and pre-install nlopt 2.6.2 with --no-build-isolation on arm64 before isaaclab.sh --install runs. The later install sees nlopt as already satisfied. Same change applied to Dockerfile.base and Dockerfile.curobo.

Verified locally in a QEMU arm64 python:3.12-slim container running the same install path.

Type of change

  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • I have made corresponding changes to the documentation
  • My changes generate no new warnings
  • I have added tests that prove my fix is effective or that my feature works
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

@github-actions github-actions Bot added bug Something isn't working infrastructure labels Apr 27, 2026
@greptile-apps

greptile-apps Bot commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes the arm64 Docker build failure caused by nlopt==2.6.2 (transitively pinned by isaacteleop[retargeters]) having no aarch64 wheel. The fix adds swig to the existing arm64-conditional apt block and pre-installs nlopt==2.6.2 via --no-build-isolation (so the system numpy is visible to nlopt's cmake build) before isaaclab.sh --install runs. Both Dockerfile.base and Dockerfile.curobo receive the same treatment, and the approach is consistent with existing arm64-conditional patterns in the files.

Confidence Score: 5/5

This PR is safe to merge; changes are arm64-conditional, well-documented, and consistent with existing Dockerfile patterns.

No P0 or P1 issues found. The fix is narrowly scoped (arm64-only guards), correctly ordered (swig available before nlopt build, nlopt pre-installed before isaaclab.sh --install), and does not affect x86_64 builds. The hard-coded nlopt==2.6.2 version is intentional and matches the transitive pin.

No files require special attention.

Important Files Changed

Filename Overview
docker/Dockerfile.base Adds arm64-conditional swig install and a pre-install step for nlopt==2.6.2 with --no-build-isolation to unblock arm64 CI builds; changes are well-scoped and consistent with existing arm64 conditional patterns.
docker/Dockerfile.curobo Mirrors the same arm64 swig + nlopt pre-install fix from Dockerfile.base; correctly placed after pip is reinstalled and before isaaclab.sh --install.

Sequence Diagram

sequenceDiagram
    participant Docker as Docker Build
    participant apt as apt-get
    participant pip as pip (isaaclab.sh -p)
    participant install as isaaclab.sh --install

    Docker->>apt: Install base deps (cmake, build-essential)
    alt arm64
        Docker->>apt: Install arm64-only deps (GL/X11 headers + swig)
        Docker->>pip: pip install --no-build-isolation nlopt==2.6.2
        Note over pip: Builds nlopt from source using system swig+numpy
    end
    Docker->>install: isaaclab.sh --install
    Note over install: nlopt==2.6.2 already satisfied on arm64 - skips rebuild
    install->>Docker: Success on both x86_64 and arm64
Loading

Reviews (2): Last reviewed commit: "Fix arm64 docker build by pre-installing..." | Re-trigger Greptile

Comment thread docker/Dockerfile.base Outdated
Comment thread docker/Dockerfile.curobo Outdated
@myurasov-nv myurasov-nv force-pushed the my-postmerge-ci-fix-2 branch from f6fe8d4 to 8a94e71 Compare April 27, 2026 13:51
@myurasov-nv myurasov-nv force-pushed the my-postmerge-ci-fix-2 branch from 8a94e71 to cd344e3 Compare April 27, 2026 13:53
@myurasov-nv

Copy link
Copy Markdown
Member Author

@greptile-apps

@myurasov-nv myurasov-nv requested a review from kellyguo11 April 27, 2026 13:55
@myurasov-nv myurasov-nv merged commit 544f7b1 into isaac-sim:develop Apr 27, 2026
30 checks passed
myurasov-nv added a commit that referenced this pull request Apr 27, 2026
# Description

Follow-up to #5408. After that merged, the arm64 build still fails on
the nlopt step with BackendUnavailable: Cannot import
'setuptools.build_meta'. With --no-build-isolation, pip uses the host
Python to resolve the PEP 517 build backend, and IsaacSim's bundled
arm64 Python does not expose setuptools.build_meta in that scope.

Fix: pre-install setuptools, wheel, and numpy in IsaacSim's Python
before the nlopt install step. Same change applied to Dockerfile.base
and Dockerfile.curobo.

Verified locally in a QEMU arm64 python:3.12-slim container: reproduced
the BackendUnavailable error after pip uninstall setuptools wheel, then
confirmed the install succeeds when those packages are pre-installed.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks with ./isaaclab.sh --format
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's config/extension.toml file
- [x] I have added my name to the CONTRIBUTORS.md or my name already
exists there
mmichelis pushed a commit to mmichelis/IsaacLab that referenced this pull request Apr 29, 2026
# Description

Post-merge CI on develop has been failing on arm64. The chain is:
isaaclab_teleop pulls isaacteleop[retargeters], which transitively pins
nlopt==2.6.2, and nlopt 2.6.2 has no aarch64 wheel.

Fix: add swig to apt deps and pre-install nlopt 2.6.2 with
--no-build-isolation on arm64 before isaaclab.sh --install runs. The
later install sees nlopt as already satisfied. Same change applied to
Dockerfile.base and Dockerfile.curobo.

Verified locally in a QEMU arm64 python:3.12-slim container running the
same install path.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks with ./isaaclab.sh --format
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's config/extension.toml file
- [x] I have added my name to the CONTRIBUTORS.md or my name already
exists there
mmichelis pushed a commit to mmichelis/IsaacLab that referenced this pull request Apr 29, 2026
# Description

Follow-up to isaac-sim#5408. After that merged, the arm64 build still fails on
the nlopt step with BackendUnavailable: Cannot import
'setuptools.build_meta'. With --no-build-isolation, pip uses the host
Python to resolve the PEP 517 build backend, and IsaacSim's bundled
arm64 Python does not expose setuptools.build_meta in that scope.

Fix: pre-install setuptools, wheel, and numpy in IsaacSim's Python
before the nlopt install step. Same change applied to Dockerfile.base
and Dockerfile.curobo.

Verified locally in a QEMU arm64 python:3.12-slim container: reproduced
the BackendUnavailable error after pip uninstall setuptools wheel, then
confirmed the install succeeds when those packages are pre-installed.

## Type of change

- Bug fix (non-breaking change which fixes an issue)

## Checklist

- [x] I have read and understood the contribution guidelines
- [x] I have run the pre-commit checks with ./isaaclab.sh --format
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] I have updated the changelog and the corresponding version in the
extension's config/extension.toml file
- [x] I have added my name to the CONTRIBUTORS.md or my name already
exists there
AntoineRichard pushed a commit that referenced this pull request May 8, 2026
#5538)

## Summary

Two unrelated CI breakages on develop, bundled here so develop turns
green in one PR.

### 1. Skip the failing viewergl test

`test_cartpole_newton_visualizer_viewergl_rgb_motion[physx,newton]`
started returning all-black frames on develop after
`nvcr.io/nvidian/isaac-sim:latest-develop` flipped to a Kit 110.1.1 +
USD 25.11 base. The failure has been deterministic across multiple PRs
(#5523, #5495, #5408, …).

Investigation so far has ruled out:
- PR #5521 (revert in
#5539 still failed)
- Newton 1.0 → 1.2.0rc2 viewer code regression (only 7-line addition;
ViewerGL alone yields 1.08M nonzero pixels)
- warp 1.12 → 1.13 RegisteredGLBuffer ABI (byte-identical)
- Module-load side effects of `isaaclab_physx.renderers`
- CUDA-GL interop (PR #5540 diagnostic confirms direct CPU FBO readback
also returns zeros, with `GL_NO_ERROR`)
- GL context-currency (PR #5541 H6 attempt: still fails)
- GL/CUDA sync (PR #5542 H4 attempt: still fails)

Diagnostic output (PR #5540 v2):
```
[VIZDIAG] fbo=c_uint(8)  pbo=None  size=600x600
[VIZDIAG] glGetError before: GL_NO_ERROR
[VIZDIAG] CPU-readback: nonzero=0/1080000  max=0  err=GL_NO_ERROR
[VIZDIAG] PBO-result: nonzero=0/1080000  max=0
```

The FBO itself is empty — Newton's pyglet/EGL renderer is not depositing
pixels under Kit 110.1.1, even though `tiled_camera_rgb_non_black` (Kit
RTX path) on the same env passes. Underlying root cause still being
chased; this PR ships the skip to unblock develop.

### 2. Fix warp intersphinx 404 in docs build

`https://nvidia.github.io/warp/objects.inv` started returning 404 —
Warp's `objects.inv` only lives at `/stable/` and `/latest/` now. With
Sphinx's `warnings_treated_as_errors`, the broken intersphinx fetch
fails the docs build on every PR. Pinning to `/stable/` (matches the
existing PyTorch `/docs/2.11/` workaround pattern in the same file).

Verified `https://nvidia.github.io/warp/stable/objects.inv` returns 200.

## Test plan

- [x] CI `isaaclab_visualizers` on this branch — was passing earlier
with the skip; will re-verify with the bundled docs fix
- [ ] CI `Build Latest Docs` on this branch — must turn green (was
failing on every recent PR before this fix)

## Re-enable plan

Once the underlying viewergl bug is identified and fixed, drop the
`@pytest.mark.skip` decorator and remove the
`jichuanh-disable-viewergl-flaky.skip` fragment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working infrastructure

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants