From 35106d74177bd8f933680dedff35bd1956e67ae3 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 14:46:53 +0200 Subject: [PATCH 01/11] update to setup-ros v0.6 for linux build --- .github/workflows/build_linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 7f851c92..d67fcda9 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -25,7 +25,7 @@ jobs: sudo apt-get install -y dotnet-sdk-2.1 - name: Setup ROS2 - uses: ros-tooling/setup-ros@v0.2 + uses: ros-tooling/setup-ros@v0.6 with: required-ros-distributions: foxy From 196a1ee340f968b83d2a6203b196e65edb495a4d Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 15:05:05 +0200 Subject: [PATCH 02/11] add matrix with ubuntu-20.04 and ubuntu-22.04 --- .github/workflows/build_linux.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index d67fcda9..95bbd643 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -7,7 +7,11 @@ on: jobs: build-linux: - runs-on: ubuntu-20.04 + strategy: + matrix: + os: ['ubuntu-20.04', 'ubuntu-22.04'] + + runs-on: ${{ matrix.os }} steps: - name: Checkout source @@ -15,6 +19,7 @@ jobs: # https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1804 - name: Install .NET SDK v2.1 + if: matrix.os == 'ubuntu-20.04' run: | wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb @@ -24,6 +29,15 @@ jobs: sudo apt-get update sudo apt-get install -y dotnet-sdk-2.1 + - name: Install .NET SDK v6.0 + if: matrix.os == 'ubuntu-22.04' + run: | + wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + sudo dpkg -i packages-microsoft-prod.deb + rm packages-microsoft-prod.deb + sudo apt-get update + sudo apt-get install -y dotnet-sdk-6.0 + - name: Setup ROS2 uses: ros-tooling/setup-ros@v0.6 with: From 841738b1d258bcbf6410cdca0cf41db2fd65936f Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 15:19:23 +0200 Subject: [PATCH 03/11] use humble for ubuntu-22.04 --- .github/workflows/build_linux.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 95bbd643..adbc2d07 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -10,6 +10,13 @@ jobs: strategy: matrix: os: ['ubuntu-20.04', 'ubuntu-22.04'] + include: + - os: ubuntu-20.04 + ros_distribution: foxy + ros_version: 2 + - os: ubuntu-22.04 + ros_distribution: humble + ros_version: 2 runs-on: ${{ matrix.os }} @@ -41,13 +48,14 @@ jobs: - name: Setup ROS2 uses: ros-tooling/setup-ros@v0.6 with: - required-ros-distributions: foxy + required-ros-distributions: ${{ matrix.ros_distribution }} - name: Configure ros2_dotnet workspace run: | mkdir -p ~/ros2_dotnet_ws/src cd ~/ros2_dotnet_ws cp ${{github.workspace}}/ros2_dotnet.repos . + sed -i 's/foxy/${{ matrix.ros_distribution }}/' ${{github.workspace}}/ros2_dotnet.repos vcs import src < ros2_dotnet.repos rm -rf src/ros2_dotnet/ros2_dotnet cp -r ${{github.workspace}} src/ros2_dotnet/ros2_dotnet @@ -55,12 +63,12 @@ jobs: - name: Build ros2_dotnet source run: | - source /opt/ros/foxy/setup.bash + source /opt/ros/${{ matrix.ros_distribution }}/setup.bash cd ~/ros2_dotnet_ws colcon build --event-handlers console_cohesion+ console_package_list+ - name: Run tests run: | - source /opt/ros/foxy/setup.bash + source /opt/ros/${{ matrix.ros_distribution }}/setup.bash cd ~/ros2_dotnet_ws colcon test --event-handlers console_cohesion+ --return-code-on-test-failure --packages-select rcldotnet From 0a3174e961bcf9b7bb3647acd4983d6c0d3360d7 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 17:32:44 +0200 Subject: [PATCH 04/11] pass target framework that should be used for tests --- .github/workflows/build_linux.yml | 4 ++++ rcldotnet/CMakeLists.txt | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index adbc2d07..6962763c 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -12,13 +12,17 @@ jobs: os: ['ubuntu-20.04', 'ubuntu-22.04'] include: - os: ubuntu-20.04 + test_target_framework: netcoreapp2.0 ros_distribution: foxy ros_version: 2 - os: ubuntu-22.04 + test_target_framework: net6.0 ros_distribution: humble ros_version: 2 runs-on: ${{ matrix.os }} + env: + RCLDOTNET_TEST_TARGET_FRAMEWORK: ${{ matrix.test_target_framework }} steps: - name: Checkout source diff --git a/rcldotnet/CMakeLists.txt b/rcldotnet/CMakeLists.txt index 30b01cc6..7dc42d50 100644 --- a/rcldotnet/CMakeLists.txt +++ b/rcldotnet/CMakeLists.txt @@ -97,7 +97,17 @@ if(BUILD_TESTING) ${builtin_interfaces_ASSEMBLIES_DLL} ) + # Used by CI to test the different target frameworks in a matrix. + if(DEFINED ENV{RCLDOTNET_TEST_TARGET_FRAMEWORK}) + set(RCLDOTNET_TEST_TARGET_FRAMEWORK $ENV{RCLDOTNET_TEST_TARGET_FRAMEWORK}) + else() + set(RCLDOTNET_TEST_TARGET_FRAMEWORK "") + endif() + add_dotnet_test(test_messages + TARGET_FRAMEWORK + ${RCLDOTNET_TEST_TARGET_FRAMEWORK} + SOURCES ${CS_SOURCES} test/test_messages.cs INCLUDE_DLLS From 1c2fe5c6e58d96db82212a0d4a36c76ff82b1d10 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 17:55:58 +0200 Subject: [PATCH 05/11] don't install .NET 6 SDK on ubuntu-22.04 seems like it is already installed in the default github image, see https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md --- .github/workflows/build_linux.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 6962763c..8d434d9d 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -40,15 +40,6 @@ jobs: sudo apt-get update sudo apt-get install -y dotnet-sdk-2.1 - - name: Install .NET SDK v6.0 - if: matrix.os == 'ubuntu-22.04' - run: | - wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb - sudo dpkg -i packages-microsoft-prod.deb - rm packages-microsoft-prod.deb - sudo apt-get update - sudo apt-get install -y dotnet-sdk-6.0 - - name: Setup ROS2 uses: ros-tooling/setup-ros@v0.6 with: From 2fbe59258d48abd5b9354cb83efed61365484c71 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sun, 16 Apr 2023 11:31:56 +0200 Subject: [PATCH 06/11] use explicit *.repos files per distribution This removes the hack with replacing the ros distribution via sed in the build_linux.yaml. Updated the readme to be consistent about mentioned ros distributions as well. --- .github/workflows/build_linux.yml | 5 ++-- README.md | 20 ++++++------- ros2_dotnet.repos => ros2_dotnet_foxy.repos | 0 ros2_dotnet_humble.repos | 33 +++++++++++++++++++++ 4 files changed, 45 insertions(+), 13 deletions(-) rename ros2_dotnet.repos => ros2_dotnet_foxy.repos (100%) create mode 100644 ros2_dotnet_humble.repos diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 8d434d9d..a4b77e80 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -49,9 +49,8 @@ jobs: run: | mkdir -p ~/ros2_dotnet_ws/src cd ~/ros2_dotnet_ws - cp ${{github.workspace}}/ros2_dotnet.repos . - sed -i 's/foxy/${{ matrix.ros_distribution }}/' ${{github.workspace}}/ros2_dotnet.repos - vcs import src < ros2_dotnet.repos + cp ${{github.workspace}}/ros2_dotnet_${{ matrix.ros_distribution }}.repos . + vcs import src < ros2_dotnet_${{ matrix.ros_distribution }}.repos rm -rf src/ros2_dotnet/ros2_dotnet cp -r ${{github.workspace}} src/ros2_dotnet/ros2_dotnet vcs branch diff --git a/README.md b/README.md index 27e9f12a..b59a5eb3 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ required). For running on Linux or Windows Desktop, one can build `ros2_dotnet` (along with all desired packages containing interface definitions) as an overlay on top -of an existing ROS2 installation. The `ros2_dotnet.repos` contains all +of an existing ROS2 installation. The `ros2_dotnet_foxy.repos` contains all necessary repositories to build the core `ros2_dotnet` project along with all standard ROS2 interface packages. If you are using other packages which provide interface definitions, those must also be included in the `ros2_dotnet` workspace @@ -65,7 +65,7 @@ core of ROS2 must be compiled for UWP compatibility. Windows (Desktop) ----------------- Assuming you've installed ROS2 (pre-built binary packages) to the directory -c:\dev\ros2_eloquent per the official [installation instructions](https://index.ros.org/doc/ros2/Installation/Eloquent/Windows-Install-Binary/), +c:\dev\ros2_foxy per the official [installation instructions](https://index.ros.org/doc/ros2/Installation/Foxy/Windows-Install-Binary/), run the following from an Administrator Visual Studio 2019 Developer Command Prompt: @@ -76,25 +76,25 @@ This is done for you below in the line preceding `colcon build`. This step can/should be omitted if building on top of a built-from-source ROS2 workspace) ``` -call \dev\ros2_eloquent\local_setup.bat +call \dev\ros2_foxy\local_setup.bat md \dev\ros2_dotnet_ws\src cd \dev\ros2_dotnet_ws -curl -sk https://raw.githubusercontent.com/ros2-dotnet/ros2_dotnet/master/ros2_dotnet.repos -o ros2_dotnet.repos -vcs import \dev\ros2_dotnet_ws\src < ros2_dotnet.repos -git clone --branch eloquent https://github.com/ros2/rosidl src\ros2\rosidl +curl -sk https://raw.githubusercontent.com/ros2-dotnet/ros2_dotnet/master/ros2_dotnet_foxy.repos -o ros2_dotnet_foxy.repos +vcs import \dev\ros2_dotnet_ws\src < ros2_dotnet_foxy.repos +git clone --branch foxy https://github.com/ros2/rosidl src\ros2\rosidl colcon build --merge-install ``` Linux ----- -Assuming ROS2 eloquent installed to the standard location, run the following commands: +Assuming ROS2 foxy installed to the standard location, run the following commands: ``` -source /opt/ros/eloquent/setup.bash +source /opt/ros/foxy/setup.bash mkdir -p ~/ros2_dotnet_ws/src cd ~/ros2_dotnet_ws -wget https://raw.githubusercontent.com/ros2-dotnet/ros2_dotnet/master/ros2_dotnet.repos -vcs import ~/ros2_dotnet_ws/src < ros2_dotnet.repos +wget https://raw.githubusercontent.com/ros2-dotnet/ros2_dotnet/master/ros2_dotnet_foxy.repos +vcs import ~/ros2_dotnet_ws/src < ros2_dotnet_foxy.repos colcon build ``` diff --git a/ros2_dotnet.repos b/ros2_dotnet_foxy.repos similarity index 100% rename from ros2_dotnet.repos rename to ros2_dotnet_foxy.repos diff --git a/ros2_dotnet_humble.repos b/ros2_dotnet_humble.repos new file mode 100644 index 00000000..ff1307d5 --- /dev/null +++ b/ros2_dotnet_humble.repos @@ -0,0 +1,33 @@ +repositories: + ament_dotnet/ament_cmake_export_assemblies: + type: git + url: https://github.com/esteve/ament_cmake_export_assemblies.git + version: master + ros2/common_interfaces: + type: git + url: https://github.com/ros2/common_interfaces.git + version: humble + ros2/rcl_interfaces: + type: git + url: https://github.com/ros2/rcl_interfaces.git + version: humble + ros2/rosidl_defaults: + type: git + url: https://github.com/ros2/rosidl_defaults.git + version: humble + ros2/test_interface_files: + type: git + url: https://github.com/ros2/test_interface_files.git + version: humble + ros2/unique_identifier_msgs: + type: git + url: https://github.com/ros2/unique_identifier_msgs.git + version: humble + ros2_dotnet/dotnet_cmake_module: + type: git + url: https://github.com/ros2-dotnet/dotnet_cmake_module.git + version: master + ros2_dotnet/ros2_dotnet: + type: git + url: https://github.com/ros2-dotnet/ros2_dotnet.git + version: master From eaea459f075e1f35ba290245780433b73f17287d Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sun, 16 Apr 2023 11:39:28 +0200 Subject: [PATCH 07/11] make matrix based on ros_distribution and not on the os --- .github/workflows/build_linux.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index a4b77e80..801d563b 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -9,12 +9,16 @@ jobs: build-linux: strategy: matrix: - os: ['ubuntu-20.04', 'ubuntu-22.04'] + ros_distribution: + - foxy + - humble include: + # Foxy Fitzroy (June 2020 - May 2023) - os: ubuntu-20.04 test_target_framework: netcoreapp2.0 ros_distribution: foxy ros_version: 2 + # Humble Hawksbill (May 2022 - May 2027) - os: ubuntu-22.04 test_target_framework: net6.0 ros_distribution: humble From d3b41ce1d71f00d96923a3c2a83a02a1196ab866 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sat, 15 Apr 2023 15:43:08 +0200 Subject: [PATCH 08/11] use `libdl.so.2` instead of `libdl.so` for linux This should fix builds on ubuntu-22.04. - see https://stackoverflow.com/a/75855054 - see https://github.com/ied206/Joveler.DynLoader/issues/1 for other dotnet library with the same issue --- rcldotnet_common/DllLoadUtils.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/rcldotnet_common/DllLoadUtils.cs b/rcldotnet_common/DllLoadUtils.cs index 280ca654..6aff8e38 100644 --- a/rcldotnet_common/DllLoadUtils.cs +++ b/rcldotnet_common/DllLoadUtils.cs @@ -54,10 +54,10 @@ public class DllLoadUtilsFactory { [DllImport ("kernel32.dll", EntryPoint = "FreeLibrary", SetLastError = true, ExactSpelling = true)] private static extern int FreeLibraryDesktop (IntPtr handle); - [DllImport ("libdl.so", EntryPoint = "dlopen")] + [DllImport ("libdl.so.2", EntryPoint = "dlopen")] private static extern IntPtr dlopen_unix (String fileName, int flags); - [DllImport ("libdl.so", EntryPoint = "dlclose")] + [DllImport ("libdl.so.2", EntryPoint = "dlclose")] private static extern int dlclose_unix (IntPtr handle); [DllImport ("libdl.dylib", EntryPoint = "dlopen")] @@ -106,7 +106,7 @@ private static bool IsWindowsDesktop () { private static bool IsUnix () { try { - IntPtr ptr = dlopen_unix ("libdl.so", RTLD_NOW); + IntPtr ptr = dlopen_unix ("libdl.so.2", RTLD_NOW); dlclose_unix (ptr); return true; } catch (TypeLoadException) { @@ -205,16 +205,16 @@ IntPtr DllLoadUtils.LoadLibrary (string fileName) { internal class DllLoadUtilsUnix : DllLoadUtils { - [DllImport ("libdl.so", ExactSpelling = true)] + [DllImport ("libdl.so.2", ExactSpelling = true)] private static extern IntPtr dlopen (String fileName, int flags); - [DllImport ("libdl.so", ExactSpelling = true)] + [DllImport ("libdl.so.2", ExactSpelling = true)] private static extern IntPtr dlsym (IntPtr handle, String symbol); - [DllImport ("libdl.so", ExactSpelling = true)] + [DllImport ("libdl.so.2", ExactSpelling = true)] private static extern int dlclose (IntPtr handle); - [DllImport ("libdl.so", ExactSpelling = true)] + [DllImport ("libdl.so.2", ExactSpelling = true)] private static extern IntPtr dlerror (); const int RTLD_NOW = 2; From 7127a51afe68a9ced4a84cf28d0af64774758060 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sun, 16 Apr 2023 11:45:56 +0200 Subject: [PATCH 09/11] use .NET 6 for ubuntu-20.04 --- .github/workflows/build_linux.yml | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build_linux.yml b/.github/workflows/build_linux.yml index 801d563b..3ad22f4b 100644 --- a/.github/workflows/build_linux.yml +++ b/.github/workflows/build_linux.yml @@ -15,7 +15,7 @@ jobs: include: # Foxy Fitzroy (June 2020 - May 2023) - os: ubuntu-20.04 - test_target_framework: netcoreapp2.0 + test_target_framework: net6.0 ros_distribution: foxy ros_version: 2 # Humble Hawksbill (May 2022 - May 2027) @@ -32,17 +32,15 @@ jobs: - name: Checkout source uses: actions/checkout@v2 - # https://docs.microsoft.com/en-us/dotnet/core/install/linux-package-manager-ubuntu-1804 - - name: Install .NET SDK v2.1 + # https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu#supported-distributions + - name: Install .NET SDK v6.0 if: matrix.os == 'ubuntu-20.04' run: | - wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb + wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb - sudo add-apt-repository universe - sudo apt-get update - sudo apt-get install -y apt-transport-https + rm packages-microsoft-prod.deb sudo apt-get update - sudo apt-get install -y dotnet-sdk-2.1 + sudo apt-get install -y dotnet-sdk-6.0 - name: Setup ROS2 uses: ros-tooling/setup-ros@v0.6 From 45264b9ad30505d3f13851ad453972d20675b7c7 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Sun, 16 Apr 2023 13:21:09 +0200 Subject: [PATCH 10/11] default to .NET 6 for tests --- README.md | 2 +- rcldotnet/CMakeLists.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b59a5eb3..efa32285 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ see the relevant section below): https://github.com/ros2/ros2/wiki/Installation# Next make sure you've either installed .Net Core (preferred) https://www.microsoft.com/net/learn/get-started or Mono -https://www.mono-project.com/. (**NOTE**: For building unit tests, .NET 2.1 is +https://www.mono-project.com/. (**NOTE**: For building unit tests, .NET 6 is required). For running on Linux or Windows Desktop, one can build `ros2_dotnet` (along with diff --git a/rcldotnet/CMakeLists.txt b/rcldotnet/CMakeLists.txt index 7dc42d50..f466ee4c 100644 --- a/rcldotnet/CMakeLists.txt +++ b/rcldotnet/CMakeLists.txt @@ -101,7 +101,7 @@ if(BUILD_TESTING) if(DEFINED ENV{RCLDOTNET_TEST_TARGET_FRAMEWORK}) set(RCLDOTNET_TEST_TARGET_FRAMEWORK $ENV{RCLDOTNET_TEST_TARGET_FRAMEWORK}) else() - set(RCLDOTNET_TEST_TARGET_FRAMEWORK "") + set(RCLDOTNET_TEST_TARGET_FRAMEWORK "net6.0") endif() add_dotnet_test(test_messages From 99a3f5d005051a6ea2b2ffdcbcea5bc8bef22f69 Mon Sep 17 00:00:00 2001 From: Stefan Hoffmann Date: Thu, 20 Apr 2023 12:31:52 +0200 Subject: [PATCH 11/11] update CI status badges in README.md --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index efa32285..5b8dd439 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,12 @@ ROS2 for .NET ============= -Build status ------------- - | Target | Status | |----------|--------| -| **Universal Windows Platform (x86/x64)** | ![Build (UWP)](https://github.com/ros2-dotnet/ros2_dotnet/workflows/Build%20(UWP)/badge.svg) | -| **Windows Desktop (x64)** | ![Build (Desktop)](https://github.com/ros2-dotnet/ros2_dotnet/workflows/Build%20(Desktop)/badge.svg) | -| **Linux** | ![Build (Desktop)](https://github.com/ros2-dotnet/ros2_dotnet/workflows/Build%20(Linux)/badge.svg) | +| **Linux** | [![Build (Linux)](https://github.com/ros2-dotnet/ros2_dotnet/actions/workflows/build_linux.yml/badge.svg)](https://github.com/ros2-dotnet/ros2_dotnet/actions/workflows/build_linux.yml) | +| **Windows Desktop** | [![Build (Desktop)](https://github.com/ros2-dotnet/ros2_dotnet/actions/workflows/build_desktop.yml/badge.svg)](https://github.com/ros2-dotnet/ros2_dotnet/actions/workflows/build_desktop.yml) | + +_Windows UWP CI Builds are currently disabled, see [this issue](https://github.com/ros2-dotnet/ros2_dotnet/issues/92) for more information._ Introduction ------------