Skip to content

Commit 433140d

Browse files
authored
Merge branch 'main' into issue-6164-rsbag-post-processing
2 parents 06ef467 + cf67052 commit 433140d

539 files changed

Lines changed: 35062 additions & 6757 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.dockerignore

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,14 @@ docs/_out
88
.python-version
99
cmake-build-*
1010
.git
11+
12+
# CI runner artifacts (wheel job downloads the lib image next to the checkout).
13+
# Not used by Dockerfile COPY; including them blew the build context to ~20GB.
14+
open3d-lib-sycl-shared.tar.zst
15+
open3d-lib-*.tar.zst
16+
open3d-lib-*.tar.gz
17+
open3d-devel-*.tar.xz
18+
open3d-devel-*.tar.gz
19+
open3d-ci-*.tar.xz
20+
open3d-ci-*.tar.gz
21+
open3d*.whl

.github/workflows/README.md

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,59 @@ possible. For jobs that use docker, or auxiliary jobs (e.g. uploading artifacts
88
to google cloud), use ubuntu-latest to avoid changing the version on GitHub
99
actions updates. On macOS and Windows, using Ubuntu reduces CI cost.
1010

11+
## CI test layout
12+
13+
Open3D splits **C++** and **Python** testing so each configuration is exercised
14+
once, without re-running the full suite in every wheel matrix cell. Docker-based
15+
workflows use `docker/docker_test.sh`; see `docker/docker_test.sh` usage for tag
16+
names.
17+
18+
### `docker_test.sh` phases
19+
20+
Optional second argument (default `all`):
21+
22+
| Phase | Runs |
23+
|-------|------|
24+
| `cpp` | C++ gtest only (`./bin/tests --gtest_shuffle`) |
25+
| `lib` | `cpp` + command-line tools + C++ linking example + `make uninstall` |
26+
| `python` | `pytest python/test` inside the CI image |
27+
| `all` | `lib` + `python` (full suite) |
28+
29+
SYCL, CPU (`cpu-static`, `cpu-shared-ml`, …), and OpenBLAS docker tags support
30+
all phases. CUDA ML configs on GCE (`ubuntu-cuda.yml`) call `docker_test.sh`
31+
with one argument only → **`all`** on a GPU VM.
32+
33+
### Where tests run
34+
35+
| Area | C++ / integration | Python | Notes |
36+
|------|-------------------|--------|--------|
37+
| **ubuntu.yml** | `lib` per matrix leg | `python` in same image | All in Docker |
38+
| **ubuntu-sycl.yml** | `cpp` in **build-lib** (ON/OFF) | `python` in **build-wheel** after `docker_build.sh sycl-shared py*` | No duplicate bare `docker run` gtest |
39+
| **ubuntu-openblas.yml** | `lib` once on **build-lib-arm64** (reference image); amd64 `lib` in single job | `python` once per Python version in wheel job (`"${DOCKER_TAG}"`) | Wheel matrix does not re-run C++ |
40+
| **ubuntu-cuda.yml** | **`all`** on GCE per `CI_CONFIG` | same step | Only workflow with CUDA GPUs in tests |
41+
| **ubuntu-wheel.yml** | **Once** in **test-cpp** (gtest bundle from **build-lib**) | **test-wheel-cpu**: host `test_wheel` + `run_python_tests` per Python (CUDA + CPU wheel smoke); wheels built in Docker, tests on `ubuntu-22.04` runner | No GPU on GitHub |
42+
| **windows.yml** / **macos.yml** | gtest in **build-lib** | **test-wheel** on runner | Native builds, not docker |
43+
44+
GitHub-hosted runners have **no CUDA GPU**. SYCL jobs rely on SYCL-CPU / skips;
45+
Windows **test-wheel** skips pytest on the `cuda` device matrix leg.
46+
47+
### Downstream jobs when build-lib fails
48+
49+
**build-wheel** (and related jobs such as **test-wheel**, **test-cpp** on
50+
ubuntu-wheel) use `if: ${{ always() && !cancelled() }}` with `needs: build-lib`
51+
so wheel builds and tests still run when a lib job failed (e.g. flaky gtest).
52+
Steps may fail if required artifacts were never uploaded.
53+
1154
## Documentation deployment
1255

1356
### Directory structure
1457

15-
- `.github/workflows/documentation.yml`: Github Actions workflow file to
16-
create and deploy documentation. Documentation is created for every branch
17-
as a CI test, but deployed only for `main`.
58+
- `.github/workflows/ubuntu.yml`: The `build-docs` job creates and deploys
59+
documentation, using the Open3D Python wheel built by the `ubuntu` job in
60+
the same workflow (EGL-based offscreen rendering means the standard wheel
61+
supports headless notebook execution, so no separate headless build is
62+
needed). Documentation is created for every branch as a CI test, but
63+
deployed only for `main`.
1864
- `util/ci_utils.sh:build_docs()`: Called by GitHub Actions to build documentation.
1965
- `unpack_docs.sh`: Called by the documentation server to deploy the docs into
2066
the website.
@@ -80,7 +126,7 @@ Now `~/open3d-ci-sa-key.json` should have been created.
80126

81127
### CI Procedure
82128

83-
The GCE CI workflow `.github/workflows/gce-ubuntu-docker.yml` performs these steps:
129+
The GCE CI workflow `.github/workflows/ubuntu-cuda.yml` performs these steps:
84130

85131
- Clone the repository
86132
- Build docker image, starting with a an NVIDIA base devel image with CUDA and
@@ -89,10 +135,8 @@ The GCE CI workflow `.github/workflows/gce-ubuntu-docker.yml` performs these ste
89135
- On Google Compute Engine (GCE), in parallel (up to GPU quota limit - currently
90136
4):
91137
- Create a new VM instance with a custom OS image
92-
- Run docker image on GCE (Google Compute Engine) with environment variables
93-
set for specific build config.
94-
- The docker image entrypoint is the `run-ci.sh` script: build, install, run
95-
tests and uninstall.
138+
- Build the docker image on the VM, then run `docker/docker_test.sh` for the
139+
config (full `all` phase: C++ gtest, Python pytest, linking, uninstall).
96140
- Delete the VM instance.
97141

98142
A separate VM instance is created for each commit and build option. The VM

.github/workflows/documentation.yml

Lines changed: 0 additions & 73 deletions
This file was deleted.

.github/workflows/macos.yml

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ jobs:
6767
- name: Install dependencies
6868
run: |
6969
brew install ccache glslang spirv-cross gcc
70+
# Fix gfortran not found issue
7071
ln -s $(brew --prefix gcc)/bin/gfortran-* /usr/local/bin/gfortran
7172
7273
ccache -M 2G # See .github/workflows/readme.md for ccache strategy.
@@ -102,7 +103,7 @@ jobs:
102103
ccache -s
103104
104105
- name: Generate package attestation
105-
if: ${{ env.BUILD_SHARED_LIBS == 'ON' }}
106+
if: ${{ github.ref == 'refs/heads/main' && env.BUILD_SHARED_LIBS == 'ON' }}
106107
uses: actions/attest@v4
107108
with:
108109
subject-path: build/package/${{ env.DEVEL_PKG_NAME }}
@@ -116,7 +117,7 @@ jobs:
116117
if-no-files-found: error
117118

118119
- name: Generate viewer attestation
119-
if: ${{ env.BUILD_SHARED_LIBS == 'OFF' }}
120+
if: ${{ github.ref == 'refs/heads/main' && env.BUILD_SHARED_LIBS == 'OFF' }}
120121
uses: actions/attest@v4
121122
with:
122123
subject-path: build/bin/open3d-*-app-macosx-10_15-${{ runner.arch }}.zip
@@ -142,6 +143,7 @@ jobs:
142143
143144
build-wheel:
144145
needs: build-lib
146+
if: ${{ always() && !cancelled() }}
145147
name: Build wheel
146148
permissions:
147149
contents: write # upload
@@ -170,7 +172,7 @@ jobs:
170172
env:
171173
# TensorFlow v2.20 only supports macOS-14 (Apple Silicon) and python 3.9-3.13
172174
BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }}
173-
# PyTorch 2.10 only supports macOS-14 (Apple Silicon) and python 3.10-3.14
175+
# PyTorch 2.13 only supports macOS-14 (Apple Silicon) and python 3.10-3.14
174176
BUILD_PYTORCH_OPS: 'ON'
175177
OPEN3D_ML_ROOT: ${{ github.workspace }}/Open3D-ML
176178
steps:
@@ -181,7 +183,9 @@ jobs:
181183
uses: actions/checkout@v4
182184
with:
183185
repository: isl-org/Open3D-ML
184-
ref: main
186+
# TODO(ss/sycl-mlops): switch back to main once the torch 2.13
187+
# requirements-torch.txt bump on ss/xpu is merged upstream.
188+
ref: ss/xpu
185189
path: ${{ env.OPEN3D_ML_ROOT }}
186190

187191
- name: Download build artifact
@@ -237,6 +241,7 @@ jobs:
237241
echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV
238242
239243
- name: Generate wheel attestation
244+
if: ${{ github.ref == 'refs/heads/main' }}
240245
uses: actions/attest@v4
241246
with:
242247
subject-path: build/lib/python_package/pip_package/${{ env.PIP_PKG_NAME }}
@@ -262,6 +267,7 @@ jobs:
262267
contents: read
263268
runs-on: ${{ matrix.os }}
264269
needs: [build-wheel]
270+
if: ${{ always() && !cancelled() }}
265271
strategy:
266272
fail-fast: false
267273
matrix:
@@ -282,7 +288,7 @@ jobs:
282288
env:
283289
# TensorFlow v2.20 only supports macOS-14 (Apple Silicon) and python 3.9-3.13
284290
BUILD_TENSORFLOW_OPS: ${{ matrix.python_version >= '3.14' && 'OFF' || 'ON' }}
285-
# PyTorch 2.10 only supports macOS-14 (Apple Silicon) and python 3.10-3.14
291+
# PyTorch 2.13 only supports macOS-14 (Apple Silicon) and python 3.10-3.14
286292
BUILD_PYTORCH_OPS: 'ON'
287293
OPEN3D_ML_ROOT: ${{ github.workspace }}/Open3D-ML
288294
steps:
@@ -293,7 +299,9 @@ jobs:
293299
uses: actions/checkout@v4
294300
with:
295301
repository: isl-org/Open3D-ML
296-
ref: main
302+
# TODO(ss/sycl-mlops): switch back to main once the torch 2.13
303+
# requirements-torch.txt bump on ss/xpu is merged upstream.
304+
ref: ss/xpu
297305
path: ${{ env.OPEN3D_ML_ROOT }}
298306

299307
- name: Download wheels

.github/workflows/ubuntu-cuda.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ jobs:
154154
fi
155155
156156
- name: Generate package attestation
157-
if: ${{ env.BUILD_PACKAGE == 'true' }}
157+
if: ${{ github.ref == 'refs/heads/main' && env.BUILD_PACKAGE == 'true' }}
158158
uses: actions/attest@v4
159159
with:
160160
subject-path: ${{ github.workspace }}/open3d-devel-linux*.tar.xz

.github/workflows/ubuntu-openblas.yml

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@ jobs:
3131
- name: Docker build
3232
run: docker/docker_build.sh openblas-amd64-py312-dev
3333

34-
- name: Docker test
35-
run: docker/docker_test.sh openblas-amd64-py312-dev
34+
- name: Docker test (C++ and integration)
35+
run: docker/docker_test.sh openblas-amd64-py312-dev lib
36+
37+
- name: Docker test (Python)
38+
run: docker/docker_test.sh openblas-amd64-py312-dev python
3639

3740
build-lib-arm64:
3841
name: Build Lib ARM64
@@ -68,6 +71,9 @@ jobs:
6871
path: open3d-lib-arm64.tar.gz
6972
retention-days: 1
7073

74+
- name: Docker test (C++ and integration)
75+
run: docker/docker_test.sh openblas-arm64-py310-dev lib
76+
7177
build-wheel-arm64:
7278
name: Build Wheel ARM64
7379
permissions:
@@ -76,6 +82,7 @@ jobs:
7682
attestations: write
7783
runs-on: ubuntu-24.04-arm
7884
needs: build-lib-arm64
85+
if: ${{ always() && !cancelled() }}
7986
strategy:
8087
fail-fast: false
8188
matrix:
@@ -128,10 +135,8 @@ jobs:
128135
PIP_PKG_NAME="$(basename ${GITHUB_WORKSPACE}/open3d-[0-9]*.whl)"
129136
echo "PIP_PKG_NAME=$PIP_PKG_NAME" >> $GITHUB_ENV
130137
131-
- name: Docker test
132-
run: docker/docker_test.sh "${DOCKER_TAG}"
133-
134138
- name: Generate wheel attestation
139+
if: ${{ github.ref == 'refs/heads/main' }}
135140
uses: actions/attest@v4
136141
with:
137142
subject-path: ${{ github.workspace }}/${{ env.PIP_PKG_NAME }}
@@ -149,3 +154,6 @@ jobs:
149154
GH_TOKEN: ${{ github.token }}
150155
run: |
151156
.github/workflows/update_release.sh ${{ env.PIP_PKG_NAME }}
157+
158+
- name: Docker test (Python)
159+
run: docker/docker_test.sh "${DOCKER_TAG}" python

0 commit comments

Comments
 (0)