Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
b79b8c9
net: add macOS compatibility for TCP_KEEPIDLE
idesign0 Aug 25, 2025
dea5a38
#include <netinet/tcp.h> header fix
idesign0 Aug 25, 2025
e3b6012
refactor: Adapting the async position control to support ROS 2
AndreasKuhner Nov 28, 2025
de4260f
fix: fix debian package format to to inlclude ubuntu and arch: libfra…
kmohyeldine Dec 10, 2025
e9bc21b
feat: support lts ubuntu versions
kmohyeldine Dec 11, 2025
6099f14
refactor: Cleaned up the jammy and noble Dockerfiles
AndreasKuhner Dec 11, 2025
f186ab0
refactor: Merged different Dockerfiles and added matrix build to Jenk…
AndreasKuhner Dec 11, 2025
23ccee8
ci: parametrize container from .env
kmohyeldine Dec 12, 2025
c593c15
fix: Removed some further 'error as warning' flags and fixed some 'ma…
AndreasKuhner Dec 12, 2025
754403c
refactor: The user can now choose the ubuntu version in the dev conta…
AndreasKuhner Dec 16, 2025
f7c5485
fix: Muted and fixed serveral clang-tidy warnings
AndreasKuhner Dec 16, 2025
0d14978
docs: add supported ubuntu versions
kmohyeldine Dec 17, 2025
9595ba8
ci: add checksum for releases
kmohyeldine Dec 17, 2025
8318355
docs: update README.md
kmohyeldine Dec 18, 2025
84683d1
refactor: Default devcontainer_distro is set to ubuntu-22.04
AndreasKuhner Dec 18, 2025
f24b955
docs: update Installation from Debian Package
kmohyeldine Dec 18, 2025
7391d91
docs: update build from source
kmohyeldine Dec 18, 2025
12c8b38
bump: libfranka 0.19.0 release
kmohyeldine Dec 18, 2025
f7c29c9
ci: fix pylibfranka docu build
kmohyeldine Dec 18, 2025
2b954ec
ci: fix pylibfranka docu build
kmohyeldine Dec 18, 2025
4780b64
ci: upload changelog only once in the workflow
kmohyeldine Dec 18, 2025
76d5cad
fix: hotfix to avoid torque discontinuities with float based robot-state
AndreasKuhner Jan 14, 2026
0b98e09
build: Fixed a jenkins build problem by mixing up environment variables
AndreasKuhner Jan 14, 2026
d285aea
feat: removed useless trampoline classes, added bindings for async po…
francando Jan 9, 2026
eac6233
fix: async example is working, api cleaned
francando Jan 9, 2026
50f446d
chore: update docs
francando Jan 12, 2026
fc6c651
bump: Bump version to 0.20.0
AndreasKuhner Jan 16, 2026
123846d
adding tinyxml2 as build_depend
francando Jan 16, 2026
270d7cf
also exec_depend to be sure
francando Jan 16, 2026
11ea86d
bump version to 0.20.1
francando Jan 16, 2026
90df890
feat: create vendored wheel for pylibfranka
BarisYazici Jan 16, 2026
d8996c3
fix: push all debian packages
BarisYazici Jan 16, 2026
457285a
feat: release with the manual runs
BarisYazici Jan 16, 2026
9bb430c
fix: broken pylibfranka binding
BarisYazici Jan 16, 2026
79d3b6e
chore: include the libfranka deb package installation to the github r…
BarisYazici Jan 16, 2026
ba5ff87
bump version 0.20.2
BarisYazici Jan 16, 2026
419639d
disabled tsan tests to release libfranka as ros2 package
francando Jan 19, 2026
90bc9af
bump version to 0.20.3
francando Jan 19, 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
193 changes: 193 additions & 0 deletions .ci/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,193 @@
ARG UBUNTU_VERSION="20.04"
ARG PYTHON_VERSION="3.10"

# Start with a base image
FROM ubuntu:${UBUNTU_VERSION}
ARG UBUNTU_VERSION
ARG PYTHON_VERSION

# Set non-interactive mode
ENV DEBIAN_FRONTEND=noninteractive

ARG USER_UID=1001
ARG USER_GID=1001
ARG USERNAME=user

WORKDIR /workspaces

# Create a non-root user
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
&& chown -R $USER_UID:$USER_GID /workspaces \
&& apt-get update \
&& apt-get install -y sudo \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/* \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME

# Add LLVM repository for newer clang versions
RUN apt-get update && \
apt-get install -y wget gnupg lsb-release software-properties-common && \
wget https://apt.llvm.org/llvm.sh && \
chmod +x llvm.sh && \
./llvm.sh 18 && \
apt-get update && \
apt-get install -y clang-format-18 clang-tidy-18 \
&& ln -s $(which clang-tidy-18) /usr/bin/clang-tidy \
&& ln -s $(which clang-format-18) /usr/bin/clang-format

# Install necessary packages (without Python - we'll install specific version later)
# Note: pybind11-dev kept for devcontainer users (works with Ubuntu's default Python)
# For CI wheel builds, pip-installed pybind11 in venv is used for each Python version
RUN apt-get update \
&& apt-get install -y \
bash-completion \
build-essential \
curl \
doxygen \
dpkg \
git \
graphviz \
lcov \
libeigen3-dev \
libfmt-dev \
libpoco-dev \
lsb-release \
pybind11-dev \
rename \
valgrind \
wget \
software-properties-common \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

# Install specific Python version
# On Ubuntu 22.04, Python 3.10 is the default system Python (packages are python3-dev, python3-venv)
# For other versions, use deadsnakes PPA (packages are python3.X-dev, python3.X-venv)
RUN set -ex && \
# Check if Python version is already available as system default
SYSTEM_PYTHON_VERSION=$(python3 --version 2>/dev/null | grep -oP '\d+\.\d+' || echo "none") && \
echo "System Python: $SYSTEM_PYTHON_VERSION, Requested: ${PYTHON_VERSION}" && \
if [ "$SYSTEM_PYTHON_VERSION" = "${PYTHON_VERSION}" ]; then \
echo "Python ${PYTHON_VERSION} is already the system default, installing dev packages..." && \
apt-get update && \
apt-get install -y python3-dev python3-venv && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*; \
else \
echo "Installing Python ${PYTHON_VERSION} from deadsnakes PPA..." && \
add-apt-repository ppa:deadsnakes/ppa -y && \
apt-get update && \
apt-get install -y \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-dev \
python${PYTHON_VERSION}-venv && \
(apt-get install -y python${PYTHON_VERSION}-distutils 2>/dev/null || true) && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/* && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python${PYTHON_VERSION} 1 && \
update-alternatives --set python3 /usr/bin/python${PYTHON_VERSION}; \
fi && \
echo "Installed Python version:" && python3 --version

# Install CMake; use Kitware repo on Ubuntu 20.04 for >=3.22
RUN if [ "${UBUNTU_VERSION}" = "20.04" ]; then \
apt-get update && \
apt-get install -y wget gnupg ca-certificates software-properties-common && \
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor | tee /usr/share/keyrings/kitware-archive-keyring.gpg > /dev/null && \
echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ focal main" > /etc/apt/sources.list.d/kitware.list && \
apt-get update && \
apt-get install -y --no-install-recommends cmake=3.22.2-0kitware1ubuntu20.04.1 cmake-data=3.22.2-0kitware1ubuntu20.04.1; \
else \
apt-get update && apt-get install -y --no-install-recommends cmake; \
fi && \
cmake --version && \
dpkg --compare-versions "$(cmake --version | head -n1 | awk '{print $3}')" ge 3.22 || (echo "Error: CMake >= 3.22 is required. Got ubuntu version ${UBUNTU_VERSION}" >&2; exit 1)

# Add the necessary 3rd party dependencies for the robot-service
# Note: the order is important, change at your own risk.
RUN git clone --depth 1 --recurse-submodules --shallow-submodules --branch boost-1.77.0 https://github.com/boostorg/boost.git \
&& cd boost \
&& ./bootstrap.sh --prefix=/usr \
&& ./b2 install \
&& cd ../.. \
&& rm -rf boost

RUN git clone --depth 1 --branch 10.0.0 https://github.com/leethomason/tinyxml2.git \
&& cd tinyxml2 \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 && make install \
&& cd ../.. \
&& rm -rf tinyxml2

RUN git clone --depth 1 --branch 1.0.2 https://github.com/ros/console_bridge.git \
&& cd console_bridge \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 \
&& make install \
&& cd ../.. \
&& rm -rf console_bridge

RUN git clone --depth 1 --branch 1.0.5 https://github.com/ros/urdfdom_headers.git \
&& cd urdfdom_headers \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 && make install \
&& cd ../.. \
&& rm -rf urdfdom_headers

COPY ./urdfdom.patch /tmp/urdfdom.patch
RUN git clone --depth 1 --branch 4.0.0 https://github.com/ros/urdfdom.git \
&& cd urdfdom \
&& git apply /tmp/urdfdom.patch \
&& mkdir build && cd build \
&& cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 && make install \
&& cd ../.. \
&& rm -rf urdfdom

RUN git clone --depth 1 --recurse-submodules --shallow-submodules --branch v5.4.3 https://github.com/assimp/assimp.git \
&& cd assimp \
&& mkdir build && cd build \
&& cmake .. -DBoost_USE_STATIC_LIBS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DASSIMP_BUILD_TESTS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 && make install \
&& cd ../.. \
&& rm -rf assimp

COPY ./pinocchio.patch /tmp/pinocchio.patch
RUN git clone --depth 1 --recurse-submodules --shallow-submodules --branch v3.4.0 https://github.com/stack-of-tasks/pinocchio.git \
&& cd pinocchio \
&& git apply /tmp/pinocchio.patch \
&& mkdir build && cd build \
&& cmake .. -DBoost_USE_STATIC_LIBS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=OFF -DBUILD_PYTHON_INTERFACE=OFF -DBUILD_DOCUMENTATION=OFF -DBUILD_TESTING=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=/usr/lib \
&& make -j4 && make install \
&& cd ../.. \
&& rm -rf pinocchio

# Install Python wheel building tools inside a virtualenv to satisfy PEP 668
# Note: python3 -m venv uses ensurepip to bootstrap pip automatically
RUN python3 -m venv /opt/venv && \
/opt/venv/bin/pip install --upgrade pip setuptools wheel && \
/opt/venv/bin/pip install \
auditwheel \
build \
cibuildwheel \
twine \
patchelf \
flake8 \
numpy \
pybind11 \
cmake && \
echo "Python version in venv:" && \
/opt/venv/bin/python --version && \
/opt/venv/bin/pip --version && \
chown -R $USER_UID:$USER_GID /opt/venv

# Expose the virtualenv via env var for downstream scripts (e.g., Jenkinsfile)
ENV VIRTUAL_ENV="/opt/venv"
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"

USER $USERNAME
143 changes: 0 additions & 143 deletions .ci/Dockerfile.focal

This file was deleted.

6 changes: 3 additions & 3 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{
"name": "libfranka_container",
"dockerComposeFile": "./docker-compose.yml",
"name": "libfranka",
"dockerComposeFile": "docker-compose.yml",
"service": "libfranka_project",
"workspaceFolder": "/workspaces",
"remoteUser": "user",
"initializeCommand": "echo \"USER_UID=$(id -u $USER)\nUSER_GID=$(id -g $USER)\" > .devcontainer/.env",
"initializeCommand": "bash -c 'ENV_FILE=\".devcontainer/.env\"; UBUNTU_VERSION=$(cat devcontainer_distro 2>/dev/null || echo 22.04); if [ ! -f \"$ENV_FILE\" ]; then echo -e \"UBUNTU_VERSION=${UBUNTU_VERSION}\\nUSER_UID=$(id -u)\\nUSER_GID=$(id -g)\" > \"$ENV_FILE\"; else sed -i.bak \"s/^UBUNTU_VERSION=.*/UBUNTU_VERSION=${UBUNTU_VERSION}/\" \"$ENV_FILE\"; sed -i.bak \"s/^USER_UID=.*/USER_UID=$(id -u)/\" \"$ENV_FILE\"; sed -i.bak \"s/^USER_GID=.*/USER_GID=$(id -g)/\" \"$ENV_FILE\"; rm -f \"$ENV_FILE.bak\"; fi'",
"customizations": {
"vscode": {
"extensions": [
Expand Down
9 changes: 5 additions & 4 deletions .devcontainer/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@ services:
libfranka_project:
build:
context: ../.ci/
dockerfile: ../.ci/Dockerfile.focal
dockerfile: Dockerfile
args:
USER_UID: ${USER_UID}
USER_GID: ${USER_GID}
container_name: libfranka
USER_UID: ${USER_UID:-1000}
USER_GID: ${USER_GID:-1000}
UBUNTU_VERSION: ${UBUNTU_VERSION:-22.04}
container_name: libfranka-${UBUNTU_VERSION:-22.04}
network_mode: "host"
shm_size: 512m
privileged: true
Expand Down
Loading