diff --git a/.github/actions/fetch-fastdds-statistics-backend-repos/action.yml b/.github/actions/fetch-fastdds-statistics-backend-repos/action.yml deleted file mode 100644 index 1502d2b1..00000000 --- a/.github/actions/fetch-fastdds-statistics-backend-repos/action.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: 'fetch-fastdds-statistics-backend-repos' -description: 'Fetch Fast DDS and its dependencies' -runs: - using: "composite" - steps: - - id: fetch-fastdds-statistics-backend-repos - run: | - wget https://raw.githubusercontent.com/eProsima/Fast-DDS-statistics-backend/master/fastdds_statistics_backend.repos - vcs import src < fastdds_statistics_backend.repos - shell: bash diff --git a/.github/actions/project_dependencies/action.yml b/.github/actions/project_dependencies/action.yml new file mode 100644 index 00000000..8353ff6c --- /dev/null +++ b/.github/actions/project_dependencies/action.yml @@ -0,0 +1,77 @@ +name: fastdds_monitor_dependencies_ubuntu +description: Common first step for all jobs. Checkout repository, download dependencies and install required packages. + +inputs: + + os: + description: Specify runs-on machine to download specific artifact + required: true + + cmake_build_type: + description: Specify cmake_build_type option to download specific artifact + required: true + + dependencies_artifact_postfix: + description: Specify artifact postfix in case it wants to use a manual one + required: false + default: _nightly + + target_workspace: + description: Specify directory to download dependencies + required: false + default: ${{ github.workspace }}/install + + # This must be passed as an argument because actions do not access to workflow secrets: + # Unrecognized named-value: 'secrets'. https://github.com/orgs/community/discussions/27054 + # Pass argument {{ secrets.GITHUB_TOKEN }} from workflow + secret_token: + description: 'Secret token to authenticate the WebRequest so it not get a rate limit error.' + required: false + default: '' + +runs: + using: composite + steps: + + - name: Install Fast DDS dependencies + uses: eProsima/eProsima-CI/multiplatform/install_fastdds_dependencies@v0 + with: + cmake_build_type: ${{ inputs.cmake_build_type }} + + - name: Install apt packages + if: runner.os == 'Linux' + uses: ./src/.github/actions/install-apt-packages + + - name: Install Python packages + if: runner.os == 'Linux' + uses: ./src/.github/actions/install-python-packages + + - name: Update colcon mixin + if: runner.os == 'Linux' + shell: bash + run: | + colcon mixin add default \ + https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml + colcon mixin update default + continue-on-error: true + + - name: Install Qt + if: runner.os == 'Linux' + uses: jurplel/install-qt-action@v2.13.0 + with: + version: '5.15.2' + dir: '${{ github.workspace }}/qt_installation/' + modules: 'qtcharts' + + - name: Install OpenSSL + if: runner.os == 'Windows' + uses: ./src/.github/actions/install-openssl-windows + + - name: Install Qt + if: runner.os == 'Windows' + uses: jurplel/install-qt-action@v2.13.0 + with: + version: '5.15.2' + arch: 'win64_msvc2019_64' + dir: '${{ github.workspace }}/qt_installation/' + modules: 'qtcharts' diff --git a/.github/workflows/clang_colcon.meta b/.github/workflows/configurations/Linux/clang_colcon.meta similarity index 100% rename from .github/workflows/clang_colcon.meta rename to .github/workflows/configurations/Linux/clang_colcon.meta diff --git a/.github/workflows/test_colcon.meta b/.github/workflows/configurations/Linux/colcon.meta similarity index 91% rename from .github/workflows/test_colcon.meta rename to .github/workflows/configurations/Linux/colcon.meta index baf1018f..a063e913 100644 --- a/.github/workflows/test_colcon.meta +++ b/.github/workflows/configurations/Linux/colcon.meta @@ -12,7 +12,6 @@ { "cmake-args": [ - "-DCMAKE_BUILD_TYPE=Debug", "-DBUILD_MOCK=ON", "-DQT_PATH=$GITHUB_WORKSPACE/qt_installation/Qt/5.15.2", "-DBUILD_DOCUMENTATION=ON", diff --git a/.github/workflows/configurations/Windows/colcon.meta b/.github/workflows/configurations/Windows/colcon.meta new file mode 100644 index 00000000..394e0560 --- /dev/null +++ b/.github/workflows/configurations/Windows/colcon.meta @@ -0,0 +1,56 @@ +{ + "names": + { + "foonathan_memory": + { + "cmake-args": + [ + "-DCMAKE_CXX_FLAGS='/WX /EHsc'", + "-Ax64", + "-T host=x64", + "-DBUILD_SHARED_LIBS=OFF", + "-DFOONATHAN_MEMORY_BUILD_TOOLS=ON", + "-DCMAKE_POSITION_INDEPENDENT_CODE=ON", + "-DFOONATHAN_MEMORY_BUILD_TESTS=OFF" + ] + }, + + "fastcdr": + { + "cmake-args": + [ + "-DCMAKE_CXX_FLAGS='/WX /EHsc'", + "-Ax64", + "-T host=x64" + ] + }, + + "fastrtps": + { + "cmake-args": + [ + "-DCMAKE_CXX_FLAGS='/WX /EHsc'", + "-Ax64", + "-T host=x64", + "-DFASTDDS_STATISTICS=ON", + "-DTHIRDPARTY=ON", + "-DSECURITY=ON", + "-DCOMPILE_EXAMPLES=OFF", + "-DEPROSIMA_BUILD_TESTS=OFF", + "-DINTERNAL_DEBUG=ON" + ] + }, + + "fastdds_monitor": + { + "cmake-args": + [ + "-DCMAKE_CXX_FLAGS='/WX /EHsc'", + "-Ax64", + "-T host=x64", + "-DBUILD_MOCK=ON", + "-DQT_PATH=$GITHUB_WORKSPACE/qt_installation/Qt/5.15.2" + ] + }, + } +} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b7f06ef..348ecf97 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,7 +1,15 @@ name: test on: + workflow_dispatch: + inputs: + + dependencies_artifact_postfix: + description: 'Postfix name to add to artifact name to download dependencies. This is use to download a specific artifact version from eProsima-CI.' + required: true + default: '_nightly' + pull_request: push: branches: @@ -9,371 +17,96 @@ on: schedule: - cron: '0 0 * * *' -jobs: - - windows-build-test-release: - runs-on: windows-latest - environment: - name: codecov - env: - CXXFLAGS: /MP - OPENSSL64_ROOT: "C:/Program Files/OpenSSL-Win64" - - steps: - - uses: actions/checkout@v2 - with: - path: Fast-DDS-monitor - - - name: Install OpenSSL - uses: ./Fast-DDS-monitor/.github/actions/install-openssl-windows - - - name: Install GoogleTest - shell: pwsh - run: > - cmake --find-package -DNAME=GTest -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST | Tee-Object -Variable res; - if ( $res -notlike '*GTest found.*') - { - git clone https://github.com/google/googletest.git; - cmake -DCMAKE_INSTALL_PREFIX='C:\Program Files\gtest' -Dgtest_force_shared_crt=ON -DBUILD_GMOCK=ON ` - -B build\gtest -A x64 -T host=x64 googletest; - cmake --build build\gtest --config Release --target install - } - - - name: Install Qt - uses: jurplel/install-qt-action@v2.13.0 - with: - version: '5.15.2' - arch: 'win64_msvc2019_64' - dir: '${{ github.workspace }}/qt_installation/' - modules: 'qtcharts' - - - name: Install foonatham memory - shell: pwsh - run: > - git clone --recurse-submodules --branch v0.6-2 https://github.com/foonathan/memory.git; - cmake -DBUILD_SHARED_LIBS=OFF -DFOONATHAN_MEMORY_BUILD_TOOLS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON ` - -DFOONATHAN_MEMORY_BUILD_TESTS=OFF -Ax64 -T host=x64 -B build\memory memory; - cmake --build build\memory --config Release --target install - - - name: install Fast-CDR - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-CDR.git; - cmake -Ax64 -T host=x64 -B build\fastcdr Fast-CDR; - cmake --build build\fastcdr --config Release --target install - - - name: Install Fast-DDS - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-DDS.git; - cmake -DTHIRDPARTY=ON -DSECURITY=ON -DCOMPILE_EXAMPLES=OFF -DEPROSIMA_BUILD_TESTS=OFF ` - -DINTERNAL_DEBUG=ON -Ax64 -T host=x64 -B build\fastdds Fast-DDS; - cmake --build build\fastdds --config Release --target install - - - name: Install Fast-DDS-statistics-backend - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-DDS-statistics-backend.git; - cmake -DCMAKE_PREFIX_PATH='C:\Program Files\gtest' ` - -B build\backend -A x64 -T host=x64 Fast-DDS-statistics-backend; - cmake --build build\backend --config Release --target install - - - name: Install Fast-DDS-monitor - shell: pwsh - run: > - cmake -DCMAKE_PREFIX_PATH='C:\Program Files\gtest' -DBUILD_APP_TESTS=ON -DBUILD_MOCK=ON ` - -DQT_PATH=$GITHUB_WORKSPACE/qt_installation/Qt/5.15.2 -DCMAKE_CXX_FLAGS="/WX /EHsc" ` - -B build\monitor -A x64 -T host=x64 Fast-DDS-monitor; - cmake --build build\monitor --config Release --target install - - - name: Run tests - shell: pwsh - run: ctest -C Release --test-dir build\monitor -V --timeout 60 - - windows-build-test-debug: - runs-on: windows-latest - environment: - name: codecov - env: - CXXFLAGS: /MP - OPENSSL64_ROOT: "C:/Program Files/OpenSSL-Win64" - - steps: - - uses: actions/checkout@v2 - with: - path: Fast-DDS-monitor - - - name: Install OpenSSL - uses: ./Fast-DDS-monitor/.github/actions/install-openssl-windows - - - name: Install GoogleTest - shell: pwsh - run: > - cmake --find-package -DNAME=GTest -DCOMPILER_ID=GNU -DLANGUAGE=CXX -DMODE=EXIST | Tee-Object -Variable res; - if ( $res -notlike '*GTest found.*') - { - git clone https://github.com/google/googletest.git; - cmake -DCMAKE_INSTALL_PREFIX='C:\Program Files\gtest' -Dgtest_force_shared_crt=ON -DBUILD_GMOCK=ON ` - -B build\gtest -A x64 -T host=x64 googletest; - cmake --build build\gtest --config Debug --target install - } - - - name: Install Qt - uses: jurplel/install-qt-action@v2.13.0 - with: - version: '5.15.2' - arch: 'win64_msvc2019_64' - dir: '${{ github.workspace }}/qt_installation/' - modules: 'qtcharts' - - - name: Install foonatham memory - shell: pwsh - run: > - git clone --recurse-submodules --branch v0.6-2 https://github.com/foonathan/memory.git; - cmake -DBUILD_SHARED_LIBS=OFF -DFOONATHAN_MEMORY_BUILD_TOOLS=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON ` - -DFOONATHAN_MEMORY_BUILD_TESTS=OFF -Ax64 -T host=x64 -B build\memory memory; - cmake --build build\memory --config Debug --target install - - - name: install Fast-CDR - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-CDR.git; - cmake -Ax64 -T host=x64 -B build\fastcdr Fast-CDR; - cmake --build build\fastcdr --config Debug --target install - - - name: Install Fast-DDS - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-DDS.git; - cmake -DTHIRDPARTY=ON -DSECURITY=ON -DCOMPILE_EXAMPLES=OFF -DEPROSIMA_BUILD_TESTS=OFF ` - -DINTERNAL_DEBUG=ON -Ax64 -T host=x64 -B build\fastdds Fast-DDS; - cmake --build build\fastdds --config Debug --target install +env: + default_dependencies_artifact_postfix: '_nightly' - - name: Install Fast-DDS-statistics-backend - shell: pwsh - run: > - git clone https://github.com/eProsima/Fast-DDS-statistics-backend.git; - cmake -DCMAKE_PREFIX_PATH='C:\Program Files\gtest' ` - -B build\backend -A x64 -T host=x64 Fast-DDS-statistics-backend; - cmake --build build\backend --config Debug --target install - - - name: Install Fast-DDS-monitor - shell: pwsh - run: > - cmake -DCMAKE_PREFIX_PATH='C:\Program Files\gtest' -DBUILD_APP_TESTS=ON -DBUILD_MOCK=ON ` - -DQT_PATH=$GITHUB_WORKSPACE/qt_installation/Qt/5.15.2 -DCMAKE_CXX_FLAGS="/WX /EHsc" ` - -B build\monitor -A x64 -T host=x64 Fast-DDS-monitor; - cmake --build build\monitor --config Debug --target install - - - name: Run tests - shell: pwsh - run: ctest -C Debug --test-dir build\monitor -V --timeout 60 +jobs: - ubuntu-build-test: - runs-on: ubuntu-latest - environment: - name: codecov +##################################################################### +# TEST + + multiplatform-build: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + cmake_build_type: + - Release + - Debug + os: + - ubuntu-20.04 + - ubuntu-22.04 + - windows-2019 + - windows-2021 steps: - - uses: actions/checkout@v2 - with: - path: src/Fast-DDS-monitor - - - name: Install apt packages - uses: ./src/Fast-DDS-monitor/.github/actions/install-apt-packages - - - name: Install GTest - uses: ./src/Fast-DDS-monitor/.github/actions/install-gtest - - - name: Install Python packages - uses: ./src/Fast-DDS-monitor/.github/actions/install-python-packages - - - name: Fetch Fast DDS Statistics Backend repositories - uses: ./src/Fast-DDS-monitor/.github/actions/fetch-fastdds-statistics-backend-repos - - name: Update colcon mixin - run: | - colcon mixin add default \ - https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml - colcon mixin update default - continue-on-error: true - - - name: Install Qt - uses: jurplel/install-qt-action@v2.13.0 + - name: Sync repository + uses: eProsima/eProsima-CI/external/checkout@v0 with: - version: '5.15.2' - dir: '${{ github.workspace }}/qt_installation/' - modules: 'qtcharts' - - - name: Build workspace - run: | - cat src/Fast-DDS-monitor/.github/workflows/test_colcon.meta - colcon build \ - --event-handlers=console_direct+ \ - --metas src/Fast-DDS-monitor/.github/workflows/test_colcon.meta \ - --mixin coverage-gcc asan-gcc - - - name: Run tests - run: | - source install/setup.bash && \ - QT_QPA_PLATFORM=offscreen \ - colcon test \ - --packages-select fastdds_monitor \ - --event-handlers=console_direct+ \ - --return-code-on-test-failure - - - name: Generate coverage report - run: | - cp src/Fast-DDS-monitor/codecov.yml . - mkdir coverage-report - gcovr \ - --root src/Fast-DDS-monitor/ \ - --object-directory build/fastdds_monitor \ - --output coverage-report/coverage.xml \ - --xml-pretty \ - --exclude='.*docs/.*' \ - --exclude='.*test/.*' \ - --exclude='.*mock/.*' \ - --exclude='.*github/.*' \ - --exclude-unreachable-branches + path: ${{ github.workspace }}/src/fastdds_monitor - - name: Upload coverage - uses: actions/upload-artifact@v1 + - name: Download dependencies and install requirements + uses: ./src/fastdds_monitor/.github/actions/project_dependencies with: - name: coverage-report - path: coverage-report/ + os: ${{ matrix.os }} + cmake_build_type: ${{ matrix.cmake_build_type }} + dependencies_artifact_postfix: ${{ github.event.inputs.dependencies_artifact_postfix || env.default_dependencies_artifact_postfix }} + secret_token: ${{ secrets.GITHUB_TOKEN }} - - name: Upload documentation - uses: actions/upload-artifact@v1 + - name: Fetch Fast DDS Monitor repositories + uses: eProsima/eProsima-CI/multiplatform/vcs_import@v0 with: - name: Documentation HTML - path: install/fastdds_monitor/docs/fastdds_monitor_docs/sphinx/html/ + vcs_repos_file: ${{ github.workspace }}/src/fastdds_monitor/fastdds_monitor.repos + destination_workspace: ${{ github.workspace }}/src - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 + - name: Compile + #uses: eProsima/eProsima-CI/multiplatform/colcon_build_test@v0 + uses: eProsima/eProsima-CI/multiplatform/colcon_build@v0 with: - token: ${{ secrets.CODECOV_TOKEN }} - file: coverage-report/coverage.xml - root_dir: src/Fast-DDS-monitor - fail_ci_if_error: true + #packages_names: fastdds_monitor + colcon_build_args: '--packages-up-to fastdds_monitor' + cmake_args: -DCMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} + #workspace_dependencies: ${{ github.workspace }}/install + colcon_meta_file: ${{ github.workspace }}/src/fastdds_monitor/.github/workflows/configurations/${{ runner.os }}/colcon.meta - - name: Upload Logs - uses: actions/upload-artifact@v1 - with: - name: colcon-logs-ubuntu - path: log/ - if: always() - - name: Upload spelling errors - uses: actions/upload-artifact@v1 - with: - name: spelling_errors.txt - path: build/fastdds_monitor/docs/test/spelling/output.txt - continue-on-error: true +##################################################################### +# CLANG - clang-tidy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - path: src/Fast-DDS-monitor - - - uses: ./src/Fast-DDS-monitor/.github/actions/install-apt-packages - - uses: ./src/Fast-DDS-monitor/.github/actions/install-gtest - - uses: ./src/Fast-DDS-monitor/.github/actions/install-python-packages - - uses: ./src/Fast-DDS-monitor/.github/actions/fetch-fastdds-statistics-backend-repos - - - name: Install Qt - uses: jurplel/install-qt-action@v2.13.0 - with: - version: '5.15.2' - dir: '${{ github.workspace }}/qt_installation/' - modules: 'qtcharts' - - - name: Build workspace - run: | - cat src/Fast-DDS-monitor/.github/workflows/clang_colcon.meta - colcon build \ - --event-handlers=console_direct+ \ - --metas src/Fast-DDS-monitor/.github/workflows/clang_colcon.meta - - - name: Run clang-tidy - run: | - cd build/fastdds_monitor - run-clang-tidy -header-filter='.*' -checks='clang-analyzer-cplusplus' -quiet 2> ${{ github.workspace }}/clang_results.yml - - - name: Upload clang results - uses: actions/upload-artifact@v1 - with: - name: clang_results - path: ${{ github.workspace }}/clang_results.yml - - uncrustify: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - with: - path: src/Fast-DDS-monitor + # clang: + # runs-on: ubuntu-22.04 + # steps: - - name: Fetch all branches and tags - run: | - cd src/Fast-DDS-monitor - git fetch --prune --unshallow + # - name: Sync repository + # uses: eProsima/eProsima-CI/external/checkout@v0 + # with: + # path: ${{ github.workspace }}/src - - uses: ./src/Fast-DDS-monitor/.github/actions/install-apt-packages - - uses: ./src/Fast-DDS-monitor/.github/actions/install-python-packages + # - name: Download dependencies and install requirements + # #uses: ./src/fastdds_monitor/.github/actions/project_dependencies + # uses: ${{ github.workspace }}/src/fastdds_monitor/.github/actions/project_dependencies + # with: + # os: ubuntu-22.04 + # cmake_build_type: Release + # dependencies_artifact_postfix: ${{ github.event.inputs.dependencies_artifact_postfix || env.default_dependencies_artifact_postfix }} + # secret_token: ${{ secrets.GITHUB_TOKEN }} - - name: Install uncrustify - run: | - git clone https://github.com/uncrustify/uncrustify.git \ - --branch uncrustify-0.71.0 \ - --single-branch uncrustify - mkdir -p uncrustify/build - cd uncrustify/build - cmake .. - sudo cmake --build . --target install - cd ../.. - sudo rm -rf uncrustify + # - name: Compile and run tests + # uses: eProsima/eProsima-CI/multiplatform/clang_build_test@v0 + # with: + # #packages_names: ${{ env.code_packages_names }} + # workspace_dependencies: ${{ github.workspace }}/install + # colcon_meta_file: ${{ github.workspace }}/src/fastdds_monitor/.github/workflows/configurations/Linux/clang_colcon.meta - - name: Clone ament_lint - run: | - git clone https://github.com/ament/ament_lint.git src/ament_lint - - name: Build ament_uncrustify - run: colcon build --packages-up-to ament_uncrustify +##################################################################### +# UNCRUSTIFY - - name: Fetch uncrustify config file - run: | - curl \ - -l https://raw.githubusercontent.com/eProsima/cpp-style/master/uncrustify.cfg \ - -o uncrustify.cfg + # uncrustify: + # runs-on: ubuntu-22.04 + # steps: - - name: Get difference - run: | - cd src/Fast-DDS-monitor - echo "MODIFIED_FILES=$(git diff --name-only origin/${GITHUB_BASE_REF} origin/${GITHUB_HEAD_REF} | grep -e '\.h' -e '\.hpp' -e '\.cpp' -e '\.ipp' | tr '\n' ' ')" >> $GITHUB_ENV + # - name: Uncrustify + # uses: eProsima/eProsima-CI/ubuntu/uncrustify@v0 - - name: Check difference - run: | - cd src/Fast-DDS-monitor - if [[ -z "${MODIFIED_FILES}" ]] - then - touch empty.hpp - echo "MODIFIED_FILES=empty.hpp" >> $GITHUB_ENV - fi - - - name: Check style - run: | - source install/local_setup.bash - cd src/Fast-DDS-monitor - ament_uncrustify \ - -c ../../uncrustify.cfg \ - --language CPP \ - --xunit-file ../../uncrustify_results.xml \ - ${MODIFIED_FILES} - - - name: Upload uncrustify results - uses: actions/upload-artifact@v1 - with: - name: uncrustify_results - path: uncrustify_results.xml