From e0bda6563102d7cc1457cbd82d93cf4c2cce4703 Mon Sep 17 00:00:00 2001 From: spomichter Date: Sat, 28 Feb 2026 11:47:28 +0000 Subject: [PATCH 1/2] chore(ci): decouple python deps from docker images moved python dep installation from docker build to test runtime. pyproject.toml changes no longer trigger image rebuilds. - docker/python/Dockerfile: removed COPY, uv pip install, pydrake stub deletion - docker/dev/Dockerfile: removed uv pip install .[dev] - docker.yml: removed pyproject.toml from python path filter, renamed job to run-tests/run-mypy - tests.yml: added uv sync --all-extras --no-extra dds --frozen, activate venv before running tests --- .github/workflows/docker.yml | 5 ++--- .github/workflows/tests.yml | 11 ++++++++++- docker/dev/Dockerfile | 3 --- docker/python/Dockerfile | 10 ---------- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 361ef66bf8..8bf8bc8771 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -46,7 +46,6 @@ jobs: - .github/workflows/_docker-build-template.yml - .github/workflows/docker.yml - docker/python/** - - pyproject.toml dev: - docker/dev/** @@ -199,7 +198,7 @@ jobs: to-image: ghcr.io/dimensionalos/ros-dev:${{ needs.check-changes.outputs.branch-tag }} dockerfile: dev - run-ros-tests: + run-tests: needs: [check-changes, ros-dev] if: ${{ always() && @@ -232,7 +231,7 @@ jobs: dev-image: ros-dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true' || needs.check-changes.outputs.ros == 'true') && needs.ros-dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }} ci-complete: - needs: [check-changes, ros, python, ros-python, dev, ros-dev, run-ros-tests, run-mypy] + needs: [check-changes, ros, python, ros-python, dev, ros-dev, run-tests, run-mypy] runs-on: [self-hosted, Linux] if: always() steps: diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 25273238dc..6006bae397 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,9 +32,18 @@ jobs: run: | git config --global --add safe.directory '*' + - name: Install Python dependencies + run: uv sync --all-extras --no-extra dds --frozen + + - name: Remove pydrake stubs + run: | + find .venv/lib/*/site-packages/pydrake -name '*.pyi' -delete 2>/dev/null || true + - name: Run tests + shell: bash run: | - /entrypoint.sh bash -c "${{ inputs.cmd }}" + /entrypoint.sh bash -c "source .venv/bin/activate && ${{ inputs.cmd }} ; echo \$? > /tmp/pytest_exit" || true + exit $(cat /tmp/pytest_exit) - name: check disk space if: failure() diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index ef80b70e1d..c6822e54cb 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -29,9 +29,6 @@ ENV UV_SYSTEM_PYTHON=1 RUN curl -LsSf https://astral.sh/uv/install.sh | sh ENV PATH="/root/.local/bin:$PATH" -# Install dependencies with UV -RUN uv pip install .[dev] - # Copy files and add version to motd COPY /assets/dimensionalascii.txt /etc/motd COPY /docker/dev/bash.sh /root/.bash.sh diff --git a/docker/python/Dockerfile b/docker/python/Dockerfile index 30c9fda8eb..16b4db1807 100644 --- a/docker/python/Dockerfile +++ b/docker/python/Dockerfile @@ -42,13 +42,3 @@ RUN curl -LsSf https://astral.sh/uv/install.sh | sh ENV PATH="/root/.local/bin:$PATH" WORKDIR /app - -# Copy entire project first to ensure proper package installation -COPY . /app/ - -# Install dependencies with UV (10-100x faster than pip) -RUN uv pip install --upgrade 'pip>=24' 'setuptools>=70' 'wheel' 'packaging>=24' && \ - uv pip install '.[misc,cpu,sim,drone,unitree,web,perception,visualization,manipulation]' - -# Remove pydrake .pyi stubs that use Python 3.12 syntax (breaks mypy on 3.10) -RUN find /usr/local/lib/python3.10/dist-packages/pydrake -name '*.pyi' -delete From 73d248cca657c7768d54e1fc855a8c4d824047d8 Mon Sep 17 00:00:00 2001 From: spomichter Date: Sun, 1 Mar 2026 23:29:34 +0000 Subject: [PATCH 2/2] revert: remove Open3D exit code workaround open3d leak fixed in #1386, workaround no longer needed. keeps venv activation since deps are now installed at test time. --- .github/workflows/tests.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6006bae397..3e91dff14a 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -40,10 +40,8 @@ jobs: find .venv/lib/*/site-packages/pydrake -name '*.pyi' -delete 2>/dev/null || true - name: Run tests - shell: bash run: | - /entrypoint.sh bash -c "source .venv/bin/activate && ${{ inputs.cmd }} ; echo \$? > /tmp/pytest_exit" || true - exit $(cat /tmp/pytest_exit) + /entrypoint.sh bash -c "source .venv/bin/activate && ${{ inputs.cmd }}" - name: check disk space if: failure()