-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.dev
More file actions
81 lines (71 loc) · 3.65 KB
/
Copy pathDockerfile.dev
File metadata and controls
81 lines (71 loc) · 3.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
ARG ROS_DISTRO=jazzy
FROM ros:${ROS_DISTRO}-ros-base
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV ROS_DISTRO=${ROS_DISTRO}
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential cmake ninja-build \
git curl wget jq \
python3-dev python3-pip python3-venv \
clang clang-format clang-tidy cppcheck \
libusb-1.0-0-dev libudev-dev \
udev usbutils \
lttng-tools python3-lttngust babeltrace2 \
# wrapped-ROS rSkills + lifecycle-peer
# services. moveit + moveit-resources-panda back the in-tree
# `rskill-moveit-multi-joints-none` rSkill and its integration test
# (`tests/integration/test_moveit_joints_franka.py`). nav2 +
# nav2-msgs back the `openral-nav2-navigate-to-pose` rSkill.
# slam-toolbox is the first concrete reasoner-managed background service
# (`packages/openral_slam_bringup/`); nav-msgs carries the
# OccupancyGrid the SlamMapBridge subscribes to. Mirrors the
# matching block in `docker/inference/Dockerfile.x86` so the dev
# shell runs the same launches + integration tests as deploy.
ros-${ROS_DISTRO}-moveit \
ros-${ROS_DISTRO}-moveit-msgs \
ros-${ROS_DISTRO}-moveit-resources-panda-moveit-config \
ros-${ROS_DISTRO}-nav2-bringup \
ros-${ROS_DISTRO}-nav2-msgs \
ros-${ROS_DISTRO}-slam-toolbox \
ros-${ROS_DISTRO}-nav-msgs \
# geometric world-collision via OctoMap. `octomap` +
# `octomap-msgs` + `tf2-geometry-msgs` are the build/runtime deps of
# `packages/openral_octomap_bridge/` (the octree→OccupancyVoxels node
# that feeds the C++ safety kernel's allocation-free voxel check).
# `octomap-server` builds the 3D octree from a depth point cloud and
# is the upstream that produces the `octomap_msgs/Octomap` the bridge
# subscribes to — keeps the full octree→bridge→kernel chain runnable
# in the dev shell.
ros-${ROS_DISTRO}-octomap \
ros-${ROS_DISTRO}-octomap-msgs \
ros-${ROS_DISTRO}-octomap-server \
ros-${ROS_DISTRO}-tf2-geometry-msgs \
&& rm -rf /var/lib/apt/lists/*
# F9 (LTTng opt-in): the distro's ``python3-lttngust`` installs into
# /usr/lib/python3/dist-packages — outside the uv venv. Surface it on
# PYTHONPATH so ``openral_observability.tracing_lttng._resolve_backend``
# picks the working 2.13.x binding instead of falling back to the JSONL
# tracer. PyPI's ``lttngust`` 2.7.1 is broken on Python 3.12+ (uses removed
# ``time.clock()``); the distro package routes through ``lttngust.compat._clock``
# and is the only working install path. ``OPENRAL_ROS2_TRACING`` is left
# unset by default; setting it to ``1`` at runtime activates the tracer.
ENV PYTHONPATH="/usr/lib/python3/dist-packages:${PYTHONPATH}"
# uv (fast Python package manager)
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
ENV PATH="/root/.local/bin:${PATH}"
# just
RUN curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
WORKDIR /workspace
# Copy dependency manifests first so Docker layer-caches the uv install step.
# We need the full workspace layout so uv can resolve all member packages.
COPY pyproject.toml uv.lock* ./
COPY python/core/pyproject.toml ./python/core/pyproject.toml
COPY python/cli/pyproject.toml ./python/cli/pyproject.toml
# Create minimal package src dirs so uv workspace resolution doesn't error
# on missing src trees (the real source is mounted at runtime via docker-compose).
RUN mkdir -p python/core/src/openral_core \
python/cli/src/openral_cli && \
touch python/core/src/openral_core/__init__.py \
python/cli/src/openral_cli/__init__.py
RUN uv sync --frozen --all-packages || uv sync --all-packages
CMD ["bash"]