diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1daf25c..e2a036e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,4 +1,10 @@ -on: [push] +on: + push: + branches: + - master + pull_request: + branches: + - master name: cactus-rt @@ -53,3 +59,13 @@ jobs: # - name: Run example # run: docker/scripts/04-example.sh + + build-and-test-ros: + runs-on: [self-hosted, noble, real-time] + env: + image_name: ${{ github.workflow }}-ci-${{ github.ref_name }} + steps: + - uses: actions/checkout@v3 + + - name: Test ROS in docker + run: scripts/test-ros-in-docker diff --git a/docker/Dockerfile b/docker/Dockerfile index 5c313d3..7193ad8 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -1,4 +1,6 @@ -FROM ubuntu:noble +ARG base_image=ubuntu:noble + +FROM ${base_image} RUN set -xe; \ export DEBIAN_FRONTEND=noninteractive; \ diff --git a/docker/scripts/run-ros2.sh b/docker/scripts/run-ros2.sh new file mode 100755 index 0000000..2d1f806 --- /dev/null +++ b/docker/scripts/run-ros2.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +export WORKSPACE_DIR=/workspace + +set -xe + +cd $WORKSPACE_DIR +colcon build --cmake-args "-DENABLE_CLANG_TIDY=ON" diff --git a/scripts/test-ros-in-docker b/scripts/test-ros-in-docker new file mode 100755 index 0000000..b7e32a6 --- /dev/null +++ b/scripts/test-ros-in-docker @@ -0,0 +1,12 @@ +#!/bin/bash + +IMAGE_NAME=cactus-rt-ros2-test + +cd docker +docker build --build-arg base_image=ros:jazzy-ros-base-noble . -t $IMAGE_NAME +cd .. +docker run --rm \ + -v $(pwd):/workspace/src/cactus-rt \ + $IMAGE_NAME \ + -- \ + "/workspace/src/cactus-rt/docker/scripts/run-ros2.sh" diff --git a/src/cactus_rt/ros2/ros2_adapter.cc b/src/cactus_rt/ros2/ros2_adapter.cc index a3bfcdf..bb3fdf6 100644 --- a/src/cactus_rt/ros2/ros2_adapter.cc +++ b/src/cactus_rt/ros2/ros2_adapter.cc @@ -16,7 +16,7 @@ void Ros2Adapter::TimerCallback() { } void Ros2Adapter::DrainQueues() { - std::scoped_lock lock(mut_); + const std::scoped_lock lock(mut_); for (const auto& publisher : publishers_) { // Hopefully the thread is not publishing so quickly that a single