From 85490dcf8c96528e5910058ddcc2aa670a47b5e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Fri, 14 Jul 2023 17:37:45 +0300 Subject: [PATCH] feat: add autoware_version_manager package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- autoware_version_manager/CMakeLists.txt | 23 ++++++++ autoware_version_manager/README.md | 1 + .../data/version-autoware.yaml | 5 ++ .../data/version-component-interface.yaml | 5 ++ .../autoware_version_manager.launch.xml | 11 ++++ autoware_version_manager/package.xml | 29 +++++++++ .../src/autoware_version_manager_core.cpp | 54 +++++++++++++++++ .../include/autoware_version_manager_core.hpp | 38 ++++++++++++ .../src/include/parse_version.hpp | 38 ++++++++++++ .../src/include/version_types.hpp | 40 +++++++++++++ .../src/parse_version.cpp | 59 +++++++++++++++++++ 11 files changed, 303 insertions(+) create mode 100644 autoware_version_manager/CMakeLists.txt create mode 100644 autoware_version_manager/README.md create mode 100644 autoware_version_manager/data/version-autoware.yaml create mode 100644 autoware_version_manager/data/version-component-interface.yaml create mode 100644 autoware_version_manager/launch/autoware_version_manager.launch.xml create mode 100644 autoware_version_manager/package.xml create mode 100644 autoware_version_manager/src/autoware_version_manager_core.cpp create mode 100644 autoware_version_manager/src/include/autoware_version_manager_core.hpp create mode 100644 autoware_version_manager/src/include/parse_version.hpp create mode 100644 autoware_version_manager/src/include/version_types.hpp create mode 100644 autoware_version_manager/src/parse_version.cpp diff --git a/autoware_version_manager/CMakeLists.txt b/autoware_version_manager/CMakeLists.txt new file mode 100644 index 0000000000..dc0298eba9 --- /dev/null +++ b/autoware_version_manager/CMakeLists.txt @@ -0,0 +1,23 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_version_manager) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +set(NODE_NAME ${PROJECT_NAME}_node) +set(EXEC_NAME ${PROJECT_NAME}_exe) + +ament_auto_add_library(${NODE_NAME} + src/include/autoware_version_manager_core.hpp + src/include/parse_version.hpp + src/include/version_types.hpp + src/autoware_version_manager_core.cpp + src/parse_version.cpp) + +rclcpp_components_register_node(${NODE_NAME} + PLUGIN "autoware_version_manager::AutowareVersionManagerNode" + EXECUTABLE ${EXEC_NAME}) + +ament_auto_package(INSTALL_TO_SHARE + launch + data) diff --git a/autoware_version_manager/README.md b/autoware_version_manager/README.md new file mode 100644 index 0000000000..6e9f6b17ef --- /dev/null +++ b/autoware_version_manager/README.md @@ -0,0 +1 @@ +# autoware_version_manager diff --git a/autoware_version_manager/data/version-autoware.yaml b/autoware_version_manager/data/version-autoware.yaml new file mode 100644 index 0000000000..cd0737ea8f --- /dev/null +++ b/autoware_version_manager/data/version-autoware.yaml @@ -0,0 +1,5 @@ +# Autoware version (CalVer with YYYY.MINOR.MICRO) + +year: 2023 +minor: 7 +micro: 0 diff --git a/autoware_version_manager/data/version-component-interface.yaml b/autoware_version_manager/data/version-component-interface.yaml new file mode 100644 index 0000000000..0bf127bf24 --- /dev/null +++ b/autoware_version_manager/data/version-component-interface.yaml @@ -0,0 +1,5 @@ +# Autoware component interface version (SemVer) + +major: 1 +minor: 0 +patch: 0 diff --git a/autoware_version_manager/launch/autoware_version_manager.launch.xml b/autoware_version_manager/launch/autoware_version_manager.launch.xml new file mode 100644 index 0000000000..2093309ee3 --- /dev/null +++ b/autoware_version_manager/launch/autoware_version_manager.launch.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/autoware_version_manager/package.xml b/autoware_version_manager/package.xml new file mode 100644 index 0000000000..c79124a944 --- /dev/null +++ b/autoware_version_manager/package.xml @@ -0,0 +1,29 @@ + + + autoware_version_manager + 0.0.0 + The autoware_version_manager package + + M. Fatih Cırıt + Takagi, Isamu + + Apache License 2.0 + + M. Fatih Cırıt + + ament_cmake_auto + autoware_cmake + + autoware_system_msgs + rclcpp + rclcpp_components + yaml_cpp_vendor + + ament_cmake_ros + ament_lint_auto + autoware_lint_common + + + ament_cmake + + diff --git a/autoware_version_manager/src/autoware_version_manager_core.cpp b/autoware_version_manager/src/autoware_version_manager_core.cpp new file mode 100644 index 0000000000..772cdc7e5c --- /dev/null +++ b/autoware_version_manager/src/autoware_version_manager_core.cpp @@ -0,0 +1,54 @@ +// Copyright 2023 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "include/autoware_version_manager_core.hpp" + +#include "include/parse_version.hpp" +#include "include/version_types.hpp" + +#include + +namespace autoware_version_manager +{ + +AutowareVersionManagerNode::AutowareVersionManagerNode(const rclcpp::NodeOptions & node_options) +: rclcpp::Node("autoware_version_manager_node", node_options) +{ + const std::filesystem::path path_version_autoware = + declare_parameter("path_version_autoware"); + const std::filesystem::path path_version_component_interface = + declare_parameter("path_version_component_interface"); + + try { + version_autoware_ = parse_version::parse_autoware_version(path_version_autoware); + version_component_interface_ = + parse_version::parse_interface_version(path_version_component_interface); + } catch (const std::exception & e) { + RCLCPP_ERROR(get_logger(), "Failed to parse version: %s", e.what()); + exit(EXIT_FAILURE); + } + + // print + RCLCPP_INFO( + get_logger(), "Autoware version: %d.%d.%d", version_autoware_.year, version_autoware_.minor, + version_autoware_.micro); + RCLCPP_INFO( + get_logger(), "Component interface version: %d.%d.%d", version_component_interface_.major, + version_component_interface_.minor, version_component_interface_.patch); +} + +} // namespace autoware_version_manager + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(autoware_version_manager::AutowareVersionManagerNode) diff --git a/autoware_version_manager/src/include/autoware_version_manager_core.hpp b/autoware_version_manager/src/include/autoware_version_manager_core.hpp new file mode 100644 index 0000000000..2d8410d3be --- /dev/null +++ b/autoware_version_manager/src/include/autoware_version_manager_core.hpp @@ -0,0 +1,38 @@ +// Copyright 2023 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE_VERSION_MANAGER_CORE_HPP_ +#define AUTOWARE_VERSION_MANAGER_CORE_HPP_ + +#include "version_types.hpp" + +#include + +#include + +namespace autoware_version_manager +{ +class AutowareVersionManagerNode : public rclcpp::Node +{ +public: + explicit AutowareVersionManagerNode(const rclcpp::NodeOptions & node_options); + +private: + VersionAutoware version_autoware_; + VersionInterface version_component_interface_; +}; + +} // namespace autoware_version_manager + +#endif // AUTOWARE_VERSION_MANAGER_CORE_HPP_ diff --git a/autoware_version_manager/src/include/parse_version.hpp b/autoware_version_manager/src/include/parse_version.hpp new file mode 100644 index 0000000000..9499f25c64 --- /dev/null +++ b/autoware_version_manager/src/include/parse_version.hpp @@ -0,0 +1,38 @@ +// Copyright 2023 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PARSE_VERSION_HPP_ +#define PARSE_VERSION_HPP_ + +#include "version_types.hpp" + +#include + +#include + +namespace autoware_version_manager +{ +namespace parse_version +{ + +VersionAutoware parse_autoware_version(const YAML::Node & yaml_node); +VersionAutoware parse_autoware_version(const std::filesystem::path & path); + +VersionInterface parse_interface_version(const YAML::Node & yaml_node); +VersionInterface parse_interface_version(const std::filesystem::path & path); + +} // namespace parse_version +} // namespace autoware_version_manager + +#endif // PARSE_VERSION_HPP_ diff --git a/autoware_version_manager/src/include/version_types.hpp b/autoware_version_manager/src/include/version_types.hpp new file mode 100644 index 0000000000..5208fb4c7e --- /dev/null +++ b/autoware_version_manager/src/include/version_types.hpp @@ -0,0 +1,40 @@ +// Copyright 2023 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef VERSION_TYPES_HPP_ +#define VERSION_TYPES_HPP_ + +namespace autoware_version_manager +{ +// Autoware version (CalVer with YYYY.MINOR.MICRO) +// https://calver.org/#scheme +struct VersionAutoware +{ + int year; // year of release + int minor; // increments for non-breaking changes + int micro; // increments for bug fixes or patches +}; + +// Autoware component interface version (SemVer) +// https://semver.org/ +struct VersionInterface +{ + int major; // increments for breaking changes + int minor; // increments for non-breaking changes + int patch; // increments for bug fixes or patches +}; + +} // namespace autoware_version_manager + +#endif // VERSION_TYPES_HPP_ diff --git a/autoware_version_manager/src/parse_version.cpp b/autoware_version_manager/src/parse_version.cpp new file mode 100644 index 0000000000..192ebf1bc5 --- /dev/null +++ b/autoware_version_manager/src/parse_version.cpp @@ -0,0 +1,59 @@ +// Copyright 2023 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "include/parse_version.hpp" + +#include "include/version_types.hpp" + +#include + +#include + +namespace autoware_version_manager +{ +namespace parse_version +{ + +VersionAutoware parse_autoware_version(const YAML::Node & yaml_node) +{ + VersionAutoware version; + version.year = yaml_node["year"].as(); + version.minor = yaml_node["minor"].as(); + version.micro = yaml_node["micro"].as(); + return version; +} + +VersionAutoware parse_autoware_version(const std::filesystem::path & path) +{ + YAML::Node yaml_node = YAML::LoadFile(path.string()); + return parse_autoware_version(yaml_node); +} + +VersionInterface parse_interface_version(const YAML::Node & yaml_node) +{ + VersionInterface version; + version.major = yaml_node["major"].as(); + version.minor = yaml_node["minor"].as(); + version.patch = yaml_node["patch"].as(); + return version; +} + +VersionInterface parse_interface_version(const std::filesystem::path & path) +{ + YAML::Node yaml_node = YAML::LoadFile(path.string()); + return parse_interface_version(yaml_node); +} + +} // namespace parse_version +} // namespace autoware_version_manager