diff --git a/.github/workflows/foxy_focal.yml b/.github/workflows/foxy_focal.yml new file mode 100644 index 0000000..5260a12 --- /dev/null +++ b/.github/workflows/foxy_focal.yml @@ -0,0 +1,15 @@ +name: ros2-foxy-focal + +on: + push + +jobs: + ros2_foxy_focal_ci: + name: foxy (focal) + uses: ./.github/workflows/ros2.yml + with: + ROS_DISTRO: foxy + ROS_REPO: testing + OS_NAME: ubuntu + OS_CODE_NAME: focal + ALLOW_FAIL: false \ No newline at end of file diff --git a/.github/workflows/galactic_focal.yml b/.github/workflows/galactic_focal.yml new file mode 100644 index 0000000..39f6e44 --- /dev/null +++ b/.github/workflows/galactic_focal.yml @@ -0,0 +1,15 @@ +name: ros2-galactic-focal + +on: + push + +jobs: + ros2_galactic_focal_ci: + name: galactic (focal) + uses: ./.github/workflows/ros2.yml + with: + ROS_DISTRO: galactic + ROS_REPO: testing + OS_NAME: ubuntu + OS_CODE_NAME: focal + ALLOW_FAIL: false \ No newline at end of file diff --git a/.github/workflows/humble_jammy.yml b/.github/workflows/humble_jammy.yml new file mode 100644 index 0000000..4332206 --- /dev/null +++ b/.github/workflows/humble_jammy.yml @@ -0,0 +1,15 @@ +name: ros2-humble-jammy + +on: + push + +jobs: + ros2_humble_jammy_ci: + name: humble (jammy) + uses: ./.github/workflows/ros2.yml + with: + ROS_DISTRO: humble + ROS_REPO: testing + OS_NAME: ubuntu + OS_CODE_NAME: jammy + ALLOW_FAIL: false \ No newline at end of file diff --git a/.github/workflows/iron_jammy.yml b/.github/workflows/iron_jammy.yml new file mode 100644 index 0000000..b289972 --- /dev/null +++ b/.github/workflows/iron_jammy.yml @@ -0,0 +1,15 @@ +name: ros2-iron-jammy + +on: + push + +jobs: + ros2_iron_jammy_ci: + name: iron (jammy) + uses: ./.github/workflows/ros2.yml + with: + ROS_DISTRO: iron + ROS_REPO: testing + OS_NAME: ubuntu + OS_CODE_NAME: jammy + ALLOW_FAIL: false diff --git a/.github/workflows/ros2.yml b/.github/workflows/ros2.yml new file mode 100644 index 0000000..dfba116 --- /dev/null +++ b/.github/workflows/ros2.yml @@ -0,0 +1,41 @@ +name: ros2 + +on: + workflow_call: + inputs: + ROS_DISTRO: + required: true + type: string + ROS_REPO: + required: true + type: string + OS_NAME: + required: true + type: string + OS_CODE_NAME: + required: true + type: string + ALLOW_FAIL: + required: true + type: boolean + +jobs: + ros2_ci: + name: ROS2 + runs-on: ubuntu-latest + continue-on-error: ${{ inputs.ALLOW_FAIL }} + env: + CCACHE_DIR: "${{ github.workspace }}/.ccache" + steps: + - name: Check out the naoqi_driver2 repo + uses: actions/checkout@v2 + - name: Fetch/store directory used by ccache + uses: actions/cache@v2 + with: + path: ${{ env.CCACHE_DIR }} + key: ccache-${{ inputs.ROS_DISTRO }}-${{ inputs.ROS_REPO }}-${{github.run_id}} + restore-keys: | + ccache-${{ inputs.ROS_DISTRO }}-${{ inputs.ROS_REPO }}- + - name: Run industrial CI + uses: 'ros-industrial/industrial_ci@master' + env: ${{ inputs }} \ No newline at end of file diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 807b531..c89c5a7 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,17 @@ Changelog for package pepper_meshes ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +3.0.0 (2023-11-22) +------------------ +* Update status badges +* Add CI +* Interactive agreement by default + Explicit option in command line to agree to license. + Improved interaction and messages. +* Improved detection of the platform +* Update maintainers +* Contributors: Victor Paléologue + 2.0.1 (2022-09-13) ------------------ * Merge branch 'fix_binaries' into main diff --git a/CMakeLists.txt b/CMakeLists.txt index cac1915..6eb1aea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,101 +2,51 @@ cmake_minimum_required(VERSION 3.5) project(pepper_meshes) find_package(ament_cmake REQUIRED) -ament_package() # When getting a new binay, the MD5 might change, and the folder hierarchy too # read comments below to adapt -set(PACKAGE_SHARE_DIR ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}) -set(TMP_DIR ${PACKAGE_SHARE_DIR}/tmp) +set(TMP_DIR ${CMAKE_CURRENT_BINARY_DIR}) set(INSTALLER_PATH ${TMP_DIR}/installer.run) -# Try to figure out the architecture -string(FIND ${CMAKE_INSTALL_PREFIX} "i686" IS_32) -message(STATUS "Architecture is apparently 32 (-1 for no): ${IS_32}") -if(${IS_32} STREQUAL "-1") -# Trust CMAKE_SYSTEM_PROCESSOR which does not work on the farm -if (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") -set(IS_32 FALSE) +if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "$i.86$") + message(STATUS "Downloading 32 bit installer") + set(INSTALLER_URL "https://github.com/ros-naoqi/pepper_meshes_installer/raw/master/peppermeshes-0.2.0-linux-installer.run") + set(INSTALLER_MD5 9e78f24b52838e704210881f92c0983d) +elseif(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64") + message(STATUS "Downloading 64 bit installer") + set(INSTALLER_URL "https://github.com/ros-naoqi/pepper_meshes_installer/raw/master/peppermeshes-0.2.0-linux-x64-installer.run") + set(INSTALLER_MD5 9e78f24b52838e704210881f92c0983d) else() -set(IS_32 TRUE) -endif() + message(FATAL_ERROR "Mesh installer is not compatible with your host architecture '${CMAKE_HOST_SYSTEM_PROCESSOR}'") endif() -if (NOT ${IS_32}) -message(STATUS "Downloading 64 bit installer") -file(DOWNLOAD -"https://github.com/ros-naoqi/pepper_meshes_installer/raw/master/peppermeshes-0.2.0-linux-x64-installer.run" - ${INSTALLER_PATH} SHOW_PROGRESS - INACTIVITY_TIMEOUT 60 - EXPECTED_MD5 9e78f24b52838e704210881f92c0983d -) -else() -message(STATUS "Downloading 32 bit installer") -file(DOWNLOAD -"https://github.com/ros-naoqi/pepper_meshes_installer/raw/master/peppermeshes-0.2.0-linux-installer.run" - ${INSTALLER_PATH} SHOW_PROGRESS +file(DOWNLOAD ${INSTALLER_URL} ${INSTALLER_PATH} + SHOW_PROGRESS INACTIVITY_TIMEOUT 60 - EXPECTED_MD5 f48a610633d2db48bc84db16f4847b70 + EXPECTED_MD5 ${INSTALLER_MD5} ) -endif() # specify the interesting folder in the archive. You might want to change # that for a new binary where the structure is different set(TMP_MESH_PATH ${TMP_DIR}/meshes) -# final path in devel/install space -set(FINAL_MESH_PATH share/${PROJECT_NAME}/) - -# make the file executable to install -file(COPY ${INSTALLER_TMP_PATH} - FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - DESTINATION ${TMP_DIR} -) +# Where to install the meshes and textures +# relative to the share folder of the package. +set(INSTALL_DESTINATION_IN_SHARE ${PROJECT_NAME}) -# add a target for devel space -add_custom_target(${PROJECT_NAME}_meshes - COMMAND ${INSTALLER_PATH} --mode text --prefix ${TMP_DIR} - COMMAND cp -fr ${TMP_MESH_PATH} ${PACKAGE_SHARE_DIR} - COMMAND rm -fr ${TMP_DIR}/rollback* -) - -# uncompress the meshes during install -install(CODE -" -# uncompress the archive -message(STATUS \"using ${INSTALLER_PATH} to decompress to ${TMP_DIR}\") -execute_process(COMMAND ${INSTALLER_PATH} --mode unattended --prefix ${TMP_DIR} - OUTPUT_VARIABLE OUT - ERROR_VARIABLE ERROR - RESULT_VARIABLE RESULT -) -message(STATUS \"intall out: \${OUT}\") -message(STATUS \"install error: \${ERROR}\") -message(STATUS \"install result: \${RESULT}\") - -execute_process(COMMAND ls - WORKING_DIRECTORY ${TMP_DIR} - OUTPUT_VARIABLE OUT_LS - ERROR_VARIABLE ERROR_LS - RESULT_VARIABLE RESULT_LS -) -message(STATUS \"ls out: \${OUT_LS}\") -message(STATUS \"ls error: \${ERROR_LS}\") -message(STATUS \"ls result: \${RESULT_LS}\") - -execute_process(COMMAND file ${TMP_DIR}/installer.run - OUTPUT_VARIABLE OUT_FILE - ERROR_VARIABLE ERROR_FILE_CMD - RESULT_VARIABLE RESULT_FILE -) -message(STATUS \"file out: \${OUT_FILE}\") -message(STATUS \"file error: \${ERROR_FILE_CMD}\") -message(STATUS \"file result: \${RESULT_FILE}\") -" +# install the meshes in the build directory when building +message(STATUS "Will unpack meshes from the installer: \n${INSTALLER_PATH} --prefix ${TMP_DIR} ${INSTALL_MODE_FLAG}") +add_custom_target(install_meshes ALL + COMMAND chmod +x ${INSTALLER_PATH} + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/install_with_auto_mode.sh ${INSTALLER_PATH} --prefix ${TMP_DIR} + BYPRODUCTS ${TMP_MESH_PATH} + TERMINAL ) # install the archive install(DIRECTORY ${TMP_MESH_PATH} - DESTINATION ${FINAL_MESH_PATH}/ + DESTINATION share/${PROJECT_NAME} ) + +ament_package() diff --git a/README.md b/README.md index a0f1caa..5cce057 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,7 @@ of the meshes as this could result in heavy cloning. ## Status -ROS Distro | Binary Status | Source status | -|-------------------|-------------------|-------------------| -Humble | | -Galactic | [![Build Status](https://build.ros2.org/job/Gbin_uF64__pepper_meshes__ubuntu_focal_amd64__binary/badge/icon)](https://build.ros2.org/job/Gbin_uF64__pepper_meshes__ubuntu_focal_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Gsrc_uF__pepper_meshes__ubuntu_focal__source/badge/icon)](https://build.ros2.org/job/Gsrc_uF__pepper_meshes__ubuntu_focal__source/) -Foxy | [![Build Status](https://build.ros2.org/job/Fbin_uF64__pepper_meshes__ubuntu_focal_amd64__binary/badge/icon)](https://build.ros2.org/job/Fbin_uF64__pepper_meshes__ubuntu_focal_amd64__binary/) | [![Build Status](https://build.ros2.org/job/Fsrc_uF__pepper_meshes__ubuntu_focal__source/badge/icon)](https://build.ros2.org/job/Fsrc_uF__pepper_meshes__ubuntu_focal__source/) +ROS Distro | Binary Status | Source status | GitHub Status | +|-------------------|-------------------|-------------------|--------------------| +Humble | [![ros2-humble-jammy-bin-status-badge](https://build.ros2.org/job/Hbin_uJ64__pepper_meshes__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Hbin_uJ64__pepper_meshes__ubuntu_jammy_amd64__binary) | [![ros2-humble-jammy-src-status-badge](https://build.ros2.org/job/Hsrc_uJ__pepper_meshes__ubuntu_jammy__source/badge/icon)](https://build.ros2.org/job/Hsrc_uJ__pepper_meshes__ubuntu_jammy__source) | [![ros2-humble-jammy](https://github.com/ros-naoqi/pepper_meshes2/actions/workflows/humble_jammy.yml/badge.svg?branch=main)](https://github.com/ros-naoqi/pepper_meshes2/actions/workflows/humble_jammy.yml) +Iron | [![ros2-iron-jammy-bin-status-badge](https://build.ros2.org/job/Ibin_uJ64__pepper_meshes__ubuntu_jammy_amd64__binary/badge/icon)](https://build.ros2.org/job/Ibin_uJ64__pepper_meshes__ubuntu_jammy_amd64__binary) | [![ros2-iron-jammy-src-status-badge](https://build.ros2.org/job/Isrc_uJ__pepper_meshes__ubuntu_jammy__source/badge/icon)](https://build.ros2.org/job/Isrc_uJ__pepper_meshes__ubuntu_jammy__source) | [![ros2-iron-jammy](https://github.com/ros-naoqi/pepper_meshes2/actions/workflows/iron_jammy.yml/badge.svg?branch=main)](https://github.com/ros-naoqi/pepper_meshes2/actions/workflows/iron_jammy.yml) diff --git a/install_with_auto_mode.sh b/install_with_auto_mode.sh new file mode 100755 index 0000000..f02265a --- /dev/null +++ b/install_with_auto_mode.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -e + +# Installer should show up to the user if it is not an automated job. +if [ -n "$DEBIAN_FRONTEND" ]; then + if [ "$DEBIAN_FRONTEND" = "noninteractive" ]; then + INSTALL_MODE_FLAG=("--mode" "unattended") + elif [ "$DEBIAN_FRONTEND" = "readline" ]; then + INSTALL_MODE_FLAG=("--mode" "text") + fi +fi +# For GitHub Actions this works better +if [ -n "$CI" ] && [ "$CI" = 1 ]; then + INSTALL_MODE_FLAG=("--mode" "unattended") +fi +# For ROS 2 CI, we can check if we're in a Docker container. +if [ -f /.dockerenv ]; then + INSTALL_MODE_FLAG=("--mode" "unattended") +fi + +# Unless they specifically agree to the license. +if [ -n "$I_AGREE_TO_PEPPER_MESHES_LICENSE" ] && [ "$I_AGREE_TO_PEPPER_MESHES_LICENSE" = 1 ]; then + INSTALL_MODE_FLAG=("--mode" "unattended") +fi + +# Call the installer, pass our flag and all the remaining arguments +$1 "${INSTALL_MODE_FLAG[@]}" "${@:2}" diff --git a/package.xml b/package.xml index 97f256f..130caee 100644 --- a/package.xml +++ b/package.xml @@ -1,10 +1,11 @@ pepper_meshes - 2.0.1 + 3.0.0 Meshes for the Pepper robot, for ROS2 Maxime Busy + Victor Paléologue Maxime Busy Surya Ambrose Natalia Lyubova @@ -13,7 +14,6 @@ http://github.com/ros-naoqi/pepper_meshes2/ ament_cmake - java ament_cmake