Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
98725c5
add arm support
jeff-hykin Feb 10, 2026
8696799
-
jeff-hykin Feb 10, 2026
5913387
Update dependency specifications for open3d to support ARM and non AR…
Kaweees Feb 10, 2026
3470deb
Merge branch 'dev' into jeff/arm_support
jeff-hykin Feb 11, 2026
cf097a2
patch for CI
jeff-hykin Feb 11, 2026
17fabf8
fix mypy errors
jeff-hykin Feb 12, 2026
87702f4
Fix: conditionally include xcbuild for Darwin platforms only
Kaweees Feb 12, 2026
f6e6794
Fix: conditionally exclude packages without ARM wheels
Kaweees Feb 12, 2026
3318e91
format
jeff-hykin Feb 12, 2026
9c4ef0f
try to make mypy CI happy
jeff-hykin Feb 12, 2026
37f05dc
remove unused
jeff-hykin Feb 12, 2026
d4f53ca
Merge branch 'dev' into jeff/arm_support
jeff-hykin Feb 12, 2026
bf457f1
Merge branch 'dev' into jeff/arm_support
jeff-hykin Feb 12, 2026
bd3b49d
basic CI test
jeff-hykin Feb 16, 2026
dd90ef4
only run on python changes
jeff-hykin Feb 17, 2026
bda7800
Revert "only run on python changes"
jeff-hykin Feb 17, 2026
7b2309d
clean up
jeff-hykin Feb 17, 2026
5d70fac
test
jeff-hykin Feb 17, 2026
366599e
-
jeff-hykin Feb 17, 2026
5d58aaa
Merge branch 'dev' into jeff/fix/ci
jeff-hykin Feb 17, 2026
aa763eb
Merge branch 'dev' into jeff/fix/ci
jeff-hykin Feb 18, 2026
ce0110e
add a fast docs checker
jeff-hykin Feb 18, 2026
a5cff27
add missing command
jeff-hykin Feb 18, 2026
fefcf26
Merge branch 'jeff/fix/gen-diagrams' of github.com:dimensionalOS/dimo…
jeff-hykin Feb 18, 2026
f254a3c
Apply suggestion from @greptile-apps[bot]
jeff-hykin Feb 18, 2026
aaa4e98
fix
jeff-hykin Feb 18, 2026
028429a
Merge branch 'jeff/fix/gen-diagrams' of github.com:dimensionalOS/dimo…
jeff-hykin Feb 18, 2026
1056faa
Update bin/gen-diagrams
jeff-hykin Feb 18, 2026
7c29734
-
jeff-hykin Feb 18, 2026
ba7be91
Merge branch 'dev' into jeff/arm_support
jeff-hykin Feb 18, 2026
45dfc78
revert mypy stuff
jeff-hykin Feb 18, 2026
a0625d3
fix mypy CI divergence
jeff-hykin Feb 18, 2026
bfa7ac7
fix drake issue on MacOS so that mypy can run locally
jeff-hykin Feb 18, 2026
5eccc35
simplify
jeff-hykin Feb 18, 2026
ab3fed4
add fast-test to prevent pytoml edits that break mypy on macos
jeff-hykin Feb 18, 2026
195ecbd
link
jeff-hykin Feb 18, 2026
affd471
Merge branch 'jeff/arm_support' of github.com:dimensionalOS/dimos int…
jeff-hykin Feb 18, 2026
9fd66a0
report errors
jeff-hykin Feb 18, 2026
37e656e
add time based punishment for branch name
jeff-hykin Feb 18, 2026
68fff75
add ci-slow
jeff-hykin Feb 18, 2026
cc1b20b
Update .github/workflows/fast-test.yml
jeff-hykin Feb 18, 2026
08bf02c
Update bin/ci-fast
jeff-hykin Feb 18, 2026
f25e558
Update .github/workflows/fast-docs.yml
jeff-hykin Feb 18, 2026
f16bbbb
add arm
jeff-hykin Feb 18, 2026
b7d8c53
add exit
jeff-hykin Feb 18, 2026
df31c5d
1
jeff-hykin Feb 18, 2026
f533708
convert to python for docs-only check
jeff-hykin Feb 18, 2026
35719e2
Merge branch 'jeff/fix/ci' of github.com:dimensionalOS/dimos into jef…
jeff-hykin Feb 18, 2026
81bbc26
Merge branch 'jeff/fix/gen-diagrams' of github.com:dimensionalOS/dimo…
jeff-hykin Feb 18, 2026
26e7f54
fix greptile change
jeff-hykin Feb 18, 2026
85fa19c
fix good catch by CI for python 3.10 issue with lock file
jeff-hykin Feb 18, 2026
e0849db
fixup minor aspects
jeff-hykin Feb 18, 2026
7d1cd3e
Merge branch 'dev' of github.com:dimensionalOS/dimos into jeff/fix/ci
jeff-hykin Feb 18, 2026
1be6ecf
only install brew if needed
jeff-hykin Feb 18, 2026
214e748
Update bin/pr-name-check
jeff-hykin Feb 19, 2026
25aedba
Update bin/pr-name-check
jeff-hykin Feb 19, 2026
d06c169
Merge branch 'jeff/fix/ci' of github.com:dimensionalOS/dimos into jef…
jeff-hykin Feb 20, 2026
91b9a00
-
jeff-hykin Feb 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 5 additions & 40 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ jobs:
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
cmd: "pytest && pytest -m ros" # run tests that depend on ros as well
cmd: ".venv/bin/pytest && .venv/bin/pytest -m ros" # run tests that depend on ros as well
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-tests:
Expand All @@ -227,7 +227,7 @@ jobs:
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
cmd: "pytest"
cmd: ".venv/bin/pytest"
dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }}

# we run in parallel with normal tests for speed
Expand All @@ -243,7 +243,7 @@ jobs:
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
cmd: "pytest -m heavy"
cmd: ".venv/bin/pytest -m heavy"
dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


run-lcm-tests:
Expand All @@ -258,7 +258,7 @@ jobs:
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
cmd: "pytest -m lcm"
cmd: ".venv/bin/pytest -m lcm"
dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }}

run-integration-tests:
Expand All @@ -273,7 +273,7 @@ jobs:
uses: ./.github/workflows/tests.yml
secrets: inherit
with:
cmd: "pytest -m integration"
cmd: ".venv/bin/pytest -m integration"
dev-image: dev:${{ (needs.check-changes.outputs.python == 'true' || needs.check-changes.outputs.dev == 'true') && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }}

run-mypy:
Expand All @@ -292,41 +292,6 @@ jobs:
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' }}

# Run module tests directly to avoid pytest forking issues
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we need to restore old code, lets use git as it was meant to be (instead of having giant blocks of commented out code

# run-module-tests:
# needs: [check-changes, dev]
# if: ${{
# always() &&
# needs.check-changes.result == 'success' &&
# ((needs.dev.result == 'success') ||
# (needs.dev.result == 'skipped' &&
# needs.check-changes.outputs.tests == 'true'))
# }}
# runs-on: [self-hosted, x64, 16gb]
# container:
# image: ghcr.io/dimensionalos/dev:${{ needs.check-changes.outputs.dev == 'true' && needs.dev.result == 'success' && needs.check-changes.outputs.branch-tag || 'dev' }}
# steps:
# - name: Fix permissions
# run: |
# sudo chown -R $USER:$USER ${{ github.workspace }} || true
#
# - uses: actions/checkout@v4
# with:
# lfs: true
#
# - name: Configure Git LFS
# run: |
# git config --global --add safe.directory '*'
# git lfs install
# git lfs fetch
# git lfs checkout
#
# - name: Run module tests
# env:
# CI: "true"
# run: |
# /entrypoint.sh bash -c "pytest -m module"

ci-complete:
needs: [check-changes, ros, python, ros-python, dev, ros-dev, run-tests, run-heavy-tests, run-lcm-tests, run-integration-tests, run-ros-tests, run-mypy]
runs-on: [self-hosted, Linux]
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/fast-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: docs

on:
pull_request:
branches:
- main
- dev
paths:
- 'docs/**'
workflow_dispatch:

permissions:
contents: read

jobs:
check_links:
runs-on: [self-hosted, Linux]
steps:
- uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
Copy link
Member Author

@jeff-hykin jeff-hykin Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In this workflow (documentation checks) the version shouldn't matter


- name: Run doclinks # Note: doesn't need uv python, just needs some python to run the script
Copy link
Contributor

@leshy leshy Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

git-commit hooks run this, so this is already executed by our code-cleanup action in CI

Copy link
Member Author

@jeff-hykin jeff-hykin Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking we would change it where this is the only thing that would run on .md file edits (to make it really fast to merge doc changes). If we keep code cleanup though, yeah I guess it would be good to remove it.

I guess there are those whitespace checks in pre-commit that still effect docs

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

not sure if missing something, why add complexity for speed gains if pre commit stuff runs in less then a second?

run: |
python -m dimos.utils.docs.doclinks docs/

- uses: leshy/md-babel-py@main
with:
files: 'docs/**/*.md'
fail-on-change: true
# maybe later we can enforce python, for now just do diagram langs
Copy link
Member Author

@jeff-hykin jeff-hykin Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously we weren't checking diagram generation AFAIK, this adds that

args: --lang asymptote,pikchr,openscad,diagon
52 changes: 52 additions & 0 deletions .github/workflows/fast-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: test-fast

on:
push:
branches:
- main
- dev
paths:
- 'pyproject.toml'
- 'setup.py'
- 'uv.lock'
- 'dimos/**'
- '!dimos/**/*.md'
workflow_dispatch:

permissions:
contents: read

jobs:
pytest_fast:
strategy:
matrix:
os: [ubuntu-24.04, macos-15, ubuntu-24.04-arm]
Copy link
Member Author

@jeff-hykin jeff-hykin Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Discussion needed: do we want to host our own macos / linux-arm testers? (or keep this as-is and run on github)


runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4

- name: Setup uv
uses: astral-sh/setup-uv@v4
with:
enable-cache: true
python-version: "3.10"
cache-suffix: ${{ runner.os }}-${{ runner.arch }}-py3.10

- name: Install System dependencies
run: |
# these lines should stay exactly in sync with docs/development/README.md
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an important change: we should have something on CI that matches our docs, and this new test does that

if [ "$OSTYPE" = "linux-gnu" ]; then
sudo apt-get update
sudo apt-get install -y curl g++ portaudio19-dev git-lfs libturbojpeg python3-dev pre-commit
# On macOS (12.6 or newer)
elif [ "$(uname)" = "Darwin" ]; then
# install homebrew if not installed
! command -v brew && /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# install dependencies
brew install gnu-sed gcc portaudio git-lfs libjpeg-turbo python pre-commit
fi

- name: Install and run tests
run: |
bin/ci-fast
16 changes: 8 additions & 8 deletions .github/workflows/readme.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 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)
Docker.yml checks for relevant file changes and re-builds required images
Currently images have a dependency chain of ros -> python -> dev (in the future this might be a tree and can fork)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Spelling fix


On top of the dev image then tests are run.
Dev image is also what developers use in their own IDE via devcontainers
Expand All @@ -24,19 +24,19 @@ more info @ https://docs.github.com/en/packages/working-with-a-github-packages-r

login to docker via

`sh
```sh
echo TOKEN | docker login ghcr.io -u GITHUB_USER --password-stdin
`
```

pull dev image (dev branch)
`sh
```sh
docker pull ghcr.io/dimensionalos/dev:dev
`
```

pull dev image (master)
`sh
```sh
docker pull ghcr.io/dimensionalos/dev:latest
`
```

# todo

Expand Down
26 changes: 26 additions & 0 deletions bin/ci-fast
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
Copy link
Member Author

@jeff-hykin jeff-hykin Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file is the overlap between local and CI: this file gets executed by CI and is executed locally (when running bin/check-pr)


#
# note this command is used by CI directly, and also is used by bin/pr-check
# this is intentional: to keep them in sync
# if something should only be done locally, change bin/pr-check
# if something should only be done on CI, change .github/workflows/fast-test.yml
#
set -euo pipefail

echo "Ensuring pip versions are correct"
time uv sync --frozen --extra misc --extra visualization --extra agents --extra web --extra perception --extra unitree --extra manipulation --extra cpu --extra dev --extra sim --extra drone --extra base
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure this should be here. In CI, the packages should have been installed in the python step, no?

And locally this removes packages. (I do uv sync --all-extras locally.)

Copy link
Member Author

@jeff-hykin jeff-hykin Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, AFAIK the github uv python action doesn install with --frozen which is what is needed to prevent mypy from diverging. Just run the workflow and you'll see this command does cause installs.

Running the command when everything is already installed is almost instant (no reinstall, just performs a check).

As for locally, its still basically necessary. I agree uninstallation isnt ideal but I don't think theres a way to say "keep all the features I selected (dont uninstall anything) but use the frozen versions from UV". If you dont want to run the command thats fine but IMO we should at least have one command that exactly replicates CI

Copy link
Member Author

@jeff-hykin jeff-hykin Feb 20, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can try to make a "use frozen versions of everything but dont uninstall anything" command. If its not too hacky maybe that would be useful


echo "Running pre-commit checks"
time pre-commit run --all-files

echo "Running mypy checks"
time uv run mypy --python-version 3.10 dimos
time uv run mypy --python-version 3.12 dimos
Copy link
Member Author

@jeff-hykin jeff-hykin Feb 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be faster by excuting in parallel, but I opted for simplicity. No cache ~5min on github runners, so its pretty fast


echo "# "
echo "# "
echo "# pytest fast"
echo "# "
echo "# "
time uv run bin/pytest-fast
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

pytest-fast has this:

. .venv/bin/activate
exec pytest "$@" dimos

You probably just want to run pytest without any -m, not ./bin/pytest-fast.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My thought was, if we edit pytest-fast (to exclude something, or add something) we would want that change to be in sync with CI.

41 changes: 41 additions & 0 deletions bin/ci-slow
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env bash

#
# this file is supposed to mimic CI as closesly as possible, the main difference is it doesn't detect changes it just runs everything
#
set -euo pipefail

echo "If you get permission errors try: echo YOUR_GITHUB_AUTH_TOKEN | docker login ghcr.io -u GITHUB_USER --password-stdin"

run_in_image() {
local image="$1"
local cmd="$2"

if [ "$(uname)" = "Darwin" ]; then
docker run --rm -it -v "$PWD:/workspace" -w /workspace --platform linux/amd64 -e CI=1 "ghcr.io/dimensionalos/${image}:dev" /entrypoint.sh bash -lc "$cmd"
else
docker run --rm -it -v "$PWD:/workspace" -w /workspace -e CI=1 "ghcr.io/dimensionalos/${image}:dev" /entrypoint.sh bash -lc "$cmd"
fi
}

echo "Running checks equivalent to .github/workflows/docker.yml test jobs..."

echo
echo "== ros-dev: pytest && pytest -m ros =="
run_in_image "ros-dev" "pytest && pytest -m ros"

echo
echo "== dev: pytest =="
run_in_image "dev" "pytest"

echo
echo "== dev: pytest -m heavy =="
run_in_image "dev" "pytest -m heavy"

echo
echo "== dev: pytest -m lcm =="
run_in_image "dev" "pytest -m lcm"

echo
echo "== dev: pytest -m integration =="
run_in_image "dev" "pytest -m integration"
Copy link
Contributor

@paul-nechifor paul-nechifor Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're running all of them sequentially, you might as well run a single command:

run_in_image "dev" "-m 'not (tool or module or neverending or mujoco)'"

32 changes: 32 additions & 0 deletions bin/gen-diagrams
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/env bash
set -euo pipefail

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$REPO_ROOT"

# if md-babel-py doesnt exist
if [ -z "$(command -v "md-babel-py")" ]; then
# if nix doesnt exist
if [ -z "$(command -v "nix")" ]; then
echo "Error: md-babel-py required for running gen-diagrams." >&2
echo " Either install nix or install md-babel-py" >&2
echo " https://github.com/leshy/md-babel-py" >&2
exit 1
# use nix if local command doesn't exist
else
md-babel-py() {
nix run github:leshy/md-babel-py -- "$@"
}
fi
fi

diagram_langs="asymptote,pikchr,openscad,diagon"
if [[ "$#" -gt 0 ]]; then
for arg in "$@"; do
md-babel-py run "$arg" --lang "$diagram_langs"
done
else
while IFS= read -r file; do
md-babel-py run "$file" --lang "$diagram_langs"
done < <(find ./docs -type f -name '*.md' | sort)
fi
67 changes: 67 additions & 0 deletions bin/pr-check
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
#!/usr/bin/env python3
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is what everyone should run locally before making a pull request.
It

  1. checks branch name (you can ignore the error and keep going)
  2. runs only doclink checks if only markdown is edited
  3. runs bin/ci-fast if more than just markdown is edited

A lot of good enhancements could be added, but I wanted to start simple

Copy link
Contributor

@paul-nechifor paul-nechifor Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why just the fast tests? Shouldn't people run all the tests? (The non-fast ones are more commonly broken on dev especially since a few of them don't run in CI at all.)


from __future__ import annotations

import os
from pathlib import Path
import subprocess

repo_root = Path(__file__).resolve().parent.parent
os.chdir(repo_root)


def main() -> int:
# 1. name check (Note: doesn't throw even on fail)
subprocess.run(["bin/pr-name-check"], check=False, text=True)

# 2. check if only markdown changes
changed_files = get_changed_files()
for each in changed_files:
print(f"Changed file: {each}")
if all(changed_file.endswith(".md") for changed_file in changed_files):
print("All detected changes are Markdown files; just running doc tests.")
subprocess.run(
["python", "-m", "dimos.utils.docs.doclinks", "docs/"], check=True, text=True
)
return 0

# 3. run ci checks (uv install, mypy, ruff, pytest)
return subprocess.run(["bin/ci-fast"], text=True).returncode


def get_changed_files() -> set[str]:
def has_ref(ref: str) -> bool:
result = subprocess.run(
["git", "show-ref", "--verify", "--quiet", ref],
text=True,
capture_output=True,
)
return result.returncode == 0

if has_ref("refs/heads/dev"):
base_ref = "dev"
elif has_ref("refs/remotes/origin/dev"):
base_ref = "origin/dev"
else:
print("Could not find 'dev' or 'origin/dev' to compare changes against.")
raise SystemExit(1)

def run_lines(cmd: list[str]) -> list[str]:
return [
line
for line in subprocess.run(
cmd, check=True, text=True, capture_output=True
).stdout.splitlines()
if line.strip()
]

changed_files: set[str] = set()
changed_files.update(run_lines(["git", "diff", "--name-only", f"{base_ref}...HEAD"]))
changed_files.update(run_lines(["git", "diff", "--name-only"]))
changed_files.update(run_lines(["git", "diff", "--name-only", "--cached"]))
changed_files.update(run_lines(["git", "ls-files", "--others", "--exclude-standard"]))
return changed_files


if __name__ == "__main__":
raise SystemExit(main())
Loading