I am interested in adding custom metadata to the ROS-2 package.xml and providing a way to validate that other packages correctly define that metadata. However, when I attempt to add a new XML tag (e.g., ‘my_custom_tag’) ament fails during the validation process, with the following error:
$ ament build
Traceback (most recent call last):
File "/ros2_ws/install/bin/ament", line 9, in <module>
load_entry_point('ament-tools==0.0.0', 'console_scripts', 'ament')()
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/commands/ament.py", line 86, in main
rc = args.main(args)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/verbs/build/cli.py", line 154, in main
packages = topological_order(opts.basepath)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/topological_order.py", line 102, in topological_order
packages = _find_unique_packages(root_dir)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/packages.py", line 81, in find_unique_packages
packages = find_packages(basepath, exclude_paths=exclude_paths)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/packages.py", line 66, in find_packages
packages[path] = parse_package(os.path.join(basepath, path))
File "/ros2_ws/install/lib/python3.5/site-packages/ament_tools/package_types/__init__.py", line 31, in parse_package
pkg = package_type['parse_package'](path)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_package/__init__.py", line 60, in parse_package
return parse_package_string(f.read(), filename=filename)
File "/ros2_ws/install/lib/python3.5/site-packages/ament_package/__init__.py", line 292, in parse_package_string
(filename, ''.join(['\n- %s' % e for e in errors])))
ament_package.exceptions.InvalidPackage: Invalid package manifest './src/custom_package/package.xml': Error(s) in ./src/custom_package/package.xml:
- The 'url' tag must not contain the following children: my_custom_tag
Is there a recommended way to get around the validation that the package.xml contains no unknown tags? Is this even possible? I’d prefer not to have to branch ament_package.
It may make sense for companies/organizations to add their own custom metadata to packages and ideally they would not need to modify ament_package. In some/most cases this metadata is not something that would make sense to include in ament_package (e.g., company specific).
One option is to include the custom metadata in a separate XML file, but I would prefer to have a single file for package information.
Assuming I can get ament to accept the custom metadata (or I use a separate XML file), are there are suggestions on how best to validate the metadata at build/compile time? My plan is to provide some custom cmake scripts to perform the validation, but was curious if there are better approaches.