Layered Image #3589
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI Workflow | |
on: | |
push: | |
pull_request_target: | |
types: [opened, synchronize, reopened] | |
branches: | |
- 'master' | |
- 'yarp-*' | |
- 'feature/*' | |
- 'CI/*' | |
release: | |
types: [published] | |
jobs: | |
select_environment: | |
name: 'Prepare Environment' | |
runs-on: ubuntu-22.04 | |
outputs: | |
timestamp: ${{ steps.select.outputs.timestamp }} | |
repository_owner: ${{ steps.select.outputs.repository_owner }} | |
repository_name: ${{ steps.select.outputs.repository_name }} | |
repository: ${{ steps.select.outputs.repository }} | |
ref: ${{ steps.select.outputs.ref }} | |
environment: ${{ steps.select.outputs.environment }} | |
sha: ${{ steps.select.outputs.sha }} | |
head_ref: ${{ steps.select.outputs.head_ref }} | |
base_ref: ${{ steps.select.outputs.base_ref }} | |
pr_number: ${{ steps.select.outputs.pr_number }} | |
yarp_version: ${{ steps.select.outputs.yarp_version }} | |
steps: | |
- name: "Set output variables" | |
id: select | |
run: | | |
echo "timestamp=$(/bin/date -u +%Y%m%d-%H%M%S)" >> $GITHUB_OUTPUT | |
echo "repository_owner=${{ github.repository_owner }}" >> $GITHUB_OUTPUT | |
echo "repository_name=$(cat $GITHUB_EVENT_PATH | jq -r .repository.name)" >> $GITHUB_OUTPUT | |
echo "repository=${{ github.repository }}" >> $GITHUB_OUTPUT | |
if [[ "$GITHUB_EVENT_NAME" = "pull_request_target" ]]; then | |
echo "environment=code-analysis_unsafe" >> $GITHUB_OUTPUT | |
echo "ref=refs/pull/$(cat $GITHUB_EVENT_PATH | jq -r .number)/merge" >> $GITHUB_OUTPUT | |
else | |
echo "environment=code-analysis" >> $GITHUB_OUTPUT | |
echo "ref=${{ github.ref }}" >> $GITHUB_OUTPUT | |
fi | |
if [[ "$GITHUB_EVENT_NAME" = "pull_request" || "$GITHUB_EVENT_NAME" == "pull_request_target" ]]; then | |
echo "sha=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT | |
echo "head_ref=${GITHUB_HEAD_REF}" >> $GITHUB_OUTPUT | |
echo "base_ref=${GITHUB_BASE_REF}" >> $GITHUB_OUTPUT | |
echo "pr_number=$(cat $GITHUB_EVENT_PATH | jq -r .number)" >> $GITHUB_OUTPUT | |
else | |
echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT | |
fi | |
# Get YARP Project Version | |
if [[ "$GITHUB_EVENT_NAME" = "release" ]]; then | |
echo "yarp_version=$(awk '/ VERSION /{print $2}' CMakeLists.txt)" >> $GITHUB_OUTPUT | |
fi | |
- name: 'Debug output variables' | |
env: | |
TIMESTAMP: ${{ steps.select.outputs.timestamp }} | |
REPOSITORY_OWNER: ${{ steps.select.outputs.repository_owner }} | |
REPOSITORY_NAME: ${{ steps.select.outputs.repository_name }} | |
REPOSITORY: ${{ steps.select.outputs.repository }} | |
REF: ${{ steps.select.outputs.ref }} | |
ENVIRONMENT: ${{ steps.select.outputs.environment }} | |
SHA: ${{ steps.select.outputs.sha }} | |
HEAD_REF: ${{ steps.select.outputs.head_ref }} | |
BASE_REF: ${{ steps.select.outputs.base_ref }} | |
PR_NUMBER: ${{ steps.select.outputs.pr_number }} | |
YARP_VERSION: ${{ steps.select.outputs.yarp_version }} | |
run: | | |
echo "TIMESTAMP = ${TIMESTAMP}" | |
echo "REPOSITORY_OWNER = ${REPOSITORY_OWNER}" | |
echo "REPOSITORY_NAME = ${REPOSITORY_NAME}" | |
echo "REPOSITORY = ${REPOSITORY}" | |
echo "REF = ${REF}" | |
echo "ENVIRONMENT = ${ENVIRONMENT}" | |
echo "SHA = ${SHA}" | |
echo "HEAD_REF = ${HEAD_REF}" | |
echo "BASE_REF = ${BASE_REF}" | |
echo "PR_NUMBER = ${PR_NUMBER}" | |
echo "YARP_VERSION = ${YARP_VERSION}" | |
- name: "Print Environment" | |
run: | | |
env | |
- name: "Print Event Json" | |
run: | | |
echo "::group::install jq" | |
sudo apt-get update -qq | |
sudo apt-get install -qq -y jq | |
echo "::endgroup::" | |
cat $GITHUB_EVENT_PATH | jq -C | |
check-license: | |
name: 'Check License' | |
needs: select_environment | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -qq | |
sudo apt-get install -qq -y perl | |
- name: Check License | |
run: | | |
tests/misc/check_license.pl | |
check-style: | |
name: 'Check Style' | |
needs: select_environment | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -qq | |
sudo apt-get install -qq -y perl | |
- name: Check Style | |
run: | | |
tests/misc/check_style.pl | |
check-tests: | |
name: 'Check Devices Tests' | |
needs: select_environment | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
- name: Install Dependencies | |
run: | | |
sudo apt-get update -qq | |
sudo apt-get install -qq -y python3 | |
- name: Check Devices Tests | |
run: | | |
python3 tests/misc/check_tests.py | |
run-cmake: | |
name: 'Run CMake [CMake ${{ matrix.config.cmake_version }} (${{ matrix.config.cmake_generator }}), YCM ${{ matrix.config.ycm_version }}]' | |
needs: [select_environment, check-license, check-style] | |
runs-on: ubuntu-22.04 | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
cmake_version: "3.19.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.20.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.20.*", | |
cmake_generator: "Ninja", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.21.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.22.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.23.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.24.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.25.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.26.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
- { | |
cmake_version: "3.27.*", | |
cmake_generator: "Unix Makefiles", | |
ycm_version: "0.15.3", | |
} | |
steps: | |
- name: remove any previous installation of cmake | |
run: | | |
sudo rm /usr/local/bin/cmake | |
- name: install cmake | |
run: | | |
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo 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' | sudo tee /etc/apt/sources.list.d/kitware.list >/dev/null | |
sudo apt-get update | |
sudo rm /usr/share/keyrings/kitware-archive-keyring.gpg | |
sudo apt-get -y install kitware-archive-keyring | |
sudo apt-cache policy cmake-data | |
sudo apt-cache policy cmake | |
sudo apt-get -y install cmake-data=${{matrix.config.cmake_version}} | |
sudo apt-get -y -f install cmake=${{matrix.config.cmake_version}} | |
- name: Print CMake version | |
run: | | |
which cmake | |
cmake --version | |
/usr/bin/cmake --version | |
- name: Get YCM package | |
run: | | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.deb | |
sudo dpkg -i ycm-cmake-modules-0.15.3-all.deb | |
- name: Print YCM version | |
run: | | |
grep YCM_VERSION /usr/share/cmake/YCM/YCMConfig.cmake | |
- name: Clone Yarp repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
- name: Run CMake | |
run: | | |
mkdir build | |
cd build | |
cmake .. -DSKIP_ACE=ON | |
build: | |
name: '[${{ matrix.config.id }}][${{ matrix.config.os }}|${{ matrix.config.cc }}|${{ matrix.config.cmake_generator }} (${{ matrix.config.cmake_toolset }} ${{ matrix.config.cmake_platform }})|${{ matrix.config.build_type }}] ${{ matrix.config.description }}' | |
needs: [select_environment, run-cmake] | |
runs-on: ${{ matrix.config.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { | |
id: '01', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
test_external_bindings: true, | |
} | |
- { | |
id: '02', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
test_external_bindings: true, | |
} | |
- { | |
id: '03', | |
description: 'No ACE', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_ACE=ON | |
-DSKIP_ACE:BOOL=ON", | |
test_external_bindings: true, | |
} | |
- { | |
id: '04', | |
description: 'No ACE', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_ACE:BOOL=ON | |
-DSKIP_ACE:BOOL=ON", | |
test_external_bindings: true, | |
} | |
- { | |
id: '05', | |
description: 'No YARP_math (bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_Eigen:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_GSL:BOOL=ON | |
-DYARP_COMPILE_libYARP_math:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '06', | |
description: 'No YARP_math (bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_Eigen:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_GSL:BOOL=ON | |
-DYARP_COMPILE_libYARP_math:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '07', | |
description: 'CLEAN_API (unit tests and bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_CLEAN_API:BOOL=ON | |
-DYARP_COMPILE_TESTS:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '08', | |
description: 'CLEAN_API (unit tests and bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_CLEAN_API:BOOL=ON | |
-DYARP_COMPILE_TESTS:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '09', | |
description: 'Static', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DBUILD_SHARED_LIBS:BOOL=OFF", | |
} | |
- { | |
id: '10', | |
description: 'Static', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DBUILD_SHARED_LIBS:BOOL=OFF", | |
} | |
- { | |
id: '11', | |
description: 'Static, no ACE (bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DBUILD_SHARED_LIBS:BOOL=OFF | |
-DCMAKE_DISABLE_FIND_PACKAGE_ACE:BOOL=ON | |
-DSKIP_ACE:BOOL=ON | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '12', | |
description: 'Static, no ACE (bindings disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DBUILD_SHARED_LIBS:BOOL=OFF | |
-DCMAKE_DISABLE_FIND_PACKAGE_ACE:BOOL=ON | |
-DSKIP_ACE:BOOL=ON | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF", | |
} | |
- { | |
id: '13', | |
description: 'No deprecated', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_NO_DEPRECATED:BOOL=ON", | |
} | |
- { | |
id: '14', | |
description: 'No deprecated', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_NO_DEPRECATED:BOOL=ON", | |
} | |
- { | |
id: '15', | |
description: 'No executables (unit tests disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_COMPILE_EXECUTABLES:BOOL=OFF | |
-DYARP_COMPILE_TESTS:BOOL=OFF", | |
} | |
- { | |
id: '16', | |
description: 'No executables (unit tests disabled)', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_COMPILE_EXECUTABLES:BOOL=OFF | |
-DYARP_COMPILE_TESTS:BOOL=OFF", | |
} | |
- { | |
id: '17', | |
description: 'Build extern dependencies', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_SQLite:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_TinyXML:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_QCustomPlot:BOOL=ON", | |
} | |
- { | |
id: '18', | |
description: 'Build extern dependencies', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_SQLite:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_TinyXML:BOOL=ON | |
-DCMAKE_DISABLE_FIND_PACKAGE_QCustomPlot:BOOL=ON", | |
} | |
- { | |
id: '19', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Ninja", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
} | |
- { | |
id: '20', | |
os: ubuntu-22.04, | |
build_type: "Release", | |
cc: "clang-17", | |
cxx: "clang++-17", | |
cmake_generator: "Ninja", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
} | |
- { | |
id: '21', | |
description: 'Valgrind (bindings, failing tests, guis and examples as tests disabled)', | |
os: ubuntu-22.04, | |
build_type: "Debug", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DYARP_VALGRIND_TESTS:BOOL=ON | |
-DYARP_DISABLE_FAILING_TESTS:BOOL=ON | |
-DYARP_DISABLE_FAILING_VALGRIND_TESTS:BOOL=ON | |
-DYARP_ENABLE_EXAMPLES_AS_TESTS:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF | |
-DCMAKE_DISABLE_FIND_PACKAGE_FFMPEG=ON | |
-DYARP_COMPILE_GUIS:BOOL=OFF | |
-DENABLE_yarpmod_usbCamera:BOOL=OFF | |
-DENABLE_yarpmod_usbCameraRaw:BOOL=OFF | |
-DENABLE_yarpmod_portaudio:BOOL=OFF | |
-DENABLE_yarpmod_portaudioPlayer:BOOL=OFF | |
-DENABLE_yarpmod_portaudioRecorder:BOOL=OFF | |
-DENABLE_yarpmod_opencv_grabber:BOOL=OFF", | |
} | |
- { | |
id: '22', | |
description: 'Valgrind, No ACE (bindings, failing tests, guis and examples as tests disabled)', | |
os: ubuntu-22.04, | |
build_type: "Debug", | |
cc: "gcc", | |
cxx: "g++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.linux.cmake", | |
cmake_extra_options: "-DCMAKE_DISABLE_FIND_PACKAGE_ACE:BOOL=ON | |
-DSKIP_ACE:BOOL=ON | |
-DYARP_VALGRIND_TESTS:BOOL=ON | |
-DYARP_DISABLE_FAILING_TESTS:BOOL=ON | |
-DYARP_DISABLE_FAILING_VALGRIND_TESTS:BOOL=ON | |
-DYARP_ENABLE_EXAMPLES_AS_TESTS:BOOL=OFF | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF | |
-DCMAKE_DISABLE_FIND_PACKAGE_FFMPEG=ON | |
-DYARP_COMPILE_GUIS:BOOL=OFF | |
-DENABLE_yarpmod_usbCamera:BOOL=OFF | |
-DENABLE_yarpmod_usbCameraRaw:BOOL=OFF | |
-DENABLE_yarpmod_portaudio:BOOL=OFF | |
-DENABLE_yarpmod_portaudioPlayer:BOOL=OFF | |
-DENABLE_yarpmod_portaudioRecorder:BOOL=OFF | |
-DENABLE_yarpmod_opencv_grabber:BOOL=OFF", | |
} | |
- { | |
id: '23', | |
os: windows-2019, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Visual Studio 16 2019", | |
cmake_toolset: "v142", | |
cmake_platform: "x64", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '24', | |
os: windows-2019, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Visual Studio 16 2019", | |
cmake_toolset: "v141", | |
cmake_platform: "x64", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '25', | |
os: windows-2019, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Ninja", | |
cmake_toolset: "v142", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '26', | |
os: windows-2019, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Ninja", | |
cmake_toolset: "v141", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '27', | |
os: windows-2022, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Visual Studio 17 2022", | |
cmake_toolset: "v143", | |
cmake_platform: "x64", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '28', | |
os: windows-2022, | |
build_type: "Release", | |
cc: "cl", | |
cxx: "cl", | |
cmake_generator: "Visual Studio 17 2022", | |
cmake_toolset: "v142", | |
cmake_platform: "x64", | |
cmake_toolchain_file: "C:/robotology/vcpkg/scripts/buildsystems/vcpkg.cmake", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.windows.cmake", | |
environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2022/Enterprise/VC/Auxiliary/Build/vcvars64.bat", | |
} | |
- { | |
id: '29', | |
os: macos-13, | |
build_type: "Release", | |
cc: "clang", | |
cxx: "clang++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.macos.cmake", | |
} | |
- { | |
id: '30', | |
os: macos-13, | |
build_type: "Release", | |
cc: "clang", | |
cxx: "clang++", | |
cmake_generator: "Xcode", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.macos.cmake", | |
} | |
- { | |
id: '31', | |
os: macos-12, | |
build_type: "Release", | |
cc: "clang", | |
cxx: "clang++", | |
cmake_generator: "Unix Makefiles", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.macos.cmake", | |
} | |
- { | |
id: '32', | |
os: macos-12, | |
build_type: "Release", | |
cc: "clang", | |
cxx: "clang++", | |
cmake_generator: "Xcode", | |
cmake_initial_cache_file: ".ci/initial-cache.gh.macos.cmake", | |
} | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
- name: Handle cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
.ccache | |
key: build-${{ matrix.config.id }}-ccache-${{ github.ref }}-${{ needs.select_environment.outputs.timestamp }} | |
restore-keys: | | |
build-${{ matrix.config.id }}-${{ github.base_ref }}-ccache- | |
build-${{ matrix.config.id }}-${{ github.ref }}-ccache- | |
- name: Dependencies [Linux] | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
# Install dep for gstreamer. It must be the first one. | |
sudo apt-get update | |
sudo apt-get install -y libunwind-dev | |
#Install clang 17 | |
sudo apt-get purge -y llvm* clang* | |
wget -nv https://apt.llvm.org/llvm.sh | |
sudo chmod +x llvm.sh | |
sudo ./llvm.sh 17 | |
# Install Robotology dependencies from robotology ppa | |
sudo apt-add-repository -y ppa:robotology/ppa | |
sudo apt-get install -qq -y librobottestingframework-dev | |
sudo apt-get update | |
# Install cmake | |
sudo apt-get install -qq -y cmake | |
which cmake | |
cmake --version | |
/usr/bin/cmake --version | |
# Install ycm | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.deb | |
sudo dpkg -i ycm-cmake-modules-0.15.3-all.deb | |
# Install build tools | |
sudo apt-get install -qq -y ccache \ | |
ninja-build \ | |
valgrind | |
sudo apt-get install -y libace-dev | |
sudo apt-get install -y libsqlite3-dev \ | |
libtinyxml-dev \ | |
libedit-dev \ | |
qtbase5-dev \ | |
qtdeclarative5-dev \ | |
qtmultimedia5-dev \ | |
libqt5opengl5-dev \ | |
libqcustomplot-dev \ | |
libopencv-dev \ | |
libeigen3-dev \ | |
libgraphviz-dev \ | |
libpng-dev \ | |
libv4l-dev \ | |
libavcodec-dev \ | |
libavdevice-dev \ | |
libavformat-dev \ | |
libavutil-dev \ | |
portaudio19-dev \ | |
libsdl1.2-dev \ | |
libopenni2-dev \ | |
libftdi-dev \ | |
libi2c-dev \ | |
libjpeg-dev \ | |
libpcl-dev \ | |
libsoxr-dev | |
sudo apt-get install -y libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-dev | |
# Install SWIG and bindings dependencies | |
sudo apt-get install -qq -y swig \ | |
mono-mcs \ | |
liblua5.3-dev \ | |
lua5.3 \ | |
tcl-dev \ | |
tk-dev \ | |
python3-dev \ | |
liboctave-dev \ | |
ruby-dev \ | |
ruby \ | |
perl | |
# Other tools useful in github actions | |
sudo apt-get install -qq -y jq \ | |
wget \ | |
curl \ | |
lcov \ | |
gcovr \ | |
wget \ | |
curl \ | |
xsltproc \ | |
libxml2-utils \ | |
source-highlight | |
# Remove old packages from apt cache | |
sudo apt-get autoclean -qq | |
- name: Dependencies [Windows] | |
if: runner.os == 'Windows' | |
run: | | |
echo "To avoid spending a huge time compiling vcpkg dependencies, we download a root that comes precompiled with all the ports that we need" | |
choco install --no-progress -y wget 7zip | |
echo "" | |
echo " Download and install SWIG" | |
wget -nv https://sourceforge.net/projects/swig/files/swigwin/swigwin-4.0.2/swigwin-4.0.2.zip -O swigwin.zip | |
7z x swigwin.zip | |
mv swigwin-4.0.2/swig.exe swig.exe | |
echo "" | |
echo " To avoid problems with non-relocatable packages, we unzip the archive exactly in the same C:/robotology/vcpkg that has been used to create the pre-compiled archive" | |
wget -nv https://github.com/robotology/robotology-superbuild-dependencies-vcpkg/releases/download/v0.10.1/vcpkg-robotology-yarp-only.zip | |
7z x -oC:\ vcpkg-robotology-yarp-only.zip | |
echo "" | |
echo " Download and install YCM " | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.tar.gz -O ycm.tar.gz | |
7z x ycm.tar.gz | |
7z x -ttar -oC:\robotology ycm.tar | |
echo "" | |
echo " Download and install ccache " | |
wget -nv https://github.com/cristianadam/ccache/releases/download/v3.7.7/Windows.tar.xz -O ccache.tar.xz | |
7z x ccache.tar.xz | |
7z x -ttar ccache.tar | |
- name: Dependencies [macOS] | |
if: runner.os == 'macOS' | |
run: | | |
# Temporary workaround for https://github.com/actions/setup-python/issues/577 | |
rm -f /usr/local/bin/2to3 | |
rm -f /usr/local/bin/2to3-3.11 | |
rm -f /usr/local/bin/2to3-3.12 | |
rm -f /usr/local/bin/idle3 | |
rm -f /usr/local/bin/idle3.11 | |
rm -f /usr/local/bin/idle3.12 | |
rm -f /usr/local/bin/pydoc3 | |
rm -f /usr/local/bin/pydoc3.11 | |
rm -f /usr/local/bin/pydoc3.12 | |
rm -f /usr/local/bin/python3 | |
rm -f /usr/local/bin/python3.11 | |
rm -f /usr/local/bin/python3.12 | |
rm -f /usr/local/bin/python3-config | |
rm -f /usr/local/bin/python3.11-config | |
rm -f /usr/local/bin/python3.12-config | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.tar.gz -O /Users/runner/work/yarp/ycm.tar.gz | |
7z x /Users/runner/work/yarp/ycm.tar.gz -o/Users/runner/work/yarp | |
7z x -ttar /Users/runner/work/yarp/ycm.tar -o/Users/runner/work/yarp | |
brew update | |
brew install ccache | |
brew install ace | |
brew install sqlite tinyxml libedit libpng qt5 opencv eigen graphviz libsoxr | |
- name: Prepare Environment Script | |
id: prepare_environment_script | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
set(_env_script ${CMAKE_CURRENT_LIST_DIR}/environment_script.cmake) | |
file(WRITE "${_env_script}" "") | |
# if YCM is installed manually, set YCM_DIR to allow CMake to find it | |
if("${{ runner.os }}" STREQUAL "Windows") | |
file(APPEND "${_env_script}" "set(ENV{YCM_DIR} \"C:\\\\robotology\\\\YCM-0.15.3-all\")\n") | |
elseif("${{ runner.os }}" STREQUAL "macOS") | |
file(APPEND "${_env_script}" "set(ENV{YCM_DIR} \"/Users/runner/work/yarp/YCM-0.15.3-all\")\n") | |
endif() | |
if("${{ runner.os }}" STREQUAL "Windows" AND NOT "${{ matrix.config.environment_script }}" STREQUAL "") | |
execute_process( | |
COMMAND "${{ matrix.config.environment_script }}" && set | |
OUTPUT_FILE environment_script_output.txt | |
) | |
file(STRINGS environment_script_output.txt output_lines) | |
foreach(line IN LISTS output_lines) | |
if(line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") | |
set(_key "${CMAKE_MATCH_1}") | |
set(_value "${CMAKE_MATCH_2}") | |
string(REPLACE "\\" "\\\\" _value "${_value}") | |
file(APPEND "${_env_script}" "set(ENV{${_key}} \"${_value}\")\n") | |
endif() | |
endforeach() | |
# Ninja and other tools are downloaded in $GITHUB_WORKSPACE | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"\$ENV{PATH};\$ENV{GITHUB_WORKSPACE}\")\n") | |
# Append vcpkg bin directory to the PATH | |
if("${{ matrix.config.build_type }}" STREQUAL "Release") | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"\$ENV{PATH};C:\\\\robotology\\\\vcpkg\\\\installed\\\\x64-windows\\\\bin\")\n") | |
else() | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"\$ENV{PATH};C:\\\\robotology\\\\vcpkg\\\\installed\\\\x64-windows\\\\debug\\\\bin\")\n") | |
endif() | |
# Append output bin directory to the PATH | |
if("${{ matrix.config.cmake_generator }}" MATCHES "Visual Studio") | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"\$ENV{PATH};\$ENV{GITHUB_WORKSPACE}\\\\build\\\\bin\\\\${{ matrix.config.build_type }}\")\n") | |
elseif("${{ matrix.config.cmake_generator }}" MATCHES "Ninja") | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"\$ENV{PATH};\$ENV{GITHUB_WORKSPACE}\\\\build\\\\bin\")\n") | |
endif() | |
endif() | |
file(APPEND "${_env_script}" "set(ENV{CC} ${{ matrix.config.cc }})\n") | |
file(APPEND "${_env_script}" "set(ENV{CXX} ${{ matrix.config.cxx }})\n") | |
if("${{ matrix.config.cc }}" MATCHES "gcc") | |
file(APPEND "${_env_script}" "set(ENV{CFLAGS} -fdiagnostics-color=always)\n") | |
file(APPEND "${_env_script}" "set(ENV{CXXFLAGS} -fdiagnostics-color=always)\n") | |
elseif("${{ matrix.config.cc }}" MATCHES "^clang.*") | |
file(APPEND "${_env_script}" "set(ENV{CFLAGS} -fcolor-diagnostics)\n") | |
file(APPEND "${_env_script}" "set(ENV{CXXFLAGS} -fcolor-diagnostics)\n") | |
endif() | |
file(APPEND "${_env_script}" "file(TO_CMAKE_PATH \"\$ENV{GITHUB_WORKSPACE}\" ccache_basedir)\n") | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_BASEDIR} \"\${ccache_basedir}\")\n") | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_DIR} \"\${ccache_basedir}/.ccache\")\n") | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_COMPRESS} \"true\")\n") | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_COMPRESSLEVEL} \"6\")\n") | |
if("${{ matrix.config.cxx }}" STREQUAL "cl") | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_MAXSIZE} \"600M\")\n") | |
else() | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_MAXSIZE} \"400M\")\n") | |
endif() | |
# Force ccache to build the original cpp file instead of the pre-processed file | |
file(APPEND "${_env_script}" "set(ENV{CCACHE_CPP2} \"yes\")\n") | |
# Prepend ccache lib dir on Linux and macOS | |
if("${{ runner.os }}" STREQUAL "Linux") | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"/usr/lib/ccache:\$ENV{PATH}\")\n") | |
elseif("${{ runner.os }}" STREQUAL "macOS") | |
file(APPEND "${_env_script}" "set(ENV{PATH} \"/usr/local/opt/ccache/libexec:\$ENV{PATH}\")\n") | |
endif() | |
# CMake/CTest variables | |
file(APPEND "${_env_script}" "set(ENV{CTEST_OUTPUT_ON_FAILURE} \"1\")\n") | |
file(APPEND "${_env_script}" "set(ENV{CLICOLOR_FORCE} \"1\")\n") | |
# YARP variables | |
file(APPEND "${_env_script}" "set(ENV{YARP_PORT_RANGE} \"20000\")\n") | |
# Add execute_process_x() macro | |
file(APPEND "${_env_script}" " | |
function(execute_process_x) | |
set(_options) | |
set(_oneValueArgs RESULT_VARIABLE WORKING_DIRECTORY) | |
set(_multiValueArgs COMMAND) | |
cmake_parse_arguments(_x \"\${_options}\" \"\${_oneValueArgs}\" \"\${_multiValueArgs}\" \${ARGN}) | |
string(REPLACE \";\" \" \" _cmd \"\${_x_COMMAND}\") | |
string(REPLACE \"\\\\\" \"\\\\\\\\\" _cmd \"\${_cmd}\") | |
message(STATUS \"\\n\$ \${_cmd}\") | |
if(DEFINED _x_WORKING_DIRECTORY) | |
set(_wd WORKING_DIRECTORY \"\${_x_WORKING_DIRECTORY}\") | |
endif() | |
execute_process(COMMAND \${_x_COMMAND} | |
\${_wd} | |
RESULT_VARIABLE _result) | |
if(NOT _result EQUAL 0) | |
message(WARNING \"The command \\\"\${_cmd}\\\" failed with result \\\"\${_result}\\\"\") | |
endif() | |
if(DEFINED _x_RESULT_VARIABLE) | |
set(\${_x_RESULT_VARIABLE} \${_result} PARENT_SCOPE) | |
endif() | |
endfunction() | |
") | |
file(APPEND "$ENV{GITHUB_OUTPUT}" "environment_script=${_env_script}\n") | |
- name: Print Environment Script | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
file(READ "${{ steps.prepare_environment_script.outputs.environment_script }}" _out) | |
message("${_out}") | |
- name: Print system information | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
set(_which_cmd which) | |
set(_env_cmd env) | |
if("${{ runner.os }}" STREQUAL "Windows") | |
set(_which_cmd where) | |
set(_env_cmd env) | |
endif() | |
if(UNIX) | |
execute_process_x(COMMAND uname -a) | |
endif() | |
if("${{ runner.os }}" STREQUAL "Linux") | |
execute_process_x(COMMAND lsb_release -a) | |
execute_process_x(COMMAND cat /etc/apt/sources.list) | |
execute_process_x(COMMAND ls -la --color=always /etc/apt/sources.list.d) | |
file(GLOB _list_files "/etc/apt/sources.list.d/*.list") | |
foreach(_list_file IN LISTS _list_files) | |
execute_process_x(COMMAND cat ${_list_file}) | |
endforeach() | |
elseif("${{ runner.os }}" STREQUAL "macOS") | |
execute_process_x(COMMAND system_profiler SPSoftwareDataType) | |
elseif("${{ runner.os }}" STREQUAL "Windows") | |
execute_process_x(COMMAND Systeminfo) | |
endif() | |
execute_process_x(COMMAND ${_which_cmd} cmake) | |
execute_process_x(COMMAND cmake --version) | |
if("${{ matrix.config.cmake_generator }}" MATCHES "Visual Studio") | |
execute_process_x(COMMAND ${_which_cmd} msbuild) | |
execute_process_x(COMMAND msbuild /version) | |
elseif("${{ matrix.config.cmake_generator }}" MATCHES "Ninja") | |
execute_process_x(COMMAND ${_which_cmd} ninja) | |
execute_process_x(COMMAND ninja --version) | |
elseif("${{ matrix.config.cmake_generator }}" MATCHES "Unix Makefiles") | |
execute_process_x(COMMAND ${_which_cmd} make) | |
execute_process_x(COMMAND make --version) | |
elseif("${{ matrix.config.cmake_generator }}" MATCHES "Xcode") | |
execute_process_x(COMMAND ${_which_cmd} xcodebuild) | |
execute_process_x(COMMAND xcodebuild -version) | |
endif() | |
execute_process_x(COMMAND ${_which_cmd} $ENV{CC}) | |
execute_process_x(COMMAND ${_which_cmd} $ENV{CXX}) | |
if("$ENV{CC}" STREQUAL "cl") | |
execute_process_x(COMMAND $ENV{CC}) | |
execute_process_x(COMMAND $ENV{CXX}) | |
else() | |
execute_process_x(COMMAND $ENV{CC} --version) | |
execute_process_x(COMMAND $ENV{CXX} --version) | |
endif() | |
execute_process_x(COMMAND ${_which_cmd} ccache) | |
execute_process_x(COMMAND ccache --version) | |
execute_process_x(COMMAND ccache -p) | |
if("${{ runner.os }}" STREQUAL "Linux") | |
execute_process_x(COMMAND ls -la --color=always /usr/lib/ccache) | |
execute_process_x(COMMAND ls -la --color=always $ENV{HOME}/lib/ccache) | |
endif() | |
execute_process_x(COMMAND ${_which_cmd} swig) | |
execute_process_x(COMMAND swig -version) | |
execute_process_x(COMMAND ${_which_cmd} javac) | |
execute_process_x(COMMAND javac -version) | |
if("${{ runner.os }}" STREQUAL "Linux") | |
execute_process_x(COMMAND netstat -tulpn) | |
endif() | |
execute_process_x(COMMAND ${_env_cmd}) | |
- name: Configure | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
set(_generator) | |
if(NOT "${{ matrix.config.cmake_generator }}" STREQUAL "") | |
set(_generator -G "${{ matrix.config.cmake_generator }}") | |
endif() | |
set(_toolset) | |
if(NOT "${{ matrix.config.cmake_toolset }}" STREQUAL "") | |
list(APPEND toolset -T ${{ matrix.config.cmake_toolset }}) | |
endif() | |
set(_platform) | |
if(NOT "${{ matrix.config.cmake_platform }}" STREQUAL "") | |
list(APPEND _platform -A ${{ matrix.config.cmake_platform }}) | |
endif() | |
set(_initial_cache_file) | |
if(NOT "${{ matrix.config.cmake_initial_cache_file }}" STREQUAL "") | |
set(_initial_cache_file -C "${{ matrix.config.cmake_initial_cache_file }}") | |
endif() | |
set(_toolchain_file) | |
if(NOT "${{ matrix.config.cmake_toolchain_file }}" STREQUAL "") | |
set(_toolchain_file -D CMAKE_TOOLCHAIN_FILE=${{ matrix.config.cmake_toolchain_file }}) | |
endif() | |
set(_build_type) | |
if(NOT "${{ matrix.config.build_type }}" STREQUAL "") | |
set(_build_type -D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }}) | |
endif() | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/install" _install_prefix) | |
set(_install_prefix -D CMAKE_INSTALL_PREFIX=${_install_prefix}) | |
set(_cmake_compiler_lauchers ) | |
if("${{ runner.os }}" STREQUAL "Windows") | |
find_program(_ccache_cmd ccache PATHS ENV GITHUB_WORKSPACE) | |
set(_cmake_compiler_lauchers -D CMAKE_C_COMPILER_LAUNCHER=${_ccache_cmd} | |
-D CMAKE_CXX_COMPILER_LAUNCHER=${_ccache_cmd}) | |
endif() | |
set(_cmake_extra_options) | |
if(NOT "${{ matrix.config.cmake_extra_options }}" STREQUAL "") | |
set(_cmake_extra_options ${{ matrix.config.cmake_extra_options }}) | |
endif() | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
-S . | |
-B build | |
${_generator} | |
${_toolset} | |
${_platform} | |
${_initial_cache_file} | |
${_toolchain_file} | |
${_build_type} | |
${_install_prefix} | |
${_cmake_compiler_lauchers} | |
${_cmake_extra_options} | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Configure step failed") | |
endif() | |
- name: Build | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
--build build | |
--config ${{ matrix.config.build_type }} | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Build step failed") | |
endif() | |
# Print ccache stats | |
execute_process_x(COMMAND ccache -s) | |
# Reset ccache stats before uploading | |
execute_process_x(COMMAND ccache -z) | |
- name: Run tests | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
execute_process_x( | |
COMMAND ${CMAKE_CTEST_COMMAND} | |
--build-config ${{ matrix.config.build_type }} | |
# We have random race conditions. | |
# Allow up to 3 run of the same test | |
--repeat until-pass:3 | |
--output-on-failure | |
WORKING_DIRECTORY build | |
RESULT_VARIABLE result | |
) | |
if(NOT result EQUAL 0) | |
message(FATAL_ERROR "Test step failed") | |
endif() | |
- name: Status Check | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
execute_process_x( | |
COMMAND git status --porcelain=v1 | |
WORKING_DIRECTORY . | |
RESULT_VARIABLE result | |
OUTPUT_VARIABLE output | |
) | |
if(NOT result EQUAL 0) | |
message(FATAL_ERROR "Test step failed") | |
endif() | |
string(REGEX REPLACE "\n" ";" output "${output}") | |
foreach(f IN LISTS output) | |
string(REGEX REPLACE ".+ " "" f "${f}") | |
message("::error file=${f},line=1,col=1::File modified.") | |
endforeach() | |
list(LENGTH output output_size) | |
if(NOT output_size EQUAL 0) | |
message(FATAL_ERROR "During build and tests, ${output_size} files were modified") | |
endif() | |
- name: Test installation | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
--install build | |
--config ${{ matrix.config.build_type }} | |
--strip | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Installation step failed") | |
endif() | |
- name: Test bindings from build tree | |
if: matrix.config.test_external_bindings | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
### FIXME Can we avoid this duplication? | |
set(_generator) | |
if(NOT "${{ matrix.config.cmake_generator }}" STREQUAL "") | |
set(_generator -G "${{ matrix.config.cmake_generator }}") | |
endif() | |
set(_toolset) | |
if(NOT "${{ matrix.config.cmake_toolset }}" STREQUAL "") | |
list(APPEND toolset -T ${{ matrix.config.cmake_toolset }}) | |
endif() | |
set(_platform) | |
if(NOT "${{ matrix.config.cmake_platform }}" STREQUAL "") | |
list(APPEND _platform -A ${{ matrix.config.cmake_platform }}) | |
endif() | |
set(_initial_cache_file -C "$ENV{GITHUB_WORKSPACE}/.ci/bindings-cache.cmake") | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/install" _install_prefix) | |
set(_install_prefix -D CMAKE_INSTALL_PREFIX=${_install_prefix}) | |
set(_toolchain_file) | |
if(NOT "${{ matrix.config.cmake_toolchain_file }}" STREQUAL "") | |
set(_toolchain_file -D CMAKE_TOOLCHAIN_FILE=${{ matrix.config.cmake_toolchain_file }}) | |
endif() | |
set(_build_type) | |
if(NOT "${{ matrix.config.build_type }}" STREQUAL "") | |
set(_build_type -D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }}) | |
endif() | |
set(_cmake_compiler_lauchers ) | |
if("${{ runner.os }}" STREQUAL "Windows") | |
find_program(_ccache_cmd ccache PATHS ENV GITHUB_WORKSPACE) | |
set(_cmake_compiler_lauchers -D CMAKE_C_COMPILER_LAUNCHER=${_ccache_cmd} | |
-D CMAKE_CXX_COMPILER_LAUNCHER=${_ccache_cmd}) | |
endif() | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
-S bindings | |
-B build-bindings-build-tree | |
${_generator} | |
${_toolset} | |
${_platform} | |
${_initial_cache_file} | |
${_toolchain_file} | |
${_build_type} | |
${_install_prefix} | |
${_cmake_compiler_lauchers} | |
${_cmake_extra_options} | |
-DYARP_DIR=$ENV{GITHUB_WORKSPACE}/build | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Configure bindings from build tree step failed") | |
endif() | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
--build build-bindings-build-tree | |
--config ${{ matrix.config.build_type }} | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Build bindings from build tree step failed") | |
endif() | |
- name: Test bindings from install tree | |
if: matrix.config.test_external_bindings | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
### FIXME Can we avoid this duplication? | |
set(_generator) | |
if(NOT "${{ matrix.config.cmake_generator }}" STREQUAL "") | |
set(_generator -G "${{ matrix.config.cmake_generator }}") | |
endif() | |
set(_toolset) | |
if(NOT "${{ matrix.config.cmake_toolset }}" STREQUAL "") | |
list(APPEND toolset -T ${{ matrix.config.cmake_toolset }}) | |
endif() | |
set(_platform) | |
if(NOT "${{ matrix.config.cmake_platform }}" STREQUAL "") | |
list(APPEND _platform -A ${{ matrix.config.cmake_platform }}) | |
endif() | |
set(_initial_cache_file -C "$ENV{GITHUB_WORKSPACE}/.ci/bindings-cache.cmake") | |
file(TO_CMAKE_PATH "$ENV{GITHUB_WORKSPACE}/install" _install_prefix) | |
set(_install_prefix -D CMAKE_INSTALL_PREFIX=${_install_prefix}) | |
set(_toolchain_file) | |
if(NOT "${{ matrix.config.cmake_toolchain_file }}" STREQUAL "") | |
set(_toolchain_file -D CMAKE_TOOLCHAIN_FILE=${{ matrix.config.cmake_toolchain_file }}) | |
endif() | |
set(_build_type) | |
if(NOT "${{ matrix.config.build_type }}" STREQUAL "") | |
set(_build_type -D CMAKE_BUILD_TYPE=${{ matrix.config.build_type }}) | |
endif() | |
set(_cmake_compiler_lauchers ) | |
if("${{ runner.os }}" STREQUAL "Windows") | |
find_program(_ccache_cmd ccache PATHS ENV GITHUB_WORKSPACE) | |
set(_cmake_compiler_lauchers -D CMAKE_C_COMPILER_LAUNCHER=${_ccache_cmd} | |
-D CMAKE_CXX_COMPILER_LAUNCHER=${_ccache_cmd}) | |
endif() | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
-S bindings | |
-B build-bindings-install-tree | |
${_generator} | |
${_toolset} | |
${_platform} | |
${_initial_cache_file} | |
${_toolchain_file} | |
${_build_type} | |
${_install_prefix} | |
${_cmake_compiler_lauchers} | |
${_cmake_extra_options} | |
-DYARP_DIR=$ENV{GITHUB_WORKSPACE}/install/lib/cmake/YARP | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Configure bindings from install tree step failed") | |
endif() | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} | |
--build build-bindings-install-tree | |
--config ${{ matrix.config.build_type }} | |
RESULT_VARIABLE _result | |
) | |
if(NOT _result EQUAL 0) | |
message(FATAL_ERROR "Build bindings from build tree step failed") | |
endif() | |
- name: Compress installation files | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
execute_process_x( | |
COMMAND ${CMAKE_COMMAND} -E tar cvf $ENV{GITHUB_WORKSPACE}/install.tar --format=gnutar --files-from=$ENV{GITHUB_WORKSPACE}/build/install_manifest.txt | |
WORKING_DIRECTORY "$ENV{GITHUB_WORKSPACE}/install" | |
) | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: installation-${{ matrix.config.id }} | |
path: install.tar | |
retention-days: 2 | |
- name: Cleanup | |
shell: cmake -P {0} | |
run: | | |
cmake_minimum_required(VERSION 3.19) | |
include(${{ steps.prepare_environment_script.outputs.environment_script }}) | |
# Reset ccache stats before uploading | |
execute_process_x(COMMAND ccache -z) | |
codacy-clang-tidy: | |
environment: code-analysis | |
name: 'Codacy - clang-tidy' | |
needs: [select_environment, run-cmake] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
# This step is copied from the build step, please keep them in sync until we | |
# find a better way to do it automatically | |
- name: Dependencies [Linux] | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
# Install dep for gstreamer. It must be the first one. | |
sudo apt-get update | |
sudo apt-get install -y libunwind-dev | |
# Install Robotology dependencies from robotology ppa | |
sudo apt-add-repository -y ppa:robotology/ppa | |
sudo apt-get install -qq -y librobottestingframework-dev | |
# Install cmake | |
sudo apt-get install -qq -y cmake | |
which cmake | |
cmake --version | |
/usr/bin/cmake --version | |
# Install ycm | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.deb | |
sudo dpkg -i ycm-cmake-modules-0.15.3-all.deb | |
# Install build tools | |
sudo apt-get install -qq -y ccache \ | |
ninja-build \ | |
valgrind \ | |
openjdk-17-jdk \ | |
openjdk-17-jre | |
sudo apt-get install -qq -y libace-dev \ | |
libsqlite3-dev \ | |
libtinyxml-dev \ | |
libedit-dev \ | |
qtbase5-dev \ | |
qtdeclarative5-dev \ | |
qtmultimedia5-dev \ | |
libqt5opengl5-dev \ | |
libqcustomplot-dev \ | |
libopencv-dev \ | |
libeigen3-dev \ | |
libgraphviz-dev \ | |
libpng-dev \ | |
libv4l-dev \ | |
libavcodec-dev \ | |
libavdevice-dev \ | |
libavformat-dev \ | |
libavutil-dev \ | |
portaudio19-dev \ | |
libsdl1.2-dev \ | |
libopenni2-dev \ | |
libftdi-dev \ | |
libi2c-dev \ | |
libjpeg-dev \ | |
libpcl-dev | |
sudo apt-get install -y libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-dev | |
# Install SWIG and bindings dependencies | |
sudo apt-get install -qq -y swig \ | |
mono-mcs \ | |
liblua5.3-dev \ | |
lua5.3 \ | |
tcl-dev \ | |
tk-dev \ | |
python3-dev \ | |
liboctave-dev \ | |
ruby-dev \ | |
ruby \ | |
perl | |
# Other tools useful in github actions | |
sudo apt-get install -qq -y jq \ | |
wget \ | |
curl \ | |
lcov \ | |
gcovr \ | |
wget \ | |
curl \ | |
xsltproc \ | |
libxml2-utils \ | |
source-highlight | |
# Remove old packages from apt cache | |
sudo apt-get autoclean -qq | |
- name: Prepare environment | |
env: | |
CODACY_TOKEN: ${{ secrets.CODACY_TOKEN }} | |
CLANG_VERSION: 17 | |
CODACY_CLANG_TIDY_VERSION: 1.3.8 | |
run: | | |
echo "CLANG_VERSION=${CLANG_VERSION}" >> $GITHUB_ENV | |
echo "CC=/usr/bin/clang-${CLANG_VERSION}" >> $GITHUB_ENV | |
echo "CXX=/usr/bin/clang++-${CLANG_VERSION}" >> $GITHUB_ENV | |
echo "CFLAGS=-fcolor-diagnostics" >> $GITHUB_ENV | |
echo "CXXFLAGS=-fcolor-diagnostics" >> $GITHUB_ENV | |
echo "CLANG_TIDY=/usr/bin/clang-tidy-${CLANG_VERSION}" >> $GITHUB_ENV | |
echo "RUN_CLANG_TIDY=/usr/bin/run-clang-tidy-${CLANG_VERSION}" >> $GITHUB_ENV | |
echo "COLORCLI=1" >> $GITHUB_ENV | |
echo "CLICOLOR=1" >> $GITHUB_ENV | |
echo "CLICOLOR_FORCE=1" >> $GITHUB_ENV | |
echo "YARP_COLORED_OUTPUT=1" >> $GITHUB_ENV | |
echo "PROJECT_TOKEN=${CODACY_TOKEN}" >> $GITHUB_ENV | |
echo "COMMIT=${{ needs.select_environment.outputs.sha }}" >> $GITHUB_ENV | |
echo "CODACY_URL=https://api.codacy.com" >> $GITHUB_ENV | |
echo "CODACY_CLANG_TIDY_VERSION=${CODACY_CLANG_TIDY_VERSION}" >> $GITHUB_ENV | |
- name: Download codacy-clang-tidy | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
#Install clang 17. `all` option is required for clang-tidy | |
sudo apt-get purge -y llvm* clang* | |
wget -nv https://apt.llvm.org/llvm.sh | |
sudo chmod +x llvm.sh | |
sudo ./llvm.sh 17 all | |
# Download codacy-clang-tidy | |
sudo wget https://github.com/codacy/codacy-clang-tidy/releases/download/${CODACY_CLANG_TIDY_VERSION}/codacy-clang-tidy-linux-${CODACY_CLANG_TIDY_VERSION} -O /usr/local/bin/codacy-clang-tidy-${CODACY_CLANG_TIDY_VERSION} | |
sudo chmod -v +x /usr/local/bin/codacy-clang-tidy-${CODACY_CLANG_TIDY_VERSION} | |
- name: Run CMake | |
run: | | |
/usr/bin/cmake -S. -Bbuild \ | |
-C .ci/initial-cache.gh.linux.cmake \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \ | |
-DYARP_NO_DEPRECATED:BOOL=ON \ | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF | |
- name: Link compile_commands.json in the source directory | |
run: | | |
ln -s build/compile_commands.json . | |
- name: Run make (required for files generated at build time) | |
run: | | |
(cd build && make) | |
- name: List clang-tidy checks | |
run: | | |
# Fix .clang-tidy for clang 10 (see https://reviews.llvm.org/D75621) | |
sed -i 's/;h;hh;hpp;hxx/,h,hh,hpp,hxx/g' .clang-tidy | |
# Print the .clang-tidy file | |
cat .clang-tidy | |
echo | |
# List checks | |
${CLANG_TIDY} -list-checks | |
- name: Run clang-tidy | |
run: | | |
${RUN_CLANG_TIDY} | sed "s|${PWD}/||g" | tee /tmp/out1 | |
- name: Convert the clang-tidy output to a format that the Codacy API accepts | |
run: | | |
cat /tmp/out1 | \ | |
/usr/local/bin/codacy-clang-tidy-${CODACY_CLANG_TIDY_VERSION} | tee /tmp/out2 | |
- name: Send the results to Codacy | |
run: | | |
set -x | |
cat /tmp/out2 | \ | |
curl --silent --show-error --fail \ | |
-XPOST -L -H "project-token: ${PROJECT_TOKEN}" \ | |
-H "Content-type: application/json" -d @- \ | |
"${CODACY_URL}/2.0/commit/${COMMIT}/issuesRemoteResults" | |
echo | |
- name: Signal that Codacy can use the sent results and start a new analysis | |
run: | | |
set -x | |
curl --silent --show-error --fail \ | |
-XPOST -L -H "project-token: ${PROJECT_TOKEN}" \ | |
-H "Content-type: application/json" \ | |
"${CODACY_URL}/2.0/commit/${COMMIT}/resultsFinal" | |
echo | |
codacy-coverage: | |
environment: code-analysis | |
name: 'Codacy - coverage' | |
needs: [select_environment, run-cmake] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
# This step is copied from the build step, please keep them in sync until we | |
# find a better way to do it automatically | |
- name: Dependencies [Linux] | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
# Install dep for gstreamer. It must be the first one. | |
sudo apt-get update | |
sudo apt-get install -y libunwind-dev | |
# Install Robotology dependencies from robotology ppa | |
sudo apt-add-repository -y ppa:robotology/ppa | |
sudo apt-get install -qq -y librobottestingframework-dev | |
# Install cmake | |
sudo apt-get install -qq -y cmake | |
which cmake | |
cmake --version | |
/usr/bin/cmake --version | |
# Install ycm | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.deb | |
sudo dpkg -i ycm-cmake-modules-0.15.3-all.deb | |
# Install build tools | |
sudo apt-get install -qq -y ccache \ | |
ninja-build \ | |
valgrind \ | |
openjdk-17-jdk \ | |
openjdk-17-jre | |
sudo apt-get install -qq -y libace-dev \ | |
libsqlite3-dev \ | |
libtinyxml-dev \ | |
libedit-dev \ | |
qtbase5-dev \ | |
qtdeclarative5-dev \ | |
qtmultimedia5-dev \ | |
libqt5opengl5-dev \ | |
libqcustomplot-dev \ | |
libopencv-dev \ | |
libeigen3-dev \ | |
libgraphviz-dev \ | |
libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-dev \ | |
libpng-dev \ | |
libv4l-dev \ | |
libavcodec-dev \ | |
libavdevice-dev \ | |
libavformat-dev \ | |
libavutil-dev \ | |
portaudio19-dev \ | |
libsdl1.2-dev \ | |
libopenni2-dev \ | |
libftdi-dev \ | |
libi2c-dev \ | |
libjpeg-dev \ | |
libpcl-dev | |
# Install SWIG and bindings dependencies | |
sudo apt-get install -qq -y swig \ | |
mono-mcs \ | |
liblua5.3-dev \ | |
lua5.3 \ | |
tcl-dev \ | |
tk-dev \ | |
python3-dev \ | |
liboctave-dev \ | |
ruby-dev \ | |
ruby \ | |
perl | |
# Other tools useful in github actions | |
sudo apt-get install -qq -y jq \ | |
wget \ | |
curl \ | |
lcov \ | |
gcovr \ | |
wget \ | |
curl \ | |
xsltproc \ | |
libxml2-utils \ | |
source-highlight | |
# Remove old packages from apt cache | |
sudo apt-get autoclean -qq | |
- name: Build | |
run: | | |
export CLICOLOR_FORCE=1 | |
export YARP_COLORED_OUTPUT=1 | |
/usr/bin/cmake -S. -Bbuild \ | |
-C .ci/initial-cache.gh.linux.cmake \ | |
-DCMAKE_C_FLAGS=-fdiagnostics-color=always \ | |
-DCMAKE_CXX_FLAGS=-fdiagnostics-color=always \ | |
-DCMAKE_BUILD_TYPE=Profile \ | |
"-DCMAKE_C_FLAGS_PROFILE=-pg -g3 -ggdb -fno-inline -ftest-coverage -fprofile-arcs -DNDEBUG" \ | |
"-DCMAKE_CXX_FLAGS_PROFILE=-pg -g3 -ggdb -fno-inline -ftest-coverage -fprofile-arcs -DNDEBUG" \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \ | |
-DYARP_NO_DEPRECATED:BOOL=ON | |
(cd build && lcov --directory . --zerocounters) | |
(cd build && make && make CTEST_OUTPUT_ON_FAILURE=1 test) | |
# Capture coverage info for Profile builds | |
(cd build; lcov --directory . --capture --rc lcov_branch_coverage=1 --output-file coverage.info) | |
# Filter out system and test code | |
(cd build; lcov --remove coverage.info '/usr/*' 'tests/*' 'example/*' 'extern/*' 'build/*'--rc lcov_branch_coverage=1 --output-file coverage.info) | |
# Debug before upload | |
(cd build; lcov --list coverage.info) | |
- name: Run codacy-coverage-reporter | |
uses: codacy/codacy-coverage-reporter-action@master | |
with: | |
project-token: ${{ secrets.CODACY_TOKEN }} | |
coverage-reports: build/coverage.info | |
sonarcloud: | |
environment: code-analysis | |
name: 'SonarCloud' | |
needs: [select_environment, run-cmake] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v3 | |
with: | |
repository: ${{ needs.select_environment.outputs.repository }} | |
ref: ${{ needs.select_environment.outputs.ref }} | |
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis | |
- name: Get Sonar and Prepare Environment | |
id: get_sonar | |
env: | |
SONAR_ORGANIZATION: ${{ needs.select_environment.outputs.repository_owner }} | |
SONAR_PROJECT_KEY: ${{ needs.select_environment.outputs.repository_owner }}_${{ needs.select_environment.outputs.repository_name }} | |
SONAR_PROJECT_NAME: ${{ needs.select_environment.outputs.repository_name }} | |
SONAR_PROJECT_DESCRIPTION: 'Yet Another Robot Platform' | |
SONAR_PROJECT_VERSION: ${{ needs.select_environment.outputs.yarp_version }} | |
SONAR_LINKS_HOMEPAGE: 'https://www.yarp.it/' | |
SONAR_SOURCES: 'src' | |
SONAR_TESTS: 'tests' | |
SONAR_CFAMILY_GCOV_REPORTSPATH: 'build/coverage.info' | |
SONAR_CFAMILY_CACHE_ENABLED: true | |
SONAR_SCANNER_VERSION: '5.0.1.3006' | |
SONAR_THREADS: 2 | |
run: | | |
# Internal variables | |
SONAR_HOME_PATH=.sonar | |
SONAR_CACHE_PATH=${SONAR_HOME_PATH}/cache | |
SONAR_HOME=${HOME}/${SONAR_HOME_PATH} | |
# project name from SonarCloud projet creation page -Dsonar.projectKey=XXXX | |
echo "SONAR_PROJECT_KEY=${SONAR_PROJECT_KEY}" >> $GITHUB_ENV | |
# project name from SonarCloud projet creation page -Dsonar.projectKey=XXXX | |
echo "SONAR_PROJECT_NAME=${SONAR_PROJECT_NAME}" >> $GITHUB_ENV | |
# project name from SonarCloud projet creation page -Dsonar.projectName=XXXX | |
echo "SONAR_ORGANIZATION=${SONAR_ORGANIZATION}" >> $GITHUB_ENV | |
# project version | |
[[ ! -z "${SONAR_PROJECT_VERSION}" ]] && echo "SONAR_PROJECT_VERSION=${SONAR_PROJECT_VERSION}" >> $GITHUB_ENV | |
# Links | |
echo "SONAR_LINKS_HOMEPAGE=${SONAR_LINKS_HOMEPAGE:-https://github.com/${GITHUB_REPOSITORY}/}" >> $GITHUB_ENV | |
echo "SONAR_LINKS_CI=${SONAR_LINKS_CI:-https://github.com/${GITHUB_REPOSITORY}/actions/}" >> $GITHUB_ENV | |
echo "SONAR_LINKS_ISSUE=${SONAR_LINKS_ISSUE:-https://github.com/${GITHUB_REPOSITORY}/issues/}" >> $GITHUB_ENV | |
echo "SONAR_LINKS_SCM=${SONAR_LINKS_SCM:-https://github.com/${GITHUB_REPOSITORY}/}" >> $GITHUB_ENV | |
# Set default to SONAR_HOST_URL in not provided | |
echo "SONAR_HOST_URL=${SONAR_HOST_URL:-https://sonarcloud.io}" >> $GITHUB_ENV | |
echo "SONAR_SCANNER_VERSION=${SONAR_SCANNER_VERSION}" >> $GITHUB_ENV | |
SONAR_SCANNER_HOME=${SONAR_HOME}/sonar-scanner-${SONAR_SCANNER_VERSION}-linux | |
echo "SONAR_SCANNER_HOME=${SONAR_SCANNER_HOME}" >> $GITHUB_ENV | |
echo "SONAR_SCANNER_OPTS=${SONAR_SCANNER_OPTS:--server}" >> $GITHUB_ENV | |
echo "SONAR_SOURCES=${SONAR_SOURCES:-src}" >> $GITHUB_ENV | |
[[ -v SONAR_TESTS ]] && echo "SONAR_TESTS=${SONAR_TESTS}" >> $GITHUB_ENV | |
echo "SONAR_SOURCEENCODING=${SONAR_SOURCEENCODING:-UTF-8}" >> $GITHUB_ENV | |
echo "SONAR_THREADS=${SONAR_THREADS:-1}" >> $GITHUB_ENV | |
echo "SONAR_CFAMILY_CACHE_ENABLED=$([[ $SONAR_CFAMILY_CACHE_ENABLED = true ]] && echo true || echo false)" >> $GITHUB_ENV | |
[[ $SONAR_CFAMILY_CACHE_ENABLED = true ]] && echo "SONAR_CFAMILY_CACHE_PATH=${SONAR_CACHE_PATH}" >> $GITHUB_ENV | |
echo "PATH=${SONAR_HOME}/build-wrapper-linux-x86:${SONAR_SCANNER_HOME}/bin:${PATH}" >> $GITHUB_ENV | |
mkdir -p ${SONAR_HOME} | |
mkdir -p ${SONAR_CACHE_PATH} | |
cat $GITHUB_ENV | |
# Download sonar-scanner | |
curl -sSLo ${SONAR_HOME}/sonar-scanner.zip https://binaries${SONAR_HOME_PATH}source.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-$SONAR_SCANNER_VERSION-linux.zip | |
unzip -o ${SONAR_HOME}/sonar-scanner.zip -d ${SONAR_HOME}/ | |
# Download build-wrapper | |
curl -sSLo ${SONAR_HOME}/build-wrapper-linux-x86.zip https://sonarcloud.io/static/cpp/build-wrapper-linux-x86.zip | |
unzip -o ${SONAR_HOME}/build-wrapper-linux-x86.zip -d ${SONAR_HOME}/ | |
echo "sonar_path=${SONAR_HOME_PATH}" >> $GITHUB_OUTPUT | |
echo "sonar_cache_path=${SONAR_CACHE_PATH}" >> $GITHUB_OUTPUT | |
# This step is copied from the build step, please keep them in sync until we | |
# find a better way to do it automatically | |
- name: Dependencies [Linux] | |
if: runner.os == 'Linux' | |
shell: bash | |
run: | | |
# Install dep for gstreamer. It must be the first one. | |
sudo apt-get update | |
sudo apt-get install -y libunwind-dev | |
# Install Robotology dependencies from robotology ppa | |
sudo apt-add-repository -y ppa:robotology/ppa | |
sudo apt-get install -qq -y librobottestingframework-dev | |
# Install cmake | |
sudo apt-get install -qq -y cmake | |
which cmake | |
cmake --version | |
/usr/bin/cmake --version | |
# Install ycm | |
wget -nv https://github.com/robotology/ycm/releases/download/v0.15.3/ycm-cmake-modules-0.15.3-all.deb | |
sudo dpkg -i ycm-cmake-modules-0.15.3-all.deb | |
# Install build tools | |
sudo apt-get install -qq -y ccache \ | |
ninja-build \ | |
valgrind \ | |
openjdk-17-jdk \ | |
openjdk-17-jre | |
sudo apt-get install -qq -y libace-dev \ | |
libsqlite3-dev \ | |
libtinyxml-dev \ | |
libedit-dev \ | |
qtbase5-dev \ | |
qtdeclarative5-dev \ | |
qtmultimedia5-dev \ | |
libqt5opengl5-dev \ | |
libqcustomplot-dev \ | |
libopencv-dev \ | |
libeigen3-dev \ | |
libgraphviz-dev \ | |
libgstreamer1.0-dev \ | |
libgstreamer-plugins-base1.0-dev \ | |
libpng-dev \ | |
libv4l-dev \ | |
libavcodec-dev \ | |
libavdevice-dev \ | |
libavformat-dev \ | |
libavutil-dev \ | |
portaudio19-dev \ | |
libsdl1.2-dev \ | |
libopenni2-dev \ | |
libftdi-dev \ | |
libi2c-dev \ | |
libjpeg-dev \ | |
libpcl-dev | |
# Install SWIG and bindings dependencies | |
sudo apt-get install -qq -y swig \ | |
mono-mcs \ | |
liblua5.3-dev \ | |
lua5.3 \ | |
tcl-dev \ | |
tk-dev \ | |
python3-dev \ | |
liboctave-dev \ | |
ruby-dev \ | |
ruby \ | |
perl | |
# Other tools useful in github actions | |
sudo apt-get install -qq -y jq \ | |
wget \ | |
curl \ | |
lcov \ | |
gcovr \ | |
wget \ | |
curl \ | |
xsltproc \ | |
libxml2-utils \ | |
source-highlight | |
# Remove old packages from apt cache | |
sudo apt-get autoclean -qq | |
- name: Prepare ccache environment variables | |
id: init_ccache | |
run: | | |
CCACHE_HOME_PATH=.ccache | |
CCACHE_BASEDIR=$GITHUB_WORKSPACE | |
echo "CCACHE_BASEDIR=${CCACHE_BASEDIR}" >> $GITHUB_ENV | |
echo "CCACHE_HOME_PATH=.ccache" >> $GITHUB_ENV | |
echo "CCACHE_DIR=${CCACHE_BASEDIR}/${CCACHE_HOME_PATH}" >> $GITHUB_ENV | |
echo "CCACHE_COMPRESS=true" >> $GITHUB_ENV | |
echo "CCACHE_COMPRESSLEVEL=6" >> $GITHUB_ENV | |
echo "CCACHE_MAXSIZE=400M" >> $GITHUB_ENV | |
echo "CCACHE_CPP2=yes" >> $GITHUB_ENV | |
echo "PATH=/usr/lib/ccache::${PATH}" >> $GITHUB_ENV | |
cat $GITHUB_ENV | |
echo "ccache_path=${CCACHE_HOME_PATH}" >> $GITHUB_OUTPUT | |
- name: Print info and reset stats before build | |
run: | | |
set -x | |
which ccache | |
ccache --version | |
ccache -p | |
ls -la --color=always /usr/lib/ccache | |
# Reset ccache stats before starting | |
ccache -z | |
gcov --version | |
gcovr --version | |
- name: Handle cache | |
uses: actions/cache@v3 | |
with: | |
path: | | |
${{ steps.init_ccache.outputs.ccache_path }} | |
${{ steps.get_sonar.outputs.sonar_cache_path }} | |
key: sonar-cache-${{ needs.select_environment.outputs.timestamp }} | |
restore-keys: | | |
sonar-cache- | |
- name: Run CMake | |
run: | | |
export CLICOLOR_FORCE=1 | |
export YARP_COLORED_OUTPUT=1 | |
/usr/bin/cmake -S. -Bbuild \ | |
-C .ci/initial-cache.gh.linux.cmake \ | |
-DCMAKE_C_FLAGS=-fdiagnostics-color=always \ | |
-DCMAKE_CXX_FLAGS=-fdiagnostics-color=always \ | |
-DCMAKE_BUILD_TYPE=Profile \ | |
"-DCMAKE_C_FLAGS_PROFILE=-pg -g3 -ggdb -fno-inline -ftest-coverage -fprofile-arcs -DNDEBUG" \ | |
"-DCMAKE_CXX_FLAGS_PROFILE=-pg -g3 -ggdb -fno-inline -ftest-coverage -fprofile-arcs -DNDEBUG" \ | |
-DCMAKE_EXE_LINKER_FLAGS_PROFILE=-lgcov \ | |
-DCMAKE_MODULE_LINKER_FLAGS_PROFILE=-lgcov \ | |
-DCMAKE_SHARED_LINKER_FLAGS_PROFILE=-lgcov \ | |
-DCMAKE_STATIC_LINKER_FLAGS_PROFILE= \ | |
-DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON \ | |
-DYARP_NO_DEPRECATED:BOOL=ON \ | |
-DYARP_COMPILE_BINDINGS:BOOL=OFF | |
- name: Link compile_commands.json in the source directory | |
run: | | |
ln -s build/compile_commands.json . | |
- name: Build inside the build-wrapper | |
run: | | |
build-wrapper-linux-x86-64 --out-dir build_wrapper_output_directory cmake --build build --config Profile | |
- name: Run tests | |
run: | | |
# Download CTest2JUnit.xsl | |
wget https://raw.githubusercontent.com/zanata/zanata-tests/master/scripts/CTest2JUnit.xsl -O CTest2JUnit.xsl | |
# -T Test produces the xml output with the results | |
(cd build && ctest -T test --rerun-failed --output-on-failure --verbose) | |
xsltproc CTest2JUnit.xsl build/Testing/$(head -n 1 < build/Testing/TAG)/Test.xml > build/JUnitTestResults.xml | |
- name: Print tests results file | |
run: | | |
xmllint --format build/JUnitTestResults.xml | source-highlight -s xml --out-format=esc -o STDOUT | |
- name: Print ccache stats after build | |
run: | | |
set -x | |
# Print ccache stats | |
ccache -s | |
- name: Capture coverage info | |
run: | | |
(cd build && \ | |
gcovr --exclude="../extern/*" --sonarqube --branches --output coverage.xml --root .. .) | |
- name: Print coverage info file | |
run: | | |
xmllint --format build/coverage.xml | source-highlight -s xml --out-format=esc -o STDOUT | |
- name: Run sonar scanner | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} | |
run: | | |
# Run sonar scanner (here, arguments are passed through the command line but most of them can be written in the sonar-project.properties file) | |
[[ -v SONAR_TOKEN ]] && SONAR_TOKEN_CMD_ARG="-Dsonar.login=${SONAR_TOKEN}" | |
[[ -v SONAR_ORGANIZATION ]] && SONAR_ORGANIZATION_CMD_ARG="-Dsonar.organization=${SONAR_ORGANIZATION}" | |
[[ -v SONAR_PROJECT_NAME ]] && SONAR_PROJECT_NAME_CMD_ARG="-Dsonar.projectName=${SONAR_PROJECT_NAME}" | |
[[ -v SONAR_PROJECT_DESCRIPTION ]] && SONAR_PROJECT_DESCRIPTION_CMD_ARG="-Dsonar.projectDescription=${SONAR_PROJECT_DESCRIPTION}" | |
[[ -v SONAR_PROJECT_VERSION ]] && SONAR_PROJECT_VERSION_CMD_ARG="-Dsonar.projectVersion=${SONAR_PROJECT_VERSION}" | |
if [[ "$GITHUB_EVENT_NAME" = "pull_request" || "$GITHUB_EVENT_NAME" == "pull_request_target" ]]; then | |
SONAR_PR_CMD_ARGS="\ | |
-Dsonar.pullrequest.provider=github \ | |
-Dsonar.pullrequest.github.repository=${SONAR_ORGANIZATION}/${SONAR_PROJECT_NAME} \ | |
-Dsonar.pullrequest.branch=${{ needs.select_environment.outputs.head_ref }} \ | |
-Dsonar.pullrequest.key=${{ needs.select_environment.outputs.pr_number }} \ | |
-Dsonar.pullrequest.base=${{ needs.select_environment.outputs.base_ref }} \ | |
-Dsonar.pullrequest.github.endpoint=https://api.github.com" | |
fi | |
# Paths to test files | |
[[ -v SONAR_TESTS ]] && SONAR_TESTS_CMD_ARG="-Dsonar.tests=${SONAR_TESTS}" | |
# Path to cache | |
[[ -v SONAR_CFAMILY_CACHE_PATH ]] && SONAR_CFAMILY_CACHE_PATH_CMD_ARG="-Dsonar.cfamily.cache.path=${SONAR_CFAMILY_CACHE_PATH}" | |
set -x | |
sonar-scanner \ | |
-Dsonar.host.url="${SONAR_HOST_URL}" \ | |
-Dsonar.projectKey=${SONAR_PROJECT_KEY} \ | |
-Dsonar.language=c++ \ | |
-Dsonar.sources=${SONAR_SOURCES} \ | |
-Dsonar.links.homepage=${SONAR_LINKS_HOMEPAGE} \ | |
-Dsonar.links.ci=${SONAR_LINKS_CI} \ | |
-Dsonar.links.issue=${SONAR_LINKS_ISSUE} \ | |
-Dsonar.links.scm=${SONAR_LINKS_SCM} \ | |
-Dsonar.cfamily.build-wrapper-output=build_wrapper_output_directory \ | |
-Dsonar.sourceEncoding=${SONAR_SOURCEENCODING} \ | |
-Dsonar.cfamily.threads=${SONAR_THREADS} \ | |
-Dsonar.cfamily.cache.enabled=${SONAR_CFAMILY_CACHE_ENABLED} \ | |
-Dsonar.coverageReportPaths=build/coverage.xml \ | |
-Dsonar.junit.reportPaths=build/JUnitTestResults.xml \ | |
-Dsonar.exclusions="src/yarp*/**/* src/carriers/**/* src/devices/**/* src/idls/**/* src/libyarp*/**/* src/robottestingframework-plugins/**/* tests/**/*" \ | |
-Dsonar.coverage.exclusions="\ | |
src/libYARP_dev/src/yarp/dev/tests/*,\ | |
src/devices/*/tests/*,\ | |
src/carriers/*/tests/*,\ | |
src/portmonitors/*/tests/*,\ | |
tests/**/*,\ | |
src/yarp*/**/*,\ | |
robottestingframework-plugins/**/*\ | |
" \ | |
-Dsonar.branch.longLivedBranches.regex="^(master|yarp-.+)$" \ | |
${SONAR_TESTS_CMD_ARG} \ | |
${SONAR_PROJECT_NAME_CMD_ARG} \ | |
${SONAR_PROJECT_DESCRIPTION_CMD_ARG} \ | |
${SONAR_PROJECT_VERSION_CMD_ARG} \ | |
${SONAR_PR_CMD_ARGS} \ | |
${SONAR_TOKEN_CMD_ARG} \ | |
${SONAR_ORGANIZATION_CMD_ARG} \ | |
${SONAR_CFAMILY_CACHE_PATH_CMD_ARG} |