From c26e4b0f1edd076fa6fe401c09751cb590733567 Mon Sep 17 00:00:00 2001 From: mudassirt72 Date: Fri, 23 Jan 2026 15:40:31 +0530 Subject: [PATCH 1/2] fix(cli): validate agent folder names for agent_engine Add early validation for agent folder names and temp_folder to ensure they are valid Python identifiers before deployment. This surfaces clear, actionable errors instead of cryptic syntax failures when folder names include characters like dashes. Fixes #2902 --- src/google/adk/cli/cli_deploy.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index 2787c8d9d4..fed26720e0 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -764,6 +764,17 @@ def to_agent_engine( app_name = os.path.basename(agent_folder) display_name = display_name or app_name parent_folder = os.path.dirname(agent_folder) + + # Validate folder name is a valid Python identifier for module imports + if not app_name.isidentifier(): + click.secho( + f'Error: Agent folder name "{app_name}" must be a valid identifier ' + 'consisting of letters, digits, and underscores.', + fg='red', + err=True, + ) + return + adk_app_object = adk_app_object or 'root_agent' if adk_app_object not in ['root_agent', 'app']: click.echo( @@ -789,7 +800,20 @@ def to_agent_engine( os.chdir(parent_folder) did_change_cwd = True tmp_app_name = app_name + '_tmp' + datetime.now().strftime('%Y%m%d_%H%M%S') - temp_folder = temp_folder or tmp_app_name + + # Validate temp_folder if provided by user + if temp_folder: + if not temp_folder.isidentifier(): + click.secho( + f'Error: The folder name "{temp_folder}" must be a valid identifier ' + 'consisting of letters, digits, and underscores.', + fg='red', + err=True, + ) + return + else: + temp_folder = tmp_app_name + agent_src_path = os.path.join(parent_folder, temp_folder) click.echo(f'Staging all files in: {agent_src_path}') # remove agent_src_path if it exists From b06c34141eb702ae5cc549f19e17677c22c7cec9 Mon Sep 17 00:00:00 2001 From: mudassirt72 Date: Fri, 23 Jan 2026 17:03:09 +0530 Subject: [PATCH 2/2] refactor(cli): Use ClickException for validation errors Replace click.secho + return with click.ClickException for better CLI error handling and shell scripting compatibility. --- src/google/adk/cli/cli_deploy.py | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/google/adk/cli/cli_deploy.py b/src/google/adk/cli/cli_deploy.py index fed26720e0..ebfb26144c 100644 --- a/src/google/adk/cli/cli_deploy.py +++ b/src/google/adk/cli/cli_deploy.py @@ -767,13 +767,10 @@ def to_agent_engine( # Validate folder name is a valid Python identifier for module imports if not app_name.isidentifier(): - click.secho( - f'Error: Agent folder name "{app_name}" must be a valid identifier ' - 'consisting of letters, digits, and underscores.', - fg='red', - err=True, + raise click.ClickException( + f'Agent folder name "{app_name}" must be a valid identifier ' + 'consisting of letters, digits, and underscores.' ) - return adk_app_object = adk_app_object or 'root_agent' if adk_app_object not in ['root_agent', 'app']: @@ -804,13 +801,10 @@ def to_agent_engine( # Validate temp_folder if provided by user if temp_folder: if not temp_folder.isidentifier(): - click.secho( - f'Error: The folder name "{temp_folder}" must be a valid identifier ' - 'consisting of letters, digits, and underscores.', - fg='red', - err=True, + raise click.ClickException( + f'The folder name "{temp_folder}" must be a valid identifier ' + 'consisting of letters, digits, and underscores.' ) - return else: temp_folder = tmp_app_name