CHANGELOG

Changelog for package launch

3.8.6 (2025-11-07)

  • [backport kilted] Make the directory-finding substitutions into a PathSubstitution for / operator (backport #914) (#919)

  • Contributors: mergify[bot]

3.8.5 (2025-10-17)

  • Fix all/any in xml and yaml launch files (backport #906) (#911)

  • Contributors: mergify[bot]

3.8.4 (2025-10-06)

  • Allow providing launch args to include using let in frontends (#848) (#909)

  • Contributors: mergify[bot]

3.8.3 (2025-09-11)

  • Using TimerAction with SetParameter from launch_ros causes crash (backport #879) (#902)

  • Remove LaunchDescriptionArgument (#891) (#895)

  • Contributors: mergify[bot]

3.8.2 (2025-06-23)

  • Add a / path join operator for PathJoinSubstitution (#868) (#875)

  • Contributors: mergify[bot]

3.8.1 (2025-04-18)

  • Provide copy of launch configs to TimerAction’s entities (#836)

  • Allow concatenating each path component of PathJoinSubstitution (#838)

  • Add StringJoinSubstitution substitution (#843)

  • Add missing test_depend for launch (#850)

  • Document substitutions concatenation in architecture doc (#845)

  • Update docs to use proper RST literals (#837)

  • Fix function params indentation (#833)

  • Contributors: Christian Ruf, Christophe Bedard, Michael Carlstrom

3.8.0 (2025-02-27)

  • Add ForEach action to repeat entities using iteration-specific values (#802)

  • Create py.typed (#828)

  • Improve error reporting by adding file locations to exceptions (#823)

  • add test coverage for substitution edgecases involving E notation (#824)

  • Cleanup the launch dependencies. (#819)

  • Contributors: Chris Lalancette, Christophe Bedard, Michael Carlstrom, Roland Arsenault, danielcranston

3.7.1 (2024-12-20)

  • Fix ‘set up’ typo (#813)

  • Contributors: Christophe Bedard

3.7.0 (2024-11-20)

  • Add test_xmllint to all of the ament_python packages. (#804)

  • Contributors: Chris Lalancette

3.6.1 (2024-07-29)

3.6.0 (2024-06-25)

3.5.1 (2024-06-17)

  • Fix typo in comment (#783)

  • Contributors: Christophe Bedard

3.5.0 (2024-04-26)

3.4.2 (2024-04-16)

  • (launch) fix describe of PathJoinSubstitution (#771)

  • Contributors: Matthijs van der Burgh

3.4.1 (2024-03-28)

  • Small fixes for modern flake8. (#772)

  • Cleanup some type annotations.

  • Contributors: Chris Lalancette

3.4.0 (2024-02-07)

  • Rework task exceptions loop. (#755)

  • add format overriding by environment variables (#722)

  • Add exception type to error output (#753)

  • Contributors: Chris Lalancette, David Yackzan, Marc Bestmann

3.3.0 (2024-01-24)

  • Let XML executables/nodes be “required” (like in ROS 1) (#751)

  • Contributors: Matthew Elwin

3.2.1 (2023-12-26)

3.2.0 (2023-10-04)

  • Add conditional substitution (#734)

  • Contributors: Nick Lamprianidis

3.1.0 (2023-09-08)

  • Add maximum times for a process to respawn (#696)

  • Contributors: Santti4go

3.0.1 (2023-09-07)

  • Add in a timeout for launch pytests. (#725)

  • Contributors: Chris Lalancette

3.0.0 (2023-08-21)

  • Fix remaining occurrences of “There is no current event loop” (#723)

  • Update the launch code for newer flake8 and mypy. (#719)

  • Remove the deprecated some_actions_type.py (#718)

  • Contributors: Chris Lalancette

2.2.1 (2023-07-11)

  • Improve launch file parsing error messages (#626)

  • Contributors: Timon Engelke

2.2.0 (2023-06-07)

  • Add file-content launch substitution (#708)

  • Contributors: Scott K Logan

2.1.0 (2023-04-27)

2.0.1 (2023-04-12)

  • Document LaunchService.{run,run_async}() return value (#702)

  • Contributors: Christophe Bedard

2.0.0 (2023-04-11)

  • [rosdoc2] Fix document generation on buildfarm (#701)

  • Enable document generation using rosdoc2 for ament_python pkgs (#697)

  • Remove the import of Literal from entity.py. (#694)

  • Fix flake8 errors. (#695)

  • add symlink to latest log directory (#686)

  • Improve type checking (#679)

  • Contributors: Chris Lalancette, Hervé Audren, Welte, Yadu

1.4.1 (2023-02-24)

  • Fixed typos (#692)

  • Contributors: Alejandro Hernández Cordero

1.4.0 (2023-02-14)

  • Pass modules to PythonExpression (#655)

  • Allow ReadyToTest() usage in event handler (#665)

  • Expose emulate_tty to xml and yaml launch (#669)

  • Expose sigterm_timeout and sigkill_timeout to xml frontend (#667)

  • [rolling] Update maintainers - 2022-11-07 (#671)

  • Contributors: Aditya Pande, Audrow Nash, Blake Anderson, Nikolai Morin

1.3.0 (2022-11-02)

  • Expect deprecation warnings in tests (#657)

  • Fix the restoring of os.environ to maintain type. (#656)

  • Implement Any, All, Equals, and NotEquals substitutions (#649)

  • add LaunchLogDir substitution, replacing log_dir frontend only substitution (#652)

  • Add special cases to coerce “1” and “0” to bool when using bool coercion only (#651)

  • Contributors: Chris Lalancette, Jacob Perron, William Woodall, methylDragon

1.2.0 (2022-09-13)

  • Update launch/test/launch/test_execute_local.py

  • Added unit test ensuring that output dictionary works with ExecuteLocal

  • Addresses issue #588, allowing dict for ‘output’

  • Contributors: Matthew Elwin, Michael Jeronimo

1.1.0 (2022-04-29)

  • Remove unused variables. (#612)

  • Expose shutdown action to xml frontend (#611)

  • Contributors: Aditya Pande, Chris Lalancette

1.0.1 (2022-04-13)

  • Sandbox environment in tests to fix repeated job failures (#609)

  • Contributors: Shane Loretz

1.0.0 (2022-04-12)

0.23.1 (2022-04-08)

  • Start Python faster in test_execute_processs_shutdown to avoid flakey failures (#608)

  • Fix warnings from importlib_metdata on Python 3.10. (#606)

  • Contributors: Chris Lalancette, Shane Loretz

0.23.0 (2022-03-30)

  • Add boolean substitutions (#598)

  • Contributors: Kenji Miyake

0.22.0 (2022-03-28)

  • Support scoping environment variables (#601)

  • Fix awaiting shutdown in launch context (#603)

  • Fix parse respawn var (#569)

  • Make the logged command pretty in ExecuteLocal (#594)

  • Contributors: Jacob Perron, Kosuke Takeuchi

0.21.1 (2022-03-01)

  • ‘output’ is expanded as a substitution in XML/YAML files (#577)

  • Skip warning test if warning already happend (#585)

  • Contributors: Khush Jain, Shane Loretz

0.21.0 (2022-01-14)

  • Use asyncio.wait with timeout rather than sleep (#576)

  • Make test_parser compatible with Python older than 3.8 (#575)

  • Propagate exceptions of completed actions to launch service main loop (#566)

  • Warn when loading launch extensions fails (#572)

  • Add in two fixes for Jammy (#571)

  • Contributors: Chris Lalancette, Scott K Logan, Shane Loretz, tumtom

0.20.0 (2021-11-29)

  • Evaluate math symbols and functions in python expression (#557)

  • Document TimerAction params (#558)

  • Improve launch arguments introspection (#556)

  • Update maintainers to Aditya Pande and Michel Hidalgo (#559)

  • Updated maintainers (#555)

  • First prototype of native pytest plugin for launch based tests (#528)

  • Allow for raw path specification in IncludeLaunchDescription (#544)

  • Adding Executable description class (#454)

  • event handlers: Allow to match the target action with a callable and not only with an object instance (#540)

  • Add AppendEnvironmentVariable action (#543)

  • Document EnvironmentVariable substitution resolution context caveat (#541)

  • Feature clear launch configs (#515)

  • Add examples to ExecuteProcess docs (#525)

  • Fix DeclareLaunchArgument xml parsing and constructor (#529)

  • Fix pytest run on Windows (#526)

  • Improving docs (#523)

  • Add filtering mechanism for executable prefix application (#522)

  • Contributors: Aditya Pande, Audrow Nash, Cameron Miller, Christophe Bedard, David V. Lu!!, Derek Chopp, Immanuel Martini, Ivan Santiago Paunovic, roger-strain

0.19.0 (2021-07-15)

  • Make each parser extension provide a set of file extensions (#516)

  • Contributors: Christophe Bedard

0.18.0 (2021-06-18)

  • Add missing exec dependency on PyYAML (#493)

  • Refactor TimerAction to allow RosTimer to extend (#512)

  • Improve (Not)Equals condition type hinting (#510)

  • Contributors: HMellor, Rebecca Butler, Scott K Logan

0.17.0 (2021-04-06)

  • Only try to wrap the fd in a socket on Windows (#498)

  • Close the socket pair used for signal management (#497)

  • Remove is_winsock_handle() and instead test if wrapping the handle in a socket.socket() works (#494)

  • Add frontend substitution for logging directory (#490)

  • Contributors: Ivan Santiago Paunovic, Jacob Perron

0.16.0 (2021-03-19)

  • Add arg_choice arg to DeclareLaunchArguments (#483)

  • Contributors: Victor Lopez

0.15.0 (2021-01-25)

  • Support Python 3.8-provided importlib.metadata (#482)

  • Workaround asyncio signal handling on Unix (#479)

  • Handle signals within the asyncio loop. (#476)

  • Support non-interactive launch.LaunchService runs (#475)

  • Contributors: Michel Hidalgo, Scott K Logan

0.14.0 (2020-12-08)

  • print stderr message when command failed (#474)

  • Add frontend support for LogInfo action (#467)

  • Contributors: Jacob Perron, Takamasa Horibe

0.13.0 (2020-11-04)

  • Validate unparsed attributes and subentities in launch_xml and launch_yaml (#468)

  • Fix bug in launch.actions.TimerAction.parse() (#470)

  • Allow configuring logging directory through environment variables (#460)

  • Update package maintainers (#465)

  • Expose Timer action in launch xml (#462)

  • Fix dollar symbols in substitution grammar (#461)

  • Contributors: Christophe Bedard, Ivan Santiago Paunovic, Michel Hidalgo

0.12.0 (2020-08-18)

  • Add new conditions for checking launch configuration values (#453)

  • Contributors: Jacob Perron

0.11.1 (2020-08-14)

  • Refactor launch service run_async loop to wait on futures and queued events (#449)

  • Fix documentation typo (#446)

  • Fix type_utils.extract_type() function. (#445)

  • Contributors: Jacob Perron, Michel Hidalgo

0.11.0 (2020-08-04)

  • Handle empty strings in type coercion. (#443)

  • Consolidate type_utils in a way that can be reused in substitution results that need to be coerced to a specific type (#438)

  • Delete unnecessary loading of ‘launch.frontend.interpolate_substitution_method’ entry point that was never used (#434)

  • Avoid side effect, defer until needed (#432)

  • Remove pkg_resources, replace it with the use of the more modern importlib* libraries. (#430)

  • Remove the asyncio.wait loop parameter. (#429)

  • Add pytest.ini so local tests don’t display warning (#428)

  • Defer shutdown if already running (#427)

  • Add respawn and respawn_delay support (#426)

  • Fix up parser.py (#414)

  • Contributors: CHEN, Chris Lalancette, Dan Rose, Dirk Thomas, Ivan Santiago Paunovic, Jorge Perez, Michel Hidalgo

0.10.2 (2020-05-26)

  • Fix new flake8 errors. (#420)

  • Contributors: Michel Hidalgo

0.10.1 (2020-05-08)

  • removed deprecated loop parameter call (#387) (#410)

  • Contributors: Zahi Kakish

0.10.0 (2020-04-24)

  • remove Python 3.5 specific logic (#401)

  • use typing.TYPE_CHECKING to avoid flake8 failure (#398)

  • Suppress flake8 A003 warning (#395)

  • more verbose test_flake8 error messages (same as ros2/launch_ros#135)

  • Remove unnecessary overloads (#389)

  • Simplify type annotation (#388)

  • Add support for anon substitution (#384)

  • Make RegisterEventHandler describe its sub-entities (#386)

  • Fix parsing of cmd line arguments in XML and yaml file (#379)

  • Only allow ExecuteProcess actions to execute once (#375)

  • Fix grammar in docstring (#373)

  • Release loop lock before waiting for it to do work (#369)

  • Adds Command substitution (#367)

  • Handle case where output buffer is closed during shutdown (#365)

  • Use imperative mood in docstrings. (#362)

  • Contributors: Dirk Thomas, Ivan Santiago Paunovic, Jacob Perron, Jorge Perez, Peter Baughman, Shane Loretz, Steven! Ragnarök, William Woodall

0.9.5 (2019-11-13)

  • fix PendingDeprecationWarning about asyncio.Task.current_task (#355)

  • import collections.abc (#354)

  • Contributors: Dirk Thomas

0.9.4 (2019-11-08)

  • Fix ExecuteProcess.get_sub_entities() implementation. (#353)

  • Contributors: Michel Hidalgo

0.9.3 (2019-10-23)

0.9.2 (2019-10-23)

0.9.1 (2019-09-25)

  • Fix error in ExecuteProcess parse classmethod (#339)

  • Add support to ignore fields when parsing ExecuteProcess. (#336)

  • Make parse_substitution handle zero-width text. (#335)

  • Fix InvalidLaunchFileError error message. (#333)

  • Fix default Action describe_conditional_sub_entities() implementation. (#334)

  • Contributors: Michel Hidalgo, ivanpauno

0.9.0 (2019-09-18)

  • Fix “‘GroupAction’ object has no attribute ‘actions’” error (#327)

  • install package marker and manifest (#323)

  • Make IncludeLaunchDescription force launch_arguments (#284)

  • fix expectation for test on Windows (#319)

  • Improve error message when a failing to include launch file (#315)

  • Fix launch argument listing/checking issues (#310)

  • Support LaunchService injection into pre-shutdown tests. (#308)

  • Fix test_expose_decorators failures (#307)

  • Add assertWaitForStartup method to match assertWaitForShutdown (#278)

  • Add support for conditions in IncludeLaunchDescription actions (#304)

  • Convert list comprehension to generator (#300)

  • Don’t create a log directory every time the launch logger is imported. (#299)

  • Avoid registering atexit on windows (#297)

  • Correct launch service sigterm handling (#294)

  • fix encoding handling when writing to stdout and log files (#280)

  • More idiomatic typecheck-only imports (#285)

  • Add deprecated argument to LaunchDescriptionn (#291)

  • Add support for not optional environment variable substitution (#288)

  • Add parsing method to PythonExpression substitution (#281)

  • Revert “Revert “[execute_process] emulate_tty configurable and defaults to true”” (#277)

  • Refactor launch.frontend file loading (#271)

  • Revert “[execute_process] emulate_tty configurable and defaults to true (#265)” (#276)

  • fix linter warnings (#274)

  • [execute_process] emulate_tty configurable and defaults to true (#265)

  • Add parsing method for dirname substitution (#273)

  • Add parsing methods for SetEnviromentVariable and UnsetEnviromentVariable (#272)

  • Add parsing method for DeclareLaunchArgument (#270)

  • Add frontend module in launch, launch_xml and launch_yaml packages (#226)

  • Add PathJoinSubstitution (#266)

  • Fix EventHandler type hints (#264)

  • Fix build_cop #214 (#259)

  • Fix get_launch_arguments to not crash on conditional sub entities (#257)

  • Use stderr logger instead of buffer (#258)

  • Line buffering of logger output (#255)

  • Contributors: Chris Lalancette, Dan Rose, Daniel Stonier, Dirk Thomas, Jacob Perron, Michel Hidalgo, Peter Baughman, Scott K Logan, William Woodall, ivanpauno

0.8.3 (2019-05-29)

  • Changed IncludeLaunchDescription to not check declared arguments of subentities in order to work around an issue preventing nested arugments until a better fix can be done. (#249)

  • Fixed a bug where logging messages could be duplicated and improved logging’s apperance on the CLI. (#250)

  • Contributors: Michel Hidalgo, ivanpauno

0.8.2 (2019-05-20)

  • Moved some common code to LaunchDescriptionSource (#234)

  • Please flake8 on launch package. (#241)

  • Allow substitution in variable_name of LaunchConfiguration substitutions (#235)

  • Add support for custom launch log file handling (#233)

  • Contributors: Michel Hidalgo, ivanpauno

0.8.1 (2019-05-08)

0.8.0 (2019-04-13)

  • Added SetEnvironmentVariable and UnsetEnvironmentVariable actions #164 (#216)

  • Used one sentence per line in docs. (#219)

  • Added support for external ExecuteProcess output overrides. (#218)

  • Logged the launch logging config before running. (#217)

  • Fixed treating stderr output separate from stdout. (#212)

  • Replaced characters with marker when there is a decoding error. (#202)

  • Added LaunchLogger class. (#145)

  • Added test actions. (#178)

  • Fixed to close subprocess transport on execute action cleanup. (#198)

  • Updated logger.warn (deprecated) to logger.warning. (#199)

  • Dropped legacy launch package. (#191)

  • Migrated legacy launch API tests. (#167)

  • Updated to cancel Timers on shutdown. (#181)

  • Fixed timer global init of event handler. (#184)

  • Added support for required nodes (#179)

  • Updated to ensure event handlers add event to context locals. (#177)

  • Added OnProcessStart event handler. (#171)

  • Corrected OnProcessExit typing for Callable. (#170)

  • Removed whitespace in keyword arg. (#169)

  • Contributors: Dirk Thomas, Jacob Perron, Kyle Fazzari, Michel Hidalgo, Peter Baughman, Shane Loretz, William Woodall, ivanpauno, oswinso

0.7.3 (2018-12-13)

  • Fixed deprecation warning related to collections.abc (#158)

  • Contributors: William Woodall

0.7.2 (2018-12-06)

  • Changed the signit handler os it executes the shutdown event synchronously (#156)

  • Contributors: Jonathan Chapple, Steven! Ragnarök, William Woodall

0.7.1 (2018-11-16)

  • Fixed setup.py versions (#155)

  • Contributors: Steven! Ragnarök

0.7.0 (2018-11-16)

  • Fixed a bug to ensure that shutdown event is handled correctly (#154) * There was a potential race condition in between when the shutdown event is emitted and the rest of the shutdown handling code. * This introduces an additional await to ensure that the event is emitted before proceeding.

  • Fixed example to always use shell to avoid inconsistency of time being a shell command or executable (#150)

  • Added tests for class_tools module and fix is_a_subclass() (#142)

  • Added tests for the utilities module (#143)

  • Added ‘handle_once’ property for unregistering an EventHandler after one event (#141)

  • Added UnregisterEventHandler action (#110)

  • Changed LaunchService so that it returns 1 on caught exceptions from within launch (#136)

  • Added ability to define and pass launch arguments to launch files (#123) * Added self descriptions for substitutions * Added tracebacks back to the output by default * Added new actions for declaring launch arguments * Added new method on LaunchDescription which gets all declared arguments within * Added ability to pass arguments when including a launch description * Added description for local variables used in Node action * Added ability to show and pass launch arguments on the command line * Added an accessor for the Condition of an Action * Signed-off-by: William Woodall <william@osrfoundation.org>

  • Added UnsetLaunchConfiguration action and tests (#134) * Signed-off-by: William Woodall <william@osrfoundation.org>

  • Added GroupAction for conditionally including other actions and scoping (#133) * Signed-off-by: William Woodall <william@osrfoundation.org>

  • Added optional name argument to ExecuteProcess (#129) * Signed-off-by: William Woodall <william@osrfoundation.org>

  • Added a new pair of actions for pushing and popping launch configurations (#128) * Signed-off-by: William Woodall <william@osrfoundation.org>

  • Contributors: Dirk Thomas, Jacob Perron, Michael Carroll, William Woodall, dhood

0.6.0 (2018-08-20)

0.5.2 (2018-07-17)

  • Made a change to avoid reentrancy of signal handlers (#99)

  • Ignored warning for builtins A003 (#100)

  • Fixed exception when launch process with environment variables (#96)

  • Contributors: Shane Loretz, William Woodall, dhood

0.5.1 (2018-06-27)

  • Changed the behavior when signaling SIGINT to subprocesses on Windows, where it now does SIGTERM instead, because SIGINT causes a ValueError about SIGINT being an unsupported signal number. (#94)

  • Fixed a bug by avoiding reentrancy in the SIGINT signal handler. (#92)

  • Various Windows fixes. (#87) * LaunchService.run() now returns non-0 when there are exceptions in coroutines. * Updated launch_counters.py example for Windows. * Fixed a bug that would cause mismatched asyncio loops in some futures. * Addressed the fact that signal.SIGKILL doesn’t exist on Windows, so emulate it in our Event. * Fixed an issue that resulted in spurious asyncio errors in LaunchService test.

  • Contributors: William Woodall, dhood

0.5.0 (2018-06-19)

  • Fixed a bug where unclosed asyncio loops caused a traceback on the terminal on exit, but only in Python 3.5 (#85)

  • Changed to use variable typing in comments to support python 3.5 (#81)

  • New launch API (#74) * See pull request for more details and links to architecture documentation and the design doc.

  • Moved launch source files into launch.legacy namespace (#73) * This was in preparation for the new launch API.

  • [for launch.legacy] fixed a flake8 warning (#72)

  • [for launch.legacy] set zip_safe to avoid warning during installation (#71)

  • [for launch.legacy] Fix hang on keyboard interrupt (#69) * When keyboard interrupt exception occurs loop.run_forever is called. But there is no loop.stop call. This causes a hang.

  • Contributors: Devin, Dirk Thomas, William Woodall, dhood