From 952c7bfd7cf43d786156de7ee53dcaabe1f50d50 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Tue, 7 Apr 2026 08:11:28 +0300 Subject: [PATCH 01/10] paul(ci): single step --- .github/workflows/ci.yml | 67 +++++++++++ .../{docker.yml => docker-build.yml} | 109 ++++++------------ .github/workflows/tests.yml | 61 ---------- docs/development/docker.md | 24 +--- 4 files changed, 106 insertions(+), 155 deletions(-) create mode 100644 .github/workflows/ci.yml rename .github/workflows/{docker.yml => docker-build.yml} (65%) delete mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..3b35a29c40 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,67 @@ +name: ci +on: + push: + branches: [main, dev] + paths-ignore: + - '**.md' + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + paths-ignore: + - '**.md' + +permissions: + contents: read + packages: read + +jobs: + checks: + if: github.event_name != 'pull_request' || github.event.pull_request.draft == false + timeout-minutes: 60 + runs-on: [self-hosted, Linux] + container: + image: ghcr.io/dimensionalos/ros-dev:dev + env: + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + ALIBABA_API_KEY: ${{ secrets.ALIBABA_API_KEY }} + + steps: + - uses: actions/checkout@v4 + + - name: Fix permissions + 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 + if: github.event_name != 'push' + run: | + /entrypoint.sh bash -c "source .venv/bin/activate && pytest --durations=0 -m 'not (tool or mujoco)'" + + - name: Run tests with coverage + if: github.event_name == 'push' + run: | + /entrypoint.sh bash -c "source .venv/bin/activate && _DIMOS_COV=1 coverage run -m pytest --durations=0 -m 'not (tool or mujoco)' && coverage combine && coverage html && coverage report" + + - name: Run mypy + if: ${{ !cancelled() }} + run: | + /entrypoint.sh bash -c "source .venv/bin/activate && MYPYPATH=/opt/ros/humble/lib/python3.10/site-packages mypy dimos" + + - name: Upload coverage report + if: github.event_name == 'push' && !cancelled() + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: htmlcov/ + + - name: Check disk space + if: failure() + run: | + df -h diff --git a/.github/workflows/docker.yml b/.github/workflows/docker-build.yml similarity index 65% rename from .github/workflows/docker.yml rename to .github/workflows/docker-build.yml index 0240df6ff7..a4e25bfcb2 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker-build.yml @@ -1,29 +1,27 @@ -name: docker +name: docker-build on: push: - branches: - - main - - dev - paths-ignore: - - '**.md' - pull_request: - types: [opened, synchronize, reopened, ready_for_review] + branches: [main, dev] + paths: + - 'docker/**' + - '.github/workflows/docker-build.yml' + - '.github/workflows/_docker-build-template.yml' + schedule: + - cron: '0 4 * * 1' # Weekly Monday 4am UTC for base image security patches + workflow_dispatch: permissions: contents: read packages: write - pull-requests: read jobs: check-changes: - if: github.event_name != 'pull_request' || github.event.pull_request.draft == false runs-on: [self-hosted, Linux] outputs: - ros: ${{ steps.filter.outputs.ros }} - python: ${{ steps.filter.outputs.python }} - dev: ${{ steps.filter.outputs.dev }} - navigation: ${{ steps.filter.outputs.navigation }} - tests: ${{ steps.filter.outputs.tests }} + ros: ${{ steps.force.outputs.force == 'true' && 'true' || steps.filter.outputs.ros }} + python: ${{ steps.force.outputs.force == 'true' && 'true' || steps.filter.outputs.python }} + dev: ${{ steps.force.outputs.force == 'true' && 'true' || steps.filter.outputs.dev }} + navigation: ${{ steps.force.outputs.force == 'true' && 'true' || steps.filter.outputs.navigation }} branch-tag: ${{ steps.set-tag.outputs.branch_tag }} steps: - name: Fix permissions @@ -31,22 +29,32 @@ jobs: sudo chown -R $USER:$USER ${{ github.workspace }} || true - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check if full rebuild + id: force + run: | + if [[ "${{ github.event_name }}" == "schedule" || "${{ github.event_name }}" == "workflow_dispatch" ]]; then + echo "force=true" >> "$GITHUB_OUTPUT" + else + echo "force=false" >> "$GITHUB_OUTPUT" + fi + - id: filter + if: steps.force.outputs.force != 'true' uses: dorny/paths-filter@v3 with: base: ${{ github.event.before }} filters: | - # ros and python are (alternative) root images - # change to root stuff like docker.yml etc triggers rebuild of those - # which cascades into a full rebuild ros: - .github/workflows/_docker-build-template.yml - - .github/workflows/docker.yml + - .github/workflows/docker-build.yml - docker/ros/** python: - .github/workflows/_docker-build-template.yml - - .github/workflows/docker.yml + - .github/workflows/docker-build.yml - docker/python/** dev: @@ -54,14 +62,9 @@ jobs: navigation: - .github/workflows/_docker-build-template.yml - - .github/workflows/docker.yml + - .github/workflows/docker-build.yml - docker/navigation/** - tests: - - dimos/** - - pyproject.toml - - uv.lock - - name: Determine Branch Tag id: set-tag run: | @@ -78,15 +81,6 @@ jobs: echo "branch tag determined: ${branch_tag}" echo branch_tag="${branch_tag}" >> "$GITHUB_OUTPUT" - # just a debugger - inspect-needs: - needs: [check-changes, ros] - runs-on: dimos-runner-ubuntu-2204 - if: always() - steps: - - run: | - echo '${{ toJSON(needs) }}' - ros: needs: [check-changes] if: needs.check-changes.outputs.ros == 'true' @@ -202,48 +196,15 @@ jobs: to-image: ghcr.io/dimensionalos/ros-dev:${{ needs.check-changes.outputs.branch-tag }} dockerfile: dev - run-tests: - needs: [check-changes, ros-dev] - if: ${{ - always() && - needs.check-changes.result == 'success' && - (needs.check-changes.outputs.tests == 'true' || - needs.check-changes.outputs.ros == 'true' || - needs.check-changes.outputs.python == 'true' || - needs.check-changes.outputs.dev == 'true') - }} - uses: ./.github/workflows/tests.yml - secrets: inherit - with: - cmd: "_DIMOS_COV=1 coverage run -m pytest --durations=0 -m 'not (tool or mujoco)' && coverage combine && coverage html && coverage report" - upload-coverage: true - 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' }} - - run-mypy: - needs: [check-changes, ros-dev] - if: ${{ - always() && - needs.check-changes.result == 'success' && - (needs.check-changes.outputs.tests == 'true' || - needs.check-changes.outputs.ros == 'true' || - needs.check-changes.outputs.python == 'true' || - needs.check-changes.outputs.dev == 'true') - }} - uses: ./.github/workflows/tests.yml - secrets: inherit - with: - cmd: "MYPYPATH=/opt/ros/humble/lib/python3.10/site-packages mypy dimos" - 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-tests, run-mypy] + build-complete: + needs: [check-changes, ros, python, ros-python, dev, ros-dev, navigation] runs-on: [self-hosted, Linux] if: always() steps: - - name: CI gate + - name: Build gate if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} run: | - echo "❌ One or more CI jobs failed or were cancelled" + echo "One or more build jobs failed or were cancelled" exit 1 - - name: CI passed - run: echo "✅ All CI checks passed or were intentionally skipped" + - name: Build passed + run: echo "All build jobs passed or were intentionally skipped" diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml deleted file mode 100644 index 14eaaabab9..0000000000 --- a/.github/workflows/tests.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: tests - -on: - workflow_call: - inputs: - dev-image: - required: true - type: string - default: "dev:dev" - cmd: - required: true - type: string - upload-coverage: - required: false - type: boolean - default: false - -permissions: - contents: read - packages: read - -jobs: - run-tests: - timeout-minutes: 60 - runs-on: [self-hosted, Linux] - container: - image: ghcr.io/dimensionalos/${{ inputs.dev-image }} - env: - OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} - ALIBABA_API_KEY: ${{ secrets.ALIBABA_API_KEY }} - - steps: - - uses: actions/checkout@v4 - - - name: Fix permissions - 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 - run: | - /entrypoint.sh bash -c "source .venv/bin/activate && ${{ inputs.cmd }}" - - - name: Upload coverage report - if: inputs.upload-coverage && !cancelled() - uses: actions/upload-artifact@v4 - with: - name: coverage-report - path: htmlcov/ - - - name: check disk space - if: failure() - run: | - df -h diff --git a/docs/development/docker.md b/docs/development/docker.md index 2f3f4a98ec..c6622ff87f 100644 --- a/docs/development/docker.md +++ b/docs/development/docker.md @@ -100,34 +100,18 @@ Use the helper script: ## CI/CD Pipeline -The workflow in [`.github/workflows/docker.yml`](/.github/workflows/docker.yml) handles: +Images are built by [`.github/workflows/docker-build.yml`](/.github/workflows/docker-build.yml#L4) on merges to `main`/`dev` (when Docker files change) and weekly for base image security patches. -1. **Change detection** - Only rebuilds images when relevant files change -2. **Parallel builds** - ROS and non-ROS tracks build independently -3. **Cascade rebuilds** - Changes to base images trigger downstream rebuilds -4. **Test execution** - Tests run in the freshly built images +Tests and type checking run in [`.github/workflows/ci.yml`](/.github/workflows/ci.yml) using pre-built images. -### Trigger Paths +### Build Trigger Paths | Image | Triggers on changes to | |----------|------------------------------------------------------| | `ros` | `docker/ros/**`, workflow files | -| `python` | `docker/python/**`, `pyproject.toml`, workflow files | +| `python` | `docker/python/**`, workflow files | | `dev` | `docker/dev/**` | -### Test Jobs - -After images build, tests run in parallel: - -| Job | Image | Command | -|-------------------------|---------|---------------------------| -| `run-tests` | dev | `pytest` | -| `run-ros-tests` | ros-dev | `pytest && pytest -m ros` | -| `run-heavy-tests` | dev | `pytest -m heavy` | -| `run-lcm-tests` | dev | `pytest -m lcm` | -| `run-integration-tests` | dev | `pytest -m integration` | -| `run-mypy` | ros-dev | `mypy dimos` | - ## Dockerfile Structure ### Common Patterns From da00f19fb9f058285401b894553f496ac4b339ec Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 00:32:02 +0300 Subject: [PATCH 02/10] simplify macos --- .github/workflows/macos.yml | 29 +++------------------ .github/workflows/readme.md | 51 ------------------------------------- 2 files changed, 3 insertions(+), 77 deletions(-) delete mode 100644 .github/workflows/readme.md diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 6ed62e6d5c..a4abddf25a 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -12,7 +12,7 @@ on: paths-ignore: - '**.md' - 'docker/**' - - '.github/workflows/docker.yml' + - '.github/workflows/docker-build.yml' - '.github/workflows/_docker-build-template.yml' permissions: @@ -36,7 +36,7 @@ jobs: - 'uv.lock' - '.github/workflows/macos.yml' - macos-tests: + checks: needs: [check-changes] if: needs.check-changes.outputs.should-run == 'true' runs-on: [self-hosted, macos, arm64] @@ -94,31 +94,8 @@ jobs: if: always() run: df -h . - macos-mypy: - needs: [check-changes] - if: needs.check-changes.outputs.should-run == 'true' - runs-on: [self-hosted, macos, arm64] - steps: - - uses: actions/checkout@v4 - with: - lfs: false - - - name: Install uv - uses: astral-sh/setup-uv@v6 - with: - enable-cache: true - - - name: Set up Python - run: uv python install 3.12 - - - name: Install system dependencies - run: brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo - - - name: Install dependencies - run: | - uv sync --all-extras --no-extra dds --no-extra cuda --frozen - - name: Run mypy + if: ${{ !cancelled() }} run: | source .venv/bin/activate mypy dimos diff --git a/.github/workflows/readme.md b/.github/workflows/readme.md deleted file mode 100644 index f82ba479bb..0000000000 --- a/.github/workflows/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# general structure of workflows - -Docker.yml checks for releavant file changes and re-builds required images -Currently images have a dependancy chain of ros -> python -> dev (in the future this might be a tree and can fork) - -On top of the dev image then tests are run. -Dev image is also what developers use in their own IDE via devcontainers -https://code.visualstudio.com/docs/devcontainers/containers - -# login to github docker repo - -create personal access token (classic, not fine grained) -https://github.com/settings/tokens - -add permissions -- read:packages scope to download container images and read their metadata. - - and optionally, - -- write:packages scope to download and upload container images and read and write their metadata. -- delete:packages scope to delete container images. - -more info @ https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry - -login to docker via - -`sh -echo TOKEN | docker login ghcr.io -u GITHUB_USER --password-stdin -` - -pull dev image (dev branch) -`sh -docker pull ghcr.io/dimensionalos/dev:dev -` - -pull dev image (master) -`sh -docker pull ghcr.io/dimensionalos/dev:latest -` - -# todo - -Currently there is an issue with ensuring both correct docker image build ordering, and skipping unneccessary re-builds. - -(we need job dependancies for builds to wait to their images underneath to be built (for example py waits for ros)) -by default if a parent is skipped, it's children get skipped as well, unless they have always() in their conditional. - -Issue is once we put always() in the conditional, it seems that no matter what other check we put in the same conditional, job will always run. -for this reason we cannot skip python (and above) builds for now. Needs review. - -I think we will need to write our own build dispatcher in python that calls github workflows that build images. From e0d8692609ab77088ad540705364fd53a1e083fe Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 02:31:34 +0300 Subject: [PATCH 03/10] cache uv install --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3b35a29c40..621075bb93 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,6 +32,12 @@ jobs: run: | git config --global --add safe.directory '*' + - name: Cache Python venv + uses: actions/cache@v4 + with: + path: .venv + key: venv-${{ hashFiles('uv.lock') }} + - name: Install Python dependencies run: uv sync --all-extras --no-extra dds --frozen From bc74f3e07f91f8da4a4e795fb01ce1b3e388afce Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 02:36:07 +0300 Subject: [PATCH 04/10] update actions --- .github/actions/docker-build/action.yml | 2 +- .github/workflows/_docker-build-template.yml | 2 +- .github/workflows/ci.yml | 6 +++--- .github/workflows/code-cleanup.yml | 4 ++-- .github/workflows/docker-build.yml | 8 ++++---- .github/workflows/macos.yml | 6 +++--- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/actions/docker-build/action.yml b/.github/actions/docker-build/action.yml index a538ad35fd..2b04445f5e 100644 --- a/.github/actions/docker-build/action.yml +++ b/.github/actions/docker-build/action.yml @@ -30,7 +30,7 @@ runs: sudo rm -rf /usr/local/lib/android echo -e "post cleanup space:\n $(df -h)" - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: docker/login-action@v3 with: diff --git a/.github/workflows/_docker-build-template.yml b/.github/workflows/_docker-build-template.yml index 478a9bec84..a37f5d1e16 100644 --- a/.github/workflows/_docker-build-template.yml +++ b/.github/workflows/_docker-build-template.yml @@ -24,7 +24,7 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }} || true - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 if: ${{ inputs.should-run }} with: fetch-depth: 0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 621075bb93..2b1c59b3fc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,14 +26,14 @@ jobs: ALIBABA_API_KEY: ${{ secrets.ALIBABA_API_KEY }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Fix permissions run: | git config --global --add safe.directory '*' - name: Cache Python venv - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: .venv key: venv-${{ hashFiles('uv.lock') }} @@ -62,7 +62,7 @@ jobs: - name: Upload coverage report if: github.event_name == 'push' && !cancelled() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: coverage-report path: htmlcov/ diff --git a/.github/workflows/code-cleanup.yml b/.github/workflows/code-cleanup.yml index f55800686c..0d475bd721 100644 --- a/.github/workflows/code-cleanup.yml +++ b/.github/workflows/code-cleanup.yml @@ -17,8 +17,8 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }} || true - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/checkout@v5 + - uses: actions/setup-python@v5 - uses: astral-sh/setup-uv@v4 - name: Run pre-commit id: pre-commit-first diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index a4e25bfcb2..2bb78e9d13 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -28,7 +28,7 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }} || true - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 @@ -43,7 +43,7 @@ jobs: - id: filter if: steps.force.outputs.force != 'true' - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@v4 with: base: ${{ github.event.before }} filters: | @@ -143,12 +143,12 @@ jobs: run: | sudo chown -R $USER:$USER ${{ github.workspace }} || true - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - name: Checkout ros-navigation-autonomy-stack - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: dimensionalOS/ros-navigation-autonomy-stack ref: fastlio2 diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index a4abddf25a..c67ee360e7 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -25,9 +25,9 @@ jobs: outputs: should-run: ${{ steps.filter.outputs.python }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - id: filter - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@v4 with: filters: | python: @@ -42,7 +42,7 @@ jobs: runs-on: [self-hosted, macos, arm64] timeout-minutes: 60 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: lfs: false From 985270731301c594a924af5c03fae7a57b9f9d35 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 03:12:00 +0300 Subject: [PATCH 05/10] do not install installed pacakges --- .github/workflows/macos.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index c67ee360e7..0a28052a4e 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -41,6 +41,8 @@ jobs: if: needs.check-changes.outputs.should-run == 'true' runs-on: [self-hosted, macos, arm64] timeout-minutes: 60 + env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true steps: - uses: actions/checkout@v5 with: @@ -55,7 +57,10 @@ jobs: run: uv python install 3.12 - name: Install system dependencies - run: brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo + run: | + for pkg in gnu-sed gcc portaudio git-lfs libjpeg-turbo; do + brew list "$pkg" &>/dev/null || brew install "$pkg" + done - name: Set up git-lfs run: | From cbdedec836f4965d73394d7046c4d785530f2247 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 03:24:16 +0300 Subject: [PATCH 06/10] remove uv caching --- .github/workflows/ci.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b1c59b3fc..4873530096 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,12 +32,6 @@ jobs: run: | git config --global --add safe.directory '*' - - name: Cache Python venv - uses: actions/cache@v5 - with: - path: .venv - key: venv-${{ hashFiles('uv.lock') }} - - name: Install Python dependencies run: uv sync --all-extras --no-extra dds --frozen From ee274536beda762db2cf841cf9e418adb1064473 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 04:31:59 +0300 Subject: [PATCH 07/10] try local cache --- .github/workflows/ci.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4873530096..32d28fee86 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,9 +32,28 @@ jobs: run: | git config --global --add safe.directory '*' + - name: Restore cached venv + run: | + cache_dir="${GITHUB_WORKSPACE}/../_venv_cache" + mkdir -p "$cache_dir" + hash=$(sha256sum uv.lock | cut -d' ' -f1) + cached="${cache_dir}/venv-${hash}" + if [ -d "$cached" ]; then + cp -al "$cached" .venv + echo "Restored venv from local cache" + fi + find "$cache_dir" -maxdepth 1 -name 'venv-*' ! -name "venv-${hash}" -exec rm -rf {} + 2>/dev/null || true + - name: Install Python dependencies run: uv sync --all-extras --no-extra dds --frozen + - name: Cache venv locally + run: | + cache_dir="${GITHUB_WORKSPACE}/../_venv_cache" + hash=$(sha256sum uv.lock | cut -d' ' -f1) + cached="${cache_dir}/venv-${hash}" + [ -d "$cached" ] || cp -al .venv "$cached" + - name: Remove pydrake stubs run: | find .venv/lib/*/site-packages/pydrake -name '*.pyi' -delete 2>/dev/null || true From f9227c0323004110c1506f2339db2d27bec9aa87 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 05:24:56 +0300 Subject: [PATCH 08/10] trigger update --- dimos/utils/testing/moment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dimos/utils/testing/moment.py b/dimos/utils/testing/moment.py index 62779995c4..7ab1b07eba 100644 --- a/dimos/utils/testing/moment.py +++ b/dimos/utils/testing/moment.py @@ -52,7 +52,7 @@ class OutputMoment(Generic[T], Resource): value: T | None = None transport: Transport[T] - def __init__(self, transport: Transport[T]): + def __init__(self, transport: Transport[T]) -> None: self.transport = transport def set(self, value: T) -> None: From 84cae138f159fd7dc541c2d60159ea67359a0d52 Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 05:42:20 +0300 Subject: [PATCH 09/10] try different way --- .github/workflows/ci.yml | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32d28fee86..39f8cf7822 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,33 +27,17 @@ jobs: steps: - uses: actions/checkout@v5 + with: + clean: false - name: Fix permissions run: | git config --global --add safe.directory '*' - - - name: Restore cached venv - run: | - cache_dir="${GITHUB_WORKSPACE}/../_venv_cache" - mkdir -p "$cache_dir" - hash=$(sha256sum uv.lock | cut -d' ' -f1) - cached="${cache_dir}/venv-${hash}" - if [ -d "$cached" ]; then - cp -al "$cached" .venv - echo "Restored venv from local cache" - fi - find "$cache_dir" -maxdepth 1 -name 'venv-*' ! -name "venv-${hash}" -exec rm -rf {} + 2>/dev/null || true + git clean -ffdx -e .venv - name: Install Python dependencies run: uv sync --all-extras --no-extra dds --frozen - - name: Cache venv locally - run: | - cache_dir="${GITHUB_WORKSPACE}/../_venv_cache" - hash=$(sha256sum uv.lock | cut -d' ' -f1) - cached="${cache_dir}/venv-${hash}" - [ -d "$cached" ] || cp -al .venv "$cached" - - name: Remove pydrake stubs run: | find .venv/lib/*/site-packages/pydrake -name '*.pyi' -delete 2>/dev/null || true From d4dcb320b6824eb18cbc1135e676be4a983c3f7c Mon Sep 17 00:00:00 2001 From: Paul Nechifor Date: Wed, 8 Apr 2026 06:16:49 +0300 Subject: [PATCH 10/10] Revert "trigger update" This reverts commit f9227c0323004110c1506f2339db2d27bec9aa87. --- dimos/utils/testing/moment.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dimos/utils/testing/moment.py b/dimos/utils/testing/moment.py index 7ab1b07eba..62779995c4 100644 --- a/dimos/utils/testing/moment.py +++ b/dimos/utils/testing/moment.py @@ -52,7 +52,7 @@ class OutputMoment(Generic[T], Resource): value: T | None = None transport: Transport[T] - def __init__(self, transport: Transport[T]) -> None: + def __init__(self, transport: Transport[T]): self.transport = transport def set(self, value: T) -> None: