Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
2405 commits
Select commit Hold shift + click to select a range
7ce7082
updated README
alexlin2 Dec 20, 2025
3e8a86d
made navigation module and modified navbot
alexlin2 Dec 21, 2025
80a4599
conformed to Ivan's nav spec, made navigation module a standalone mod…
alexlin2 Dec 22, 2025
3e43dfa
reset g1 to dev
alexlin2 Dec 22, 2025
f452140
fixed some comments
alexlin2 Dec 22, 2025
8c7a7e2
fixed all of Ivan's requests
alexlin2 Dec 22, 2025
44bf5ad
all navbot
alexlin2 Dec 23, 2025
bed5f00
use navbot
alexlin2 Dec 23, 2025
e46b3fb
made comment changes
alexlin2 Dec 23, 2025
31e94bd
should pass tests
alexlin2 Dec 23, 2025
272f982
made changes given comments
alexlin2 Dec 23, 2025
971a209
rebased origin
alexlin2 Dec 24, 2025
3b29509
passing tests
alexlin2 Dec 24, 2025
22143d9
clip/mobileclip standardized implementation
leshy Dec 24, 2025
0eba928
reid experiment
leshy Dec 24, 2025
33eafde
reid simplification
leshy Dec 24, 2025
fee1fd1
disabling single test for now
leshy Dec 24, 2025
2b7e92b
removing garbage files
leshy Dec 24, 2025
dcbafc9
correct test naming
leshy Dec 24, 2025
ffc3c46
renamde type.py -> base.py for embedding models
leshy Dec 24, 2025
7b77e69
Merge branch 'dev' into detection-qwen-skills
leshy Dec 24, 2025
1b86fbe
openclip optional, passing tests
leshy Dec 24, 2025
00d79b5
image backend test skip
leshy Dec 24, 2025
4595409
removing .claude
leshy Dec 24, 2025
9537c60
tests fix
leshy Dec 24, 2025
5282339
mobile clip optional
leshy Dec 24, 2025
d7ff432
small bug fix
alexlin2 Dec 24, 2025
198ff75
Merge pull request #632 from dimensionalOS/alexl_ros_nav_intergration
spomichter Dec 24, 2025
9c029be
add more robust autoconnect
paul-nechifor Dec 23, 2025
0b57483
Merge branch 'dev' into add-autoconnect-back2
paul-nechifor Dec 24, 2025
7d1a047
CI code cleanup
paul-nechifor Dec 24, 2025
a19c188
torch reid import issues fix
leshy Dec 24, 2025
197ae32
removing package optionality for now
leshy Dec 24, 2025
0ac98b5
cli tooling theme
leshy Dec 24, 2025
77e541d
small colors fixes
leshy Dec 24, 2025
4d5eea2
embedding models heavy tests import fix
leshy Dec 24, 2025
230a9ce
resolved import issues
leshy Dec 24, 2025
d0c84c1
unified import resolution strategy
leshy Dec 24, 2025
935660e
lcmspy rpc color
leshy Dec 24, 2025
767cfa2
removed scrollbars
leshy Dec 24, 2025
2f8bb52
disabled embedding tests for now
leshy Dec 24, 2025
1a7a334
marking tests as gpu, not heavy
leshy Dec 24, 2025
cb4d062
Merge pull request #674 - detection pipeline rewrite, embedding, vl m…
spomichter Dec 24, 2025
528fbcf
Merge pull request #687 from dimensionalOS/terminal-theme
spomichter Dec 24, 2025
9722548
Fix spatial memory bug in unitree g1
alexlin2 Dec 24, 2025
9d58812
Merge branch 'dev' of github.com:dimensionalOS/dimos into dev
spomichter Dec 24, 2025
3d3caa2
CI code cleanup
spomichter Dec 24, 2025
814da1b
Merge pull request #689 from dimensionalOS/dev-g1-changes
spomichter Dec 24, 2025
efacebd
Merge branch 'navspec' into ivan-g1
leshy Dec 24, 2025
50a4d3a
rewrote ros nav
leshy Dec 24, 2025
90792b0
rosnav pointcloud frequency
leshy Dec 24, 2025
37fe554
camera frequency adjustment
leshy Dec 24, 2025
38eb5c7
detection module deployment
leshy Dec 24, 2025
2c99422
fixing run files
leshy Dec 24, 2025
8673154
module3d scene update
leshy Dec 24, 2025
53dec64
moduledb deploy
leshy Dec 24, 2025
67f019b
spatial mem, nav, skills
leshy Dec 24, 2025
08de905
wrap
leshy Dec 24, 2025
09c7d6a
bugfix
leshy Dec 24, 2025
7346f2f
modular g1 run files
leshy Dec 25, 2025
941aeed
good run files
leshy Dec 25, 2025
cdb7596
skill stuff
paul-nechifor Dec 24, 2025
a473e1b
fix one test
paul-nechifor Dec 25, 2025
78d2cd1
fix test
paul-nechifor Dec 25, 2025
089c0fe
cleanup
leshy Dec 25, 2025
42f045d
Merge branch 'dev' into add-autoconnect-back2
paul-nechifor Dec 25, 2025
253066d
blueprint
paul-nechifor Dec 25, 2025
a61b574
small changes
leshy Dec 25, 2025
597901e
detection module fixes, g1 run files work
leshy Dec 25, 2025
ec446ec
Merge pull request #684 from dimensionalOS/add-autoconnect-back2
paul-nechifor Dec 25, 2025
fef02ae
ruff autofixes
paul-nechifor Dec 25, 2025
8b46af4
fix some issues
paul-nechifor Dec 25, 2025
b8014df
fix
paul-nechifor Dec 25, 2025
13fb9c9
from future
paul-nechifor Dec 25, 2025
3c136cb
CI code cleanup
paul-nechifor Dec 25, 2025
a6b8824
Remove unused.
paul-nechifor Dec 25, 2025
2389c73
fix unused
paul-nechifor Dec 25, 2025
112cf79
fix bad imports
paul-nechifor Dec 25, 2025
86e1781
more autofixes
paul-nechifor Dec 25, 2025
f939841
add types
paul-nechifor Dec 25, 2025
baa7636
add safe annotations
paul-nechifor Dec 25, 2025
5958123
auto typing
paul-nechifor Dec 25, 2025
9664533
new ruff
paul-nechifor Dec 25, 2025
ac557ef
fix bad numpy
paul-nechifor Dec 25, 2025
3fb0dfe
fix ros polyfill
paul-nechifor Dec 25, 2025
668b3df
CI code cleanup
paul-nechifor Dec 25, 2025
16d5195
remove optype
paul-nechifor Dec 25, 2025
947cdbe
go2 clean
leshy Dec 25, 2025
ea6e795
add remapping
paul-nechifor Dec 25, 2025
530fc38
remapping
paul-nechifor Dec 25, 2025
5d99838
camera cleanup
leshy Dec 25, 2025
3aa5eed
moved new run stuff to unitree/
leshy Dec 25, 2025
20d6fe8
typing fixes in progress
leshy Dec 25, 2025
0e988e2
run.py fix
leshy Dec 25, 2025
d10f62c
type fixes finished
leshy Dec 25, 2025
35008d1
import issue cleanup
leshy Dec 25, 2025
aacb2f5
spec files
leshy Dec 25, 2025
e19221a
tests cleanuo, removed unitree_webrtc extra files
leshy Dec 25, 2025
68f7f4a
Merge branch 'dev' into ivan-g1
leshy Dec 25, 2025
3db198f
import fixes
leshy Dec 25, 2025
d61913c
test fix
leshy Dec 25, 2025
b4b363e
fix quat
paul-nechifor Dec 25, 2025
4fe3ec7
add ros docker integration
paul-nechifor Dec 25, 2025
e1eca11
new path
paul-nechifor Dec 25, 2025
5dd9afb
improve names
paul-nechifor Dec 26, 2025
3ca48af
fix it
paul-nechifor Dec 26, 2025
a2db87d
Add initial environment.
paul-nechifor Dec 26, 2025
d855bf1
CI code cleanup
paul-nechifor Dec 26, 2025
7878b72
remove more unnecessary stuff
paul-nechifor Dec 26, 2025
bb8bf5a
more cleanup
paul-nechifor Dec 26, 2025
5a5d14d
remove with
paul-nechifor Dec 26, 2025
169ad6e
Revert "remove with"
paul-nechifor Dec 26, 2025
af44887
proper rename and remove DIMOS_
paul-nechifor Dec 26, 2025
97433cb
WIP g1 runfile conversion to blueprint
spomichter Dec 26, 2025
fde13d7
Temp comment out websocket vis throwing connection errors to odom and…
alexlin2 Dec 26, 2025
ce63240
add demos
paul-nechifor Dec 26, 2025
f349881
Merge pull request #698 from dimensionalOS/rename
paul-nechifor Dec 26, 2025
03593d0
add JPEG LCM
paul-nechifor Dec 25, 2025
10510a1
fix join
paul-nechifor Dec 25, 2025
c09a451
add blueprint
paul-nechifor Dec 26, 2025
8724d96
fix script
paul-nechifor Dec 26, 2025
165979b
JpegSharedMemoryEncoderMixin
paul-nechifor Dec 26, 2025
d84f34e
jpeg_shm_channels
paul-nechifor Dec 26, 2025
43b02f6
tests pass
leshy Dec 26, 2025
c4d6fa9
standard configuration for rosnav
leshy Dec 26, 2025
f2b8de7
sensor transform for G1 head
leshy Dec 26, 2025
7eb64e3
fixing mujoco, twiststamped
leshy Dec 26, 2025
5f2850c
update dimos-lcm
paul-nechifor Dec 26, 2025
948bab9
loader experiment
leshy Dec 26, 2025
6370bb6
random anim
leshy Dec 26, 2025
f4f4c1e
dep
leshy Dec 26, 2025
f3b4ce3
Merge pull request #693 - JPEG Image compression on LCM transport
spomichter Dec 26, 2025
d8cdc4a
Merge dev.
paul-nechifor Dec 26, 2025
885d81d
autofix
paul-nechifor Dec 26, 2025
958aa10
remove unused
paul-nechifor Dec 26, 2025
06650c1
remove scipy-stubs
paul-nechifor Dec 26, 2025
bd8db30
Merge pull request #694 - Added Ruff fixes and MyPy typechecking acro…
spomichter Dec 26, 2025
d4c4e64
better logo
leshy Dec 26, 2025
a35bfd1
renamed human-cli to humancli (faster to type)
leshy Dec 26, 2025
5375790
Working G1 runfiles (spatial memory not working)
spomichter Dec 26, 2025
eefcb49
CI code cleanup
spomichter Dec 26, 2025
5e89aa3
Merge branch 'dev' into new-g1-blueprint-runfiles
paul-nechifor Dec 26, 2025
1fb1fa9
CI code cleanup
paul-nechifor Dec 26, 2025
ac1a100
fix with_ removal
paul-nechifor Dec 26, 2025
f1b1687
redo ruff/mypy chages
paul-nechifor Dec 26, 2025
7a01a80
Merge branch 'dev' into rebase-ivan-g1
paul-nechifor Dec 26, 2025
ecd4fbf
fix missing imports
paul-nechifor Dec 26, 2025
a2863af
fix Twist
paul-nechifor Dec 26, 2025
b585993
Merge branch 'dev' into dimos-rosnav-docker
paul-nechifor Dec 26, 2025
c9a5861
move to docker/navigation
paul-nechifor Dec 26, 2025
d73a0dd
fix import
paul-nechifor Dec 26, 2025
17a5fa5
fix log
paul-nechifor Dec 26, 2025
4d1e631
detic ruff undo
leshy Dec 26, 2025
488dd74
fix nvidia runtime error with GPU auto-detection and CPU fallback
naveenkul Dec 26, 2025
64411af
switch to ros-navigation-autonomy-stack
paul-nechifor Dec 26, 2025
3a3c897
add trap to shut down x access
paul-nechifor Dec 26, 2025
4b14ac7
Merge pull request #709 - Bugfixes on Detection3d and Unitree rewrite…
spomichter Dec 26, 2025
24fdc1e
Fix merge conflict with depth removal
spomichter Dec 26, 2025
b86b9e8
Change to global config
spomichter Dec 26, 2025
691568f
Merge pull request #712 from dimensionalOS/remove-depth-go2-blueprint
spomichter Dec 26, 2025
2937e7e
Merge branch 'dev' into dimos-rosnav-docker
paul-nechifor Dec 26, 2025
04624bf
use demo_ros_navigation
paul-nechifor Dec 26, 2025
085610d
spacing
paul-nechifor Dec 26, 2025
8ad1340
Merge branch 'dev' into anim
leshy Dec 26, 2025
739bac3
fix navigation
paul-nechifor Dec 27, 2025
1e07955
use ROS_DOMAIN_ID=42
paul-nechifor Dec 27, 2025
67c8554
fix go2
paul-nechifor Dec 26, 2025
6a04df7
remove use prefix
paul-nechifor Dec 27, 2025
6b20518
added npm dependency
alexlin2 Dec 27, 2025
4374918
remove-robot-4
paul-nechifor Dec 27, 2025
4d0c5a0
Merge pull request #714 from dimensionalOS/fix-go2
alexlin2 Dec 27, 2025
ca0b957
Merge branch 'dev' into remove-robot-4
paul-nechifor Dec 27, 2025
72cf785
fix more ruff
paul-nechifor Dec 27, 2025
3667a95
e2e dimos-robot test with skills
paul-nechifor Dec 27, 2025
a8790f7
remove bad
paul-nechifor Dec 27, 2025
42b805f
skip test in CI
paul-nechifor Dec 27, 2025
f886502
Merge branch 'dev' into new-g1-blueprint-runfiles-with-ruff
paul-nechifor Dec 27, 2025
4209609
add g1 sim
paul-nechifor Dec 27, 2025
32c4b7d
fix tests
paul-nechifor Dec 27, 2025
cf6867b
visualize everything
paul-nechifor Dec 27, 2025
792363e
fix spatial memory
paul-nechifor Dec 27, 2025
f819896
add list
paul-nechifor Dec 27, 2025
cf961d5
add setup script for new os installation for easy deployments
naveenkul Dec 27, 2025
1393acc
use main branch for public use
naveenkul Dec 27, 2025
c204ccd
include hardware in docker
paul-nechifor Dec 27, 2025
f6e66d6
update
paul-nechifor Dec 28, 2025
4e4597e
Merge branch 'g1-sim-v2' into remove-robot-4
paul-nechifor Dec 28, 2025
c054628
fix chatgpt comments
paul-nechifor Dec 28, 2025
4c9bfc9
describe how to configure lidar and wifi
paul-nechifor Dec 28, 2025
49d9d89
CI code cleanup
paul-nechifor Dec 28, 2025
fbb091d
Merge branch 'g1-sim-v2' into remove-robot-4
paul-nechifor Dec 28, 2025
3fc3286
rename
paul-nechifor Dec 28, 2025
d47fca5
Added livox config for G1 edu
spomichter Dec 28, 2025
377185c
CI code cleanup
spomichter Dec 28, 2025
4a03ee8
split build method
paul-nechifor Dec 28, 2025
294a9e8
fix use of go2
paul-nechifor Dec 28, 2025
960dab8
Merge branch 'g1-sim-v2' into remove-robot-4
paul-nechifor Dec 28, 2025
122a9af
replace old way
paul-nechifor Dec 28, 2025
30ecc71
declare rpc methods
paul-nechifor Dec 28, 2025
ae9d078
remove unused
paul-nechifor Dec 28, 2025
f48354c
add common interface
paul-nechifor Dec 28, 2025
7c265d2
resolve on interface not just concrete class
paul-nechifor Dec 28, 2025
2dd6686
fix B027
paul-nechifor Dec 28, 2025
fb085ff
generate MID360_config.json
paul-nechifor Dec 28, 2025
260cfb0
fix tests
paul-nechifor Dec 28, 2025
afd6094
fix chatgpt comment
paul-nechifor Dec 28, 2025
5f82c1c
add in_this_branc
paul-nechifor Dec 28, 2025
707fdaa
add missing __all__
paul-nechifor Dec 28, 2025
df03edd
remove CAMERA_DEVICE and update ROBOT_CONFIG_PATH comment
paul-nechifor Dec 28, 2025
4cbb1ff
add LIDAR_GATEWAY
paul-nechifor Dec 28, 2025
a96bd27
continue even without nvidia runtime
paul-nechifor Dec 28, 2025
02d1fba
use runc for hardware
paul-nechifor Dec 28, 2025
c2949b1
add turbojpeg
paul-nechifor Dec 28, 2025
3bfc798
describe what ./build.sh does in the readme.
paul-nechifor Dec 28, 2025
543d186
mark directory as safe
paul-nechifor Dec 28, 2025
d6cbb66
Merge branch 'dev' into dimos-rosnav-docker
paul-nechifor Dec 28, 2025
5c5a7ba
install git-lfs
paul-nechifor Dec 28, 2025
da88fac
increase timeout
paul-nechifor Dec 28, 2025
aba6f82
activate automatically
paul-nechifor Dec 28, 2025
541959d
fix number of rpcs
paul-nechifor Dec 28, 2025
63f5dfb
added back cancel topic
alexlin2 Dec 28, 2025
69c8695
stop is now on the right topic
alexlin2 Dec 28, 2025
26a6986
fix wait_exit
paul-nechifor Dec 28, 2025
d7078a0
Merge pull request #724 - Added G1 Blueprint runfiles and reintroduce…
spomichter Dec 28, 2025
2333d33
Merge branch 'dev' into remove-robot-4
paul-nechifor Dec 28, 2025
edc2702
remove unused imports
paul-nechifor Dec 28, 2025
fce3991
convert g1 skills
paul-nechifor Dec 28, 2025
1f63968
CI code cleanup
paul-nechifor Dec 28, 2025
47a2e23
fix some typing issues
paul-nechifor Dec 28, 2025
9e4c4c8
Merge pull request #717 - Update G1/Go2 skills to work in blueprint a…
spomichter Dec 28, 2025
06f62ba
Merge branch 'dev' into dimos-robot-e2e
spomichter Dec 28, 2025
f586880
Merge pull request #716 - Add dimos-robot end-to-end test with agents
spomichter Dec 28, 2025
8b28886
Added Unitree g1 EDU lidar IP addresses to the .env
spomichter Dec 28, 2025
65c2acb
Merge pull request #700 - Dockerfile for Dimensional and Navigation s…
spomichter Dec 28, 2025
de00549
Merge pull request #701 - HumanCLI animation
spomichter Dec 28, 2025
f241f81
Added ROBOT_IP for docker preconfig if using webrtc connection on uni…
spomichter Dec 29, 2025
4c1afda
Added robot ip check to dockerfile
spomichter Dec 29, 2025
fd5e8d3
Readme updates
spomichter Dec 29, 2025
6b3ccb4
Force lidar ethernet setup in start.sh
spomichter Dec 29, 2025
e29f2e6
Merge pull request #738 from dimensionalOS/g1-navigation-documentatio…
spomichter Dec 29, 2025
46e7b42
dimos-robot to dimos
paul-nechifor Dec 29, 2025
351bf9a
CI code cleanup
paul-nechifor Dec 29, 2025
0988e40
Changed navigation readme to new dimos run
spomichter Dec 29, 2025
cbf3f19
Merge pull request #740 from dimensionalOS/dimos-robot-to-dimos
spomichter Dec 29, 2025
bd1b268
tested and integrated moondream3 and hosted moondream
alexlin2 Dec 30, 2025
d9a0835
Added moondream to readme and pyproject
alexlin2 Dec 30, 2025
5dd2b2f
integrated EdgeTAM, persistent and fast tracking
alexlin2 Dec 30, 2025
a2476d3
Working Ivan g1 detection in blueprints
spomichter Dec 29, 2025
3d23e53
shit
alexlin2 Dec 31, 2025
7b6ed4b
Tested 3D Tracking using edgeTAM
alexlin2 Dec 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 32 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
{
"name": "dimos-dev",
"image": "ghcr.io/dimensionalos/dev:dev",
"customizations": {
"vscode": {
"extensions": [
"charliermarsh.ruff",
"ms-python.vscode-pylance"
]
}
},
"containerEnv": {
"PYTHONPATH": "${localEnv:PYTHONPATH}:/workspaces/dimos"
},
"postCreateCommand": "git config --global --add safe.directory /workspaces/dimos && cd /workspaces/dimos && pre-commit install",
"settings": {
"notebook.formatOnSave.enabled": true,
"notebook.codeActionsOnSave": {
"notebook.source.fixAll": "explicit",
"notebook.source.organizeImports": "explicit"
},
"editor.codeActionsOnSave": {
"source.fixAll": "explicit",
"source.organizeImports": "explicit"
},
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true
},
"runArgs": [
"--cap-add=NET_ADMIN"
]
}
109 changes: 109 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# Version control
.git
.gitignore
.github/

# Editor and IDE files
.vscode
.idea
*.swp
*.swo
.cursor/
.cursorignore

# Shell history
.bash_history
.zsh_history
.history

# Python virtual environments
**/venv/
**/.venv/
**/env/
**/.env/
**/*-venv/
**/*_venv/
**/ENV/


# Python build artifacts
__pycache__/
*.pyc
*.pyo
*.pyd
.Python
*.egg-info/
dist/
build/
*.so
*.dylib

# Environment file
.env
.env.local
.env.*.local

# Large data files
data/*
!data/.lfs/

# Model files (can be downloaded at runtime)
*.pt
*.pth
*.onnx
*.pb
*.h5
*.ckpt
*.safetensors
checkpoints/
assets/model-cache

# Logs
*.log

# Large media files (not needed for functionality)
*.png
*.jpg
*.jpeg
*.gif
*.mp4
*.mov
*.avi
*.mkv
*.webm
*.MOV

# Large font files
*.ttf
*.otf

# Node modules (for dev tools, not needed in container)
node_modules/
package-lock.json
package.json
bin/node_modules/

# Database files
*.db
*.sqlite
*.sqlite3

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Temporary files
tmp/
temp/
*.tmp
.python-version

# Exclude all assets subdirectories
assets/*/*
!assets/agent/prompt.txt
!assets/*
5 changes: 5 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if ! has nix_direnv_version || ! nix_direnv_version 3.0.6; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.6/direnvrc" "sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM="
fi
use flake .
dotenv
5 changes: 5 additions & 0 deletions .envrc.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
if ! has nix_direnv_version || ! nix_direnv_version 3.0.6; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.0.6/direnvrc" "sha256-RYcUJaRMf8oF5LznDrlCXbkOQrywm0HDv1VjYGaJGdM="
fi
use flake .
dotenv_if_exists
2 changes: 2 additions & 0 deletions .envrc.venv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
source env/bin/activate
dotenv_if_exists
17 changes: 15 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
* text=auto
# Handle line endings automatically for files Git considers text,
# converting them to LF on checkout.
* text=auto eol=lf
# Ensure Python files always use LF for line endings.
*.py text eol=lf

# Treat designated file types as binary and do not alter their contents or line endings.
*.png binary
*.jpg binary
*.ico binary
*.pdf binary
# Explicit LFS tracking for test files
/data/.lfs/*.tar.gz filter=lfs diff=lfs merge=lfs -text
*.onnx filter=lfs diff=lfs merge=lfs -text binary
*.mp4 filter=lfs diff=lfs merge=lfs -text binary
*.mov filter=lfs diff=lfs merge=lfs -text binary
*.gif filter=lfs diff=lfs merge=lfs -text binary
59 changes: 59 additions & 0 deletions .github/actions/docker-build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: docker-build
description: "Composite action to build and push a Docker target to GHCR"
inputs:
target:
description: "Dockerfile target stage to build"
required: true
tag:
description: "Image tag to push"
required: true
freespace:
description: "Remove large pre‑installed SDKs before building to free space"
required: false
default: "false"
context:
description: "Docker build context"
required: false
default: "."

runs:
using: "composite"
steps:
- name: Free up disk space
if: ${{ inputs.freespace == 'true' }}
shell: bash
run: |
echo -e "pre cleanup space:\n $(df -h)"
sudo rm -rf /opt/ghc
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/share/boost
sudo rm -rf /usr/local/lib/android
echo -e "post cleanup space:\n $(df -h)"

- uses: actions/checkout@v4

- uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}

- uses: crazy-max/ghaction-github-runtime@v3

- uses: docker/setup-buildx-action@v3
with:
driver: docker-container
install: true
use: true

- name: Build & Push ${{ inputs.target }}
uses: docker/build-push-action@v6
with:
push: true
context: ${{ inputs.context }}
file: docker/${{ inputs.target }}/Dockerfile
tags: ghcr.io/dimensionalos/${{ inputs.target }}:${{ inputs.tag }}
cache-from: type=gha,scope=${{ inputs.target }}
cache-to: type=gha,mode=max,scope=${{ inputs.target }}
build-args: |
FROM_TAG=${{ inputs.tag }}
149 changes: 149 additions & 0 deletions .github/workflows/_docker-build-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
name: docker-build-template
on:
workflow_call:
inputs:
from-image: { type: string, required: true }
to-image: { type: string, required: true }
dockerfile: { type: string, required: true }
freespace: { type: boolean, default: true }
should-run: { type: boolean, default: false }
context: { type: string, default: '.' }

# you can run this locally as well via
# ./bin/dockerbuild [image-name]
jobs:
build:
runs-on: [self-hosted, Linux]
permissions:
contents: read
packages: write

steps:
- name: Fix permissions
if: ${{ inputs.should-run }}
run: |
sudo chown -R $USER:$USER ${{ github.workspace }} || true

- uses: actions/checkout@v4
if: ${{ inputs.should-run }}
with:
fetch-depth: 0

- name: free up disk space
# explicitly enable this for large builds
if: ${{ inputs.should-run && inputs.freespace }}
run: |
echo -e "pre cleanup space:\n $(df -h)"
sudo rm -rf /opt/ghc
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/share/boost
sudo rm -rf /usr/local/lib/android

echo "=== Cleaning images from deleted branches ==="

# Get list of all remote branches
git ls-remote --heads origin | awk '{print $2}' | sed 's|refs/heads/||' > /tmp/active_branches.txt

# Check each docker image tag against branch list
docker images --format "{{.Repository}}:{{.Tag}}|{{.ID}}" | \
grep "ghcr.io/dimensionalos" | \
grep -v ":<none>" | \
while IFS='|' read image_ref id; do
tag=$(echo "$image_ref" | cut -d: -f2)

# Skip if tag matches an active branch
if grep -qx "$tag" /tmp/active_branches.txt; then
echo "Branch exists: $tag - keeping $image_ref"
else
echo "Branch deleted: $tag - removing $image_ref"
docker rmi "$id" 2>/dev/null || true
fi
done

rm -f /tmp/active_branches.txt

USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
echo "Pre-docker-cleanup disk usage: ${USAGE}%"

if [ $USAGE -gt 60 ]; then
echo "=== Running quick cleanup (usage > 60%) ==="

# Keep newest image per tag
docker images --format "{{.Repository}}|{{.Tag}}|{{.ID}}" | \
grep "ghcr.io/dimensionalos" | \
grep -v "<none>" | \
while IFS='|' read repo tag id; do
created_ts=$(docker inspect -f '{{.Created}}' "$id" 2>/dev/null)
created_unix=$(date -d "$created_ts" +%s 2>/dev/null || echo "0")
echo "${repo}|${tag}|${id}|${created_unix}"
done | sort -t'|' -k1,1 -k2,2 -k4,4nr | \
awk -F'|' '
{
repo=$1; tag=$2; id=$3
repo_tag = repo ":" tag

# Skip protected tags
if (tag ~ /^(main|dev|latest)$/) next

# Keep newest per tag, remove older duplicates
if (!(repo_tag in seen_combos)) {
seen_combos[repo_tag] = 1
} else {
system("docker rmi " id " 2>/dev/null || true")
}
}'

docker image prune -f
docker volume prune -f
fi

# Aggressive cleanup if still above 85%
USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $USAGE -gt 85 ]; then
echo "=== AGGRESSIVE cleanup (usage > 85%) - removing all except main/dev ==="

# Remove ALL images except main and dev tags
docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" | \
grep -E "ghcr.io/dimensionalos" | \
grep -vE ":(main|dev)$" | \
awk '{print $2}' | xargs -r docker rmi -f || true

docker container prune -f
docker volume prune -a -f
docker network prune -f
docker image prune -f
fi

echo -e "post cleanup space:\n $(df -h)"

- uses: docker/login-action@v3
if: ${{ inputs.should-run }}
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

# required for github cache of docker layers
- uses: crazy-max/ghaction-github-runtime@v3
if: ${{ inputs.should-run }}

# required for github cache of docker layers
- uses: docker/setup-buildx-action@v3
if: ${{ inputs.should-run }}
with:
driver: docker-container
install: true
use: true

- uses: docker/build-push-action@v6
if: ${{ inputs.should-run }}
with:
push: true
context: ${{ inputs.context }}
file: docker/${{ inputs.dockerfile }}/Dockerfile
tags: ${{ inputs.to-image }}
cache-from: type=gha,scope=${{ inputs.dockerfile }}
cache-to: type=gha,mode=max,scope=${{ inputs.dockerfile }}
#cache-from: type=gha,scope=${{ inputs.dockerfile }}-${{ inputs.from-image }}
#cache-to: type=gha,mode=max,scope=${{ inputs.dockerfile }}-${{ inputs.from-image }}
build-args: FROM_IMAGE=${{ inputs.from-image }}
Loading