Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
52db9ef
feat: add simple devcontainer setup
MJohnson459 Apr 20, 2026
d574ab2
Install CUDA in devcontainer
MJohnson459 May 7, 2026
b6f2b5e
Move to single Dockerfile
MJohnson459 May 11, 2026
ddbd642
Clean up dockerfiles and devcontainers
MJohnson459 May 11, 2026
811cb53
Working Docker and devcontainer
MJohnson459 May 11, 2026
f549650
Update README with dev instructions
MJohnson459 May 12, 2026
3060f51
Remove old dev files
MJohnson459 May 12, 2026
c6fdac9
Cleanup PR
MJohnson459 May 12, 2026
267b798
Last bit of cleanup
MJohnson459 May 12, 2026
418b7f6
feat: transition to conda/pixi part 1
MJohnson459 May 14, 2026
0adde58
feat: can run odm after building with pixi
MJohnson459 May 14, 2026
a3b10cc
fix: remove explicit transitive dependencies
MJohnson459 May 14, 2026
923f70d
first pass at updating dockerfile
MJohnson459 May 14, 2026
db392c4
Working Dockerfile that is roughly the same size
MJohnson459 May 14, 2026
f4058e7
Cleanup and tested run
MJohnson459 May 19, 2026
ad1fa24
pixi working with more dependencies
MJohnson459 May 19, 2026
ad7be35
Cleanup
MJohnson459 May 27, 2026
c7123ee
Move to Ceres 2.2 and conda PDAL
MJohnson459 May 27, 2026
8dd3fa3
Cleanup after PDAL conda move
MJohnson459 May 27, 2026
132ff7d
feat: Remove legacy build
MJohnson459 May 19, 2026
c7dc3a3
Move laszip and untwine to conda deps
MJohnson459 May 27, 2026
6f674bc
Move exiftools to conda
MJohnson459 May 27, 2026
096f6a0
Remove orphaned External cmake files
MJohnson459 May 27, 2026
8ad2aa0
Update lock file
MJohnson459 May 27, 2026
da89c34
Simplify scripts
MJohnson459 May 27, 2026
5cdd9c0
Consistent CMAKE_BUILD_TYPE in opensfm
MJohnson459 May 27, 2026
20bd70a
Revert deletion of windows files
MJohnson459 May 27, 2026
943ea4d
Revert more non-linux removed files
MJohnson459 May 27, 2026
3f689d6
Remove unused portable hack files
MJohnson459 May 27, 2026
8faec0e
Replace portable hack with cmake hack
MJohnson459 May 27, 2026
909a7ef
Fix test values PROJ9 uses a more accurate model
MJohnson459 May 27, 2026
05edfa8
Add .gitattributes for pixi lock file
MJohnson459 May 27, 2026
bab8f49
Fix docker smoke test
MJohnson459 May 27, 2026
26fe443
Fix docker image
MJohnson459 May 27, 2026
cfb1977
feat: Native windows pixi build
MJohnson459 May 26, 2026
1f801a2
fix: Can now run ODM natively on windows
MJohnson459 May 26, 2026
49f27f3
Windows is compiling again
MJohnson459 Jun 2, 2026
b0bd6b9
gpu build working
MJohnson459 Jun 2, 2026
d94d05e
Cleanup docker images to reduce size
MJohnson459 Jun 15, 2026
abce2bf
fix: non-flag arguments to docker failed
MJohnson459 Jun 15, 2026
e64585b
feat: support osx-arm64 & linux-aarch64 platforms
MJohnson459 Jun 15, 2026
e72b042
feat: Add github workflow for macos and arm
MJohnson459 Jun 15, 2026
5ab54ff
patches for osx build
MJohnson459 Jun 15, 2026
74d6de6
More osx build patches
MJohnson459 Jun 15, 2026
4101763
Switch to python scripts
MJohnson459 Jun 17, 2026
64eaaa3
minor cleanup
MJohnson459 Jun 17, 2026
a4f5af8
fix osx build
MJohnson459 Jun 17, 2026
c40d64a
more osx patches
MJohnson459 Jun 17, 2026
a434cc5
re-enable all pixi builds
MJohnson459 Jun 17, 2026
d678630
Use upstream RenderDEM
MJohnson459 Jun 17, 2026
aa20727
Re-enable docker workflow
MJohnson459 Jun 17, 2026
600d24a
Switch from cmake to .patch files
MJohnson459 Jun 17, 2026
2476018
re-add stripped whitespace from patches
MJohnson459 Jun 17, 2026
6e6c794
Remove unused vars
MJohnson459 Jun 17, 2026
6d7ed7b
pixi update
MJohnson459 Jun 17, 2026
7f6fd45
Clean up dependencies
MJohnson459 Jun 17, 2026
1d44bc5
Separate gpu and cpu solve-groups
MJohnson459 Jun 17, 2026
321184a
Fix gpu image deps
MJohnson459 Jun 23, 2026
5359cae
Cleanup readme
MJohnson459 Jun 23, 2026
8ec55c6
Package Windows .exe from the pixi workspace
MJohnson459 Jun 17, 2026
03d6efd
Remove obsolete configure_macos.sh
MJohnson459 Jun 23, 2026
8d541c9
Move Windows installer scripts into scripts/
MJohnson459 Jun 23, 2026
06b0b35
Add make to build deps for PoissonRecon
MJohnson459 Jun 23, 2026
fb6dfee
Clean up pixi.toml
MJohnson459 Jun 23, 2026
0803c9b
Installer and PR cleanup
MJohnson459 Jun 23, 2026
fd14299
More cleanup of scripts
MJohnson459 Jun 23, 2026
32fc1f1
Add a cmake helper to avoid double apply patch
MJohnson459 Jul 1, 2026
ba1a99a
fix: restore Polygon cutline schema for Shapely 2
MJohnson459 Jul 2, 2026
9e997d9
fix: macos failed to find dynlibs
MJohnson459 Jul 3, 2026
98a0da6
Don't test windows OpenMVS in smoke
MJohnson459 Jul 3, 2026
291a0ce
Add OCI image labels carrying git commit SHA to Docker images
MJohnson459 Jul 15, 2026
8125b4b
Add static OCI descriptive labels to Docker images
MJohnson459 Jul 15, 2026
6b777c0
Add pixi docker-build task
MJohnson459 Jul 15, 2026
56a0848
Tag docker-build image with branch name off master
MJohnson459 Jul 15, 2026
67efc1b
Fix docker build
MJohnson459 Jul 15, 2026
2a29dcd
Merge branch 'master' into pixi
MJohnson459 Jul 30, 2026
90ce73f
Fixes after merge
MJohnson459 Jul 30, 2026
a433839
Patch dem2mesh vertex ring segfault
MJohnson459 Aug 3, 2026
29648a4
Update pixi platforms and resolve
MJohnson459 Aug 3, 2026
6e1ed44
Added Flag to explicitly control CUDA usage
DodgySpaniard Jul 30, 2026
6ab9dd0
Fix execution on windows
DodgySpaniard Jul 31, 2026
ee41deb
Fix macOS build
MJohnson459 Aug 3, 2026
14bbb1f
Merge branch 'master' into pixi
MJohnson459 Aug 5, 2026
e7b553a
Ship contrib tools in the runtime images
MJohnson459 Aug 13, 2026
1c54754
Merge branch 'master' into pixi
MJohnson459 Aug 13, 2026
8164dc6
Publish docker images to edge only
MJohnson459 Aug 13, 2026
2df8d82
Swap :gpu-edge for :edge-gpu to match convention
MJohnson459 Aug 13, 2026
95db3c5
Mock the CUDA virtual package during the GPU docker build
MJohnson459 Aug 19, 2026
0b79de6
Mock the CUDA virtual package in the Windows publish workflow
MJohnson459 Aug 19, 2026
bd2c910
Link OpenMVS against the CUDA driver stub when no driver is present
MJohnson459 Aug 19, 2026
cb4ed84
Give the GPU smoke test a driver library to load
MJohnson459 Aug 19, 2026
ffefa7e
Build the GPU image on pull requests
MJohnson459 Aug 19, 2026
9b37dac
Build the GPU image on the self-hosted runner
MJohnson459 Aug 19, 2026
ac3e43f
Publish the GPU image from the self-hosted runner
MJohnson459 Aug 19, 2026
3f2b45a
Leave nothing behind on the self-hosted runner
MJohnson459 Aug 20, 2026
1fccc06
Build the GPU image one worker at a time, and report the space it takes
MJohnson459 Aug 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
26 changes: 26 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
{
"name": "ODM",
"build": {
"context": "..",
"dockerfile": "../Dockerfile",
"target": "dev"
},
"features": {
// https://github.com/devcontainers/features/blob/main/src/common-utils/main.sh
// Add `odm` user for consistency with the GPU image
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "true",
"username": "odm",
"upgradePackages": "true"
}
},
"remoteUser": "odm",
"postCreateCommand": "pixi install --locked",
// Use the `code` directory for compatibility with direct Docker workflows
"workspaceMount": "source=${localWorkspaceFolder},target=/code,type=bind",
"workspaceFolder": "/code",
"mounts": [
"source=${localEnv:HOME}${localEnv:USERPROFILE},target=/home/odm,type=bind,consistency=cached"
]
}
29 changes: 29 additions & 0 deletions .devcontainer/gpu/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
{
"name": "ODM GPU",
"build": {
"context": "../..",
"dockerfile": "../../gpu.Dockerfile",
"target": "dev"
},
"features": {
// https://github.com/devcontainers/features/blob/main/src/common-utils/main.sh
// Add `odm` user for consistency with the CPU image
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": "true",
"username": "odm",
"upgradePackages": "true"
}
},
"remoteUser": "odm",
"postCreateCommand": "pixi install --locked -e gpu",
// Use the `code` directory for compatibility with direct Docker workflows
"workspaceMount": "source=${localWorkspaceFolder},target=/code,type=bind",
"workspaceFolder": "/code",
"mounts": [
"source=${localEnv:HOME}${localEnv:USERPROFILE},target=/home/odm,type=bind,consistency=cached"
],
"hostRequirements": {
"gpu": "true"
}
}
45 changes: 22 additions & 23 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
Dockerfile
SuperBuild/build
SuperBuild/download
SuperBuild/install
SuperBuild/src
build
opensfm
odm_orthophoto
odm_texturing
odm_meshing
odm_georeferencing
images_resize
.git

/contrib
/docs
/hooks
/img
/license
settings.yml
code_of_conduct.md
configure_18_04.sh
index.html
SuperBuild/build
SuperBuild/download
SuperBuild/install
SuperBuild/src
build
opensfm
odm_orthophoto
odm_texturing
odm_meshing
odm_georeferencing
images_resize
.git
venv
.pixi
scripts/pixi-shell-hook
/docs
/hooks
/img
/license
settings.yml
code_of_conduct.md
index.html
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true -diff
28 changes: 0 additions & 28 deletions .github/workflows/build_vcpkg_env.yaml

This file was deleted.

36 changes: 27 additions & 9 deletions .github/workflows/publish-docker-gpu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,33 @@ on:
push:
branches:
- master
tags:
- v*
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
runs-on: self-hosted
timeout-minutes: 2880
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Free space before build
run: |
docker builder prune -af
docker image prune -f
echo "--- free before build"
df -h /
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
with:
# One worker at a time, as the builder and prod-env stages each carry a
# multi-GB conda environment and would otherwise be built together.
config-inline: |
[worker.oci]
max-parallelism = 1
- name: Login to DockerHub
uses: docker/login-action@v1
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
Expand All @@ -33,16 +44,23 @@ jobs:
uses: docker/build-push-action@v2
with:
file: ./gpu.Dockerfile
target: runtime
platforms: linux/amd64
push: true
no-cache: true
build-args: |
GIT_COMMIT=${{ github.sha }}
BUILD_DATE=${{ steps.buildmeta.outputs.date }}
IMAGE_VERSION=${{ steps.buildmeta.outputs.version }}
tags: opendronemap/odm:gpu
# Trigger NodeODM build
- name: Dispatch NodeODM Build Event
id: nodeodm_dispatch
tags: opendronemap/odm:edge-gpu
- name: Report and reclaim space
# The runner is persistent and shared, so leave nothing behind: the image
# is in the registry by this point.
if: always()
run: |
curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" https://api.github.com/repos/OpenDroneMap/NodeODM/actions/workflows/publish-docker-gpu.yaml/dispatches --data '{"ref": "master"}'
echo "--- free after build (difference from before is what it used)"
df -h /
docker builder prune -af
docker image prune -f
echo "--- free after reclaim"
df -h /
34 changes: 14 additions & 20 deletions .github/workflows/publish-docker.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ on:
push:
branches:
- master
tags:
- v*
workflow_dispatch:

jobs:
build:
Expand All @@ -23,18 +22,10 @@ jobs:
[worker.oci]
max-parallelism = 1
- name: Login to DockerHub
uses: docker/login-action@v1
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
# Use the repository information of the checked-out code to format docker tags
- name: Docker meta
id: docker_meta
uses: crazy-max/ghaction-docker-meta@v1
with:
images: opendronemap/odm
tag-semver: |
{{version}}
- name: Compute build metadata
id: buildmeta
run: |
Expand All @@ -44,19 +35,22 @@ jobs:
id: docker_build
uses: docker/build-push-action@v2
with:
file: ./portable.Dockerfile
file: ./Dockerfile
target: runtime
platforms: linux/amd64,linux/arm64
push: true
no-cache: true
cache-from: type=registry,ref=opendronemap/odm:buildcache
cache-to: type=registry,ref=opendronemap/odm:buildcache,mode=max
build-args: |
GIT_COMMIT=${{ github.sha }}
BUILD_DATE=${{ steps.buildmeta.outputs.date }}
IMAGE_VERSION=${{ steps.buildmeta.outputs.version }}
tags: |
${{ steps.docker_meta.outputs.tags }}
opendronemap/odm:latest
# Trigger NodeODM build
- name: Dispatch NodeODM Build Event
id: nodeodm_dispatch
tags: opendronemap/odm:edge
- name: Reclaim space
# The runner is persistent and shared, so leave nothing behind: the image
# is in the registry by this point.
if: always()
run: |
curl -X POST -u "${{secrets.PAT_USERNAME}}:${{secrets.PAT_TOKEN}}" -H "Accept: application/vnd.github.everest-preview+json" -H "Content-Type: application/json" https://api.github.com/repos/OpenDroneMap/NodeODM/actions/workflows/publish-docker.yaml/dispatches --data '{"ref": "master"}'
docker builder prune -af
docker image prune -f
df -h /
56 changes: 30 additions & 26 deletions .github/workflows/publish-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- master
tags:
- v*
workflow_dispatch:

permissions:
contents: write
Expand All @@ -21,33 +22,27 @@ jobs:
build:
runs-on: windows-2022
environment: azuresigning
# The runner has no NVIDIA driver, so pixi cannot detect the __cuda virtual
# package the gpu environments require. The installer's users supply the
# driver; mock it here to match the cuda floor in pixi.toml.
env:
CONDA_OVERRIDE_CUDA: "12.0"
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
uses: actions/checkout@v6
- name: Setup pixi
uses: prefix-dev/setup-pixi@v0.9.3
with:
python-version: '3.12.9'
architecture: 'x64'
- uses: Jimver/cuda-toolkit@v0.2.24
id: cuda-toolkit
with:
cuda: '12.8.1'
- name: Setup cmake
uses: jwlawson/actions-setup-cmake@v1.13
with:
cmake-version: '3.24.x'
- name: Install venv
run: |
python -m pip install virtualenv
- name: Build sources
run: |
python configure.py build
pixi-version: latest
locked: true
# The build env (gpu) and the shipped runtime env (gpu-prod) are both needed.
environments: >-
gpu
gpu-prod
- name: Build SuperBuild (with CUDA)
run: pixi run -e gpu build
- name: Free up space
run: |
rmdir SuperBuild\download /s /q
rmdir SuperBuild\build /s /q
shell: cmd
run: cmd /c "rd /s /q SuperBuild\build 2>nul & rd /s /q SuperBuild\src 2>nul & exit /b 0"
- name: Retrieve the metadata and decode it to a file
env:
AZURESIGNING_METADATA: ${{ secrets.AZURESIGNING_METADATA }}
Expand All @@ -61,15 +56,25 @@ jobs:
tenant-id: ${{ secrets.AZURE_TENANT_ID }}
subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
- name: Create setup
run: |
python configure.py dist --signtool-path "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe" --azure-signing-metadata "%RUNNER_TEMP%\metadata.json"
run: pixi run -e gpu dist -- --signtool-path "C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x64\signtool.exe" --azure-signing-metadata "%RUNNER_TEMP%\metadata.json"
shell: cmd
- name: Upload Setup File
if: always()
uses: actions/upload-artifact@v4
with:
name: Setup
path: dist\*.exe
# Silent-install to a path different from the build dir and run the CLI in a
# shell with no inherited CONDA_PREFIX. This is the real test that the bundled
# conda env relocates: it fails here if activate.d doesn't honor %CONDA_PREFIX%.
- name: Verify relocated install
shell: cmd
run: |
for %%f in (dist\ODM_Setup_*.exe) do start /wait "" "%%f" /SILENT /SUPPRESSMSGBOXES /DIR=C:\ODMtest /LOG=C:\install.log
if not exist C:\ODMtest\run.py exit /b 1
cd /d C:\ODMtest
call win32env.bat
python -X utf8 run.py --help
- name: Upload Setup to Release
uses: svenstaro/upload-release-action@v2
if: startsWith(github.ref, 'refs/tags/')
Expand All @@ -79,4 +84,3 @@ jobs:
file_glob: true
tag: ${{ github.ref }}
overwrite: true

Loading
Loading