diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000000..9c21e1e17c --- /dev/null +++ b/.clang-format @@ -0,0 +1,15 @@ +--- +Language: Cpp +BasedOnStyle: Google + +ColumnLimit: 100 +AccessModifierOffset: -2 +AlignAfterOpenBracket: AlwaysBreak +BreakBeforeBraces: Allman +ConstructorInitializerIndentWidth: 0 +ContinuationIndentWidth: 2 +DerivePointerAlignment: false +PointerAlignment: Middle +ReflowComments: false +IncludeBlocks: Preserve +... diff --git a/.github/workflows/ci-build-binary.yml b/.github/workflows/ci-build-binary.yml new file mode 100644 index 0000000000..12d9fe7847 --- /dev/null +++ b/.github/workflows/ci-build-binary.yml @@ -0,0 +1,23 @@ +name: Binary Build +on: + pull_request: + push: + branches: + - master + schedule: + # Run every day to detect flakiness and broken dependencies + - cron: '07 6 * * *' + +jobs: + binary: + name: Foxy binary build + runs-on: ubuntu-latest + strategy: + matrix: + env: + - {ROS_DISTRO: foxy, ROS_REPO: main} + - {ROS_DISTRO: foxy, ROS_REPO: testing} + steps: + - uses: actions/checkout@v1 + - uses: 'ros-industrial/industrial_ci@master' + env: ${{matrix.env}} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci-build-coverage.yml similarity index 56% rename from .github/workflows/ci.yml rename to .github/workflows/ci-build-coverage.yml index f21c4535eb..fc41c238d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci-build-coverage.yml @@ -1,55 +1,47 @@ -name: Test ros2_controllers +name: Coverage Build on: pull_request: push: branches: - master schedule: - # Run every morning to detect flakiness and broken dependencies - - cron: '17 8 * * *' + # Run every day to detect flakiness and broken dependencies + - cron: '07 7 * * *' jobs: - ci_binary: - name: Foxy binary job - runs-on: ubuntu-latest - strategy: - matrix: - env: - - {ROS_DISTRO: foxy, ROS_REPO: main} - - {ROS_DISTRO: foxy, ROS_REPO: testing} - env: - UPSTREAM_WORKSPACE: .github/workspace.repos - steps: - - uses: actions/checkout@v1 - - uses: ros-industrial/industrial_ci@master - env: ${{matrix.env}} - - ci_source: - name: Foxy source job + coverage: + name: coverage build runs-on: ubuntu-20.04 strategy: fail-fast: false steps: - - uses: ros-tooling/setup-ros@v0.1 + - uses: ros-tooling/setup-ros@0.0.26 with: required-ros-distributions: foxy - - uses: ros-tooling/action-ros-ci@v0.1 + - uses: ros-tooling/action-ros-ci@v0.2 with: target-ros2-distro: foxy # build all packages listed in the meta package - package-name: | + package-name: + diff_drive_controller effort_controllers forward_command_controller joint_state_broadcaster joint_state_controller joint_trajectory_controller position_controllers + ros2_controllers velocity_controllers vcs-repo-file-url: | - https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }}/.github/workspace.repos - colcon-mixin-name: coverage-gcc + https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }}/ros2_controllers/ros2_controllers.repos + colcon-defaults: | + { + "build": { + "mixin": ["coverage-gcc"] + } + } colcon-mixin-repository: https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml - - uses: codecov/codecov-action@v1 + - uses: codecov/codecov-action@v1.0.14 with: file: ros_ws/lcov/total_coverage.info flags: unittests diff --git a/.github/workflows/ci-build-source.yml b/.github/workflows/ci-build-source.yml new file mode 100644 index 0000000000..0c549075b5 --- /dev/null +++ b/.github/workflows/ci-build-source.yml @@ -0,0 +1,39 @@ +name: Source Build +on: + push: + branches: + - master + schedule: + # Run every day to detect flakiness and broken dependencies + - cron: '27 7 * * *' + +jobs: + source: + name: source build + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + steps: + - uses: ros-tooling/setup-ros@0.0.26 + - uses: ros-tooling/action-ros-ci@v0.2 + with: + target-ros2-distro: foxy + # build all packages listed in the meta package + package-name: + diff_drive_controller + effort_controllers + forward_command_controller + joint_state_broadcaster + joint_state_controller + joint_trajectory_controller + position_controllers + ros2_controllers + velocity_controllers + vcs-repo-file-url: | + https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos + https://raw.githubusercontent.com/${{ github.repository }}/${{ github.sha }}/ros2_controllers/ros2_controllers.repos + colcon-mixin-repository: https://raw.githubusercontent.com/colcon/colcon-mixin-repository/master/index.yaml + - uses: actions/upload-artifact@v1 + with: + name: colcon-logs-${{ matrix.os }} + path: ros_ws/log diff --git a/.github/workflows/ci-format.yml b/.github/workflows/ci-format.yml new file mode 100644 index 0000000000..74158cbd33 --- /dev/null +++ b/.github/workflows/ci-format.yml @@ -0,0 +1,24 @@ +# This is a format job. Pre-commit has a first-party GitHub action, so we use +# that: https://github.com/pre-commit/action + +name: Format + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + +jobs: + pre-commit: + name: Format + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Install clang-format-10 + run: sudo apt-get install clang-format-10 cppcheck + - uses: pre-commit/action@v2.0.2 + with: + extra_args: --all-files --hook-stage manual diff --git a/.github/workflows/ci-ros-lint.yaml b/.github/workflows/ci-ros-lint.yaml new file mode 100644 index 0000000000..6e9974645f --- /dev/null +++ b/.github/workflows/ci-ros-lint.yaml @@ -0,0 +1,55 @@ +name: ROS Lint +on: + pull_request: + +jobs: + ament_lint: + name: ament_${{ matrix.linter }} + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + linter: [copyright, cppcheck, lint_cmake] + steps: + - uses: actions/checkout@v1 + - uses: ros-tooling/setup-ros@v0.1 + - uses: ros-tooling/action-ros-lint@v0.1 + with: + distribution: foxy + linter: ${{ matrix.linter }} + package-name: + diff_drive_controller + effort_controllers + forward_command_controller + joint_state_broadcaster + joint_state_controller + joint_trajectory_controller + position_controllers + ros2_controllers + velocity_controllers + + ament_lint_cpplint: + name: ament_${{ matrix.linter }} + runs-on: ubuntu-20.04 + strategy: + fail-fast: false + matrix: + linter: [cpplint] + steps: + - uses: actions/checkout@v1 + - uses: ros-tooling/setup-ros@v0.1 + - uses: ros-tooling/action-ros-lint@v0.1 + with: + distribution: foxy + linter: cpplint + arguments: "--filter=-whitespace/newline" + package-name: + diff_drive_controller + effort_controllers + forward_command_controller + joint_state_broadcaster + joint_state_controller + joint_trajectory_controller + position_controllers + ros2_controllers + velocity_controllers diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml deleted file mode 100644 index 19fd5f2801..0000000000 --- a/.github/workflows/lint.yml +++ /dev/null @@ -1,30 +0,0 @@ -# Run linters automatically on pull requests. -name: Lint ros2_controllers -on: - pull_request: - -jobs: - ament_lint: - name: ament_${{ matrix.linter }} - runs-on: ubuntu-20.04 - strategy: - fail-fast: false - matrix: - linter: [copyright, cppcheck, cpplint, flake8, pep257, uncrustify, xmllint] - steps: - - uses: actions/checkout@v1 - - uses: ros-tooling/setup-ros@v0.1 - - uses: ros-tooling/action-ros-lint@v0.1 - with: - distribution: foxy - linter: ${{ matrix.linter }} - package-name: - diff_drive_controller - effort_controllers - forward_command_controller - joint_state_broadcaster - joint_state_controller - joint_trajectory_controller - position_controllers - ros2_controllers - velocity_controllers diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000000..377b87d6d4 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,143 @@ +# To use: +# +# pre-commit run -a +# +# Or: +# +# pre-commit install # (runs every time you commit in git) +# +# To update this file: +# +# pre-commit autoupdate +# +# See https://github.com/pre-commit/pre-commit + +repos: + # Standard hooks + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: check-added-large-files + - id: check-ast + - id: check-case-conflict + - id: check-docstring-first + - id: check-merge-conflict + - id: check-symlinks + - id: check-xml + - id: check-yaml + - id: debug-statements + - id: end-of-file-fixer + - id: mixed-line-ending + - id: trailing-whitespace + - id: fix-byte-order-marker + + # Python hooks + - repo: https://github.com/asottile/pyupgrade + rev: v2.12.0 + hooks: + - id: pyupgrade + args: [--py36-plus] + + - repo: https://github.com/psf/black + rev: 20.8b1 + hooks: + - id: black + args: ["--line-length=100"] + + # PEP 257 + - repo: https://github.com/FalconSocial/pre-commit-mirrors-pep257 + rev: v0.3.3 + hooks: + - id: pep257 + args: ["--ignore=D100,D101,D102,D103,D104,D105,D106,D107,D203,D212,D404"] + + - repo: https://github.com/pycqa/flake8 + rev: 3.9.0 + hooks: + - id: flake8 + args: ["--ignore=E501"] + + # CPP hooks + - repo: local + hooks: + - id: clang-format + name: clang-format + description: Format files with ClangFormat. + entry: clang-format-10 + language: system + files: \.(c|cc|cxx|cpp|frag|glsl|h|hpp|hxx|ih|ispc|ipp|java|js|m|proto|vert)$ + args: ['-fallback-style=none', '-i'] + # The same options as in ament_cppcheck are used, but its not working... + #- repo: https://github.com/pocc/pre-commit-hooks + #rev: v1.1.1 + #hooks: + #- id: cppcheck + #args: ['--error-exitcode=1', '-f', '--inline-suppr', '-q', '-rp', '--suppress=internalAstError', '--suppress=unknownMacro', '--verbose'] + + - repo: local + hooks: + - id: ament_cppcheck + name: ament_cppcheck + description: Static code analysis of C/C++ files. + stages: [commit] + entry: ament_cppcheck + language: system + files: \.(h\+\+|h|hh|hxx|hpp|cuh|c|cc|cpp|cu|c\+\+|cxx|tpp|txx)$ + + # Maybe use https://github.com/cpplint/cpplint instead + - repo: local + hooks: + - id: ament_cpplint + name: ament_cpplint + description: Static code analysis of C/C++ files. + stages: [commit] + entry: ament_cpplint + language: system + files: \.(h\+\+|h|hh|hxx|hpp|cuh|c|cc|cpp|cu|c\+\+|cxx|tpp|txx)$ + args: ["--linelength=100", "--filter=-whitespace/newline"] + + # Cmake hooks + - repo: local + hooks: + - id: ament_lint_cmake + name: ament_lint_cmake + description: Check format of CMakeLists.txt files. + stages: [commit] + entry: ament_lint_cmake + language: system + files: CMakeLists\.txt$ + + # Copyright + - repo: local + hooks: + - id: ament_copyright + name: ament_copyright + description: Check if copyright notice is available in all files. + stages: [commit] + entry: ament_copyright + language: system + + # Docs - RestructuredText hooks + - repo: https://github.com/PyCQA/doc8 + rev: 0.9.0a1 + hooks: + - id: doc8 + args: ['--max-line-length=100', '--ignore=D001'] + exclude: CHANGELOG\.rst$ + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.8.0 + hooks: + - id: rst-backticks + exclude: CHANGELOG\.rst$ + - id: rst-directive-colons + - id: rst-inline-touching-normal + + # Spellcheck in comments and docs + # skipping of *.svg files is not working... + - repo: https://github.com/codespell-project/codespell + rev: v2.0.0 + hooks: + - id: codespell + args: ['--write-changes'] + exclude: \.(svg|pyc)$ diff --git a/diff_drive_controller/CMakeLists.txt b/diff_drive_controller/CMakeLists.txt index c1e1807a86..d359d90968 100644 --- a/diff_drive_controller/CMakeLists.txt +++ b/diff_drive_controller/CMakeLists.txt @@ -61,11 +61,8 @@ install(TARGETS diff_drive_controller if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock(test_diff_drive_controller test/test_diff_drive_controller.cpp ENV config_file=${CMAKE_CURRENT_SOURCE_DIR}/test/config/test_diff_drive_controller.yaml) diff --git a/diff_drive_controller/package.xml b/diff_drive_controller/package.xml index b58b1019e5..5f34f647f4 100644 --- a/diff_drive_controller/package.xml +++ b/diff_drive_controller/package.xml @@ -23,8 +23,6 @@ pluginlib ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager diff --git a/effort_controllers/CMakeLists.txt b/effort_controllers/CMakeLists.txt index ac95d8567c..d290801917 100644 --- a/effort_controllers/CMakeLists.txt +++ b/effort_controllers/CMakeLists.txt @@ -48,12 +48,9 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock( test_load_joint_group_effort_controller test/test_load_joint_group_effort_controller.cpp diff --git a/effort_controllers/package.xml b/effort_controllers/package.xml index fd41a5a5d1..4147885018 100644 --- a/effort_controllers/package.xml +++ b/effort_controllers/package.xml @@ -16,8 +16,6 @@ pluginlib ament_cmake_gtest - ament_lint_auto - ament_lint_common controller_manager ros2_control_test_assets diff --git a/forward_command_controller/CMakeLists.txt b/forward_command_controller/CMakeLists.txt index 7021d4294b..4f08cfd2f8 100644 --- a/forward_command_controller/CMakeLists.txt +++ b/forward_command_controller/CMakeLists.txt @@ -57,13 +57,10 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(hardware_interface REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock( test_load_forward_command_controller test/test_load_forward_command_controller.cpp diff --git a/forward_command_controller/package.xml b/forward_command_controller/package.xml index 7b89ef5ee6..bae6ec8372 100644 --- a/forward_command_controller/package.xml +++ b/forward_command_controller/package.xml @@ -20,8 +20,6 @@ pluginlib ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager ros2_control_test_assets diff --git a/joint_state_broadcaster/CMakeLists.txt b/joint_state_broadcaster/CMakeLists.txt index 56bc8c0660..a656f4a334 100644 --- a/joint_state_broadcaster/CMakeLists.txt +++ b/joint_state_broadcaster/CMakeLists.txt @@ -54,14 +54,11 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(hardware_interface REQUIRED) find_package(rclcpp REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock( test_load_joint_state_broadcaster test/test_load_joint_state_broadcaster.cpp diff --git a/joint_state_broadcaster/package.xml b/joint_state_broadcaster/package.xml index 0ac0f9142d..efd37c41de 100644 --- a/joint_state_broadcaster/package.xml +++ b/joint_state_broadcaster/package.xml @@ -25,8 +25,6 @@ sensor_msgs ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager rclcpp ros2_control_test_assets diff --git a/joint_state_controller/CMakeLists.txt b/joint_state_controller/CMakeLists.txt index 592c9ccdfd..d41486b6ca 100644 --- a/joint_state_controller/CMakeLists.txt +++ b/joint_state_controller/CMakeLists.txt @@ -29,13 +29,11 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(hardware_interface REQUIRED) find_package(rclcpp REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() ament_add_gmock( test_load_joint_state_controller diff --git a/joint_state_controller/package.xml b/joint_state_controller/package.xml index bfbe7bac4b..2044db055a 100644 --- a/joint_state_controller/package.xml +++ b/joint_state_controller/package.xml @@ -16,8 +16,6 @@ pluginlib ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager hardware_interface rclcpp diff --git a/joint_trajectory_controller/CMakeLists.txt b/joint_trajectory_controller/CMakeLists.txt index 94375dfb6f..24eb9edc52 100644 --- a/joint_trajectory_controller/CMakeLists.txt +++ b/joint_trajectory_controller/CMakeLists.txt @@ -59,12 +59,9 @@ install(TARGETS joint_trajectory_controller if(BUILD_TESTING) find_package(ament_cmake_gtest REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gtest(test_trajectory test/test_trajectory.cpp) target_include_directories(test_trajectory PRIVATE include) target_link_libraries(test_trajectory joint_trajectory_controller) diff --git a/joint_trajectory_controller/package.xml b/joint_trajectory_controller/package.xml index 0db7ad9ba4..d2951a9919 100644 --- a/joint_trajectory_controller/package.xml +++ b/joint_trajectory_controller/package.xml @@ -29,8 +29,6 @@ trajectory_msgs ament_cmake_gtest - ament_lint_auto - ament_lint_common controller_manager ros2_control_test_assets diff --git a/position_controllers/CMakeLists.txt b/position_controllers/CMakeLists.txt index 44ea025765..98beea35e4 100644 --- a/position_controllers/CMakeLists.txt +++ b/position_controllers/CMakeLists.txt @@ -48,12 +48,9 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock( test_load_joint_group_position_controller test/test_load_joint_group_position_controller.cpp diff --git a/position_controllers/package.xml b/position_controllers/package.xml index 7dfd73937d..1696dcf214 100644 --- a/position_controllers/package.xml +++ b/position_controllers/package.xml @@ -16,8 +16,6 @@ pluginlib ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager hardware_interface ros2_control_test_assets diff --git a/.github/workspace.repos b/ros2_controllers/ros2_controllers.repos similarity index 100% rename from .github/workspace.repos rename to ros2_controllers/ros2_controllers.repos diff --git a/velocity_controllers/CMakeLists.txt b/velocity_controllers/CMakeLists.txt index e8e6c536d0..6107486f91 100644 --- a/velocity_controllers/CMakeLists.txt +++ b/velocity_controllers/CMakeLists.txt @@ -47,12 +47,9 @@ install( if(BUILD_TESTING) find_package(ament_cmake_gmock REQUIRED) - find_package(ament_lint_auto REQUIRED) find_package(controller_manager REQUIRED) find_package(ros2_control_test_assets REQUIRED) - ament_lint_auto_find_test_dependencies() - ament_add_gmock( test_load_joint_group_velocity_controller test/test_load_joint_group_velocity_controller.cpp diff --git a/velocity_controllers/package.xml b/velocity_controllers/package.xml index 21c1512046..2b74ccc42f 100644 --- a/velocity_controllers/package.xml +++ b/velocity_controllers/package.xml @@ -16,8 +16,6 @@ pluginlib ament_cmake_gmock - ament_lint_auto - ament_lint_common controller_manager hardware_interface ros2_control_test_assets