codemagic-ci-cd / cli-tools

Various utilities to managing Android and iOS app builds, code signing, and deployment.
https://codemagic.io/start/
GNU General Public License v3.0
243 stars 42 forks source link

Fix handling empty CLI options for tool `google-play` #363

Closed priitlatt closed 10 months ago

priitlatt commented 10 months ago

When calling google-play actions with empty track or package name, then the invocation can fail because there is no validation that ensures values for those options. For example

$ google-play  get-latest-build-number --package-name "${UNDEFINED_PACKAGE_NAME}" --tracks "${UNDEFINED_TRACK_NAME}"
Get package "None" latest build number from track ""
Executing GooglePlay action get-latest-build-number failed unexpectedly. Detailed logs are available at "/var/folders/wr/c44p23x10f302_kfbj32z0p80000gn/T/codemagic-24-10-23.log". To see more details about the error, add `--verbose` command line option.

fails with

Traceback (most recent call last):
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/cli/cli_app.py", line 206, in invoke_cli
    CliApp._running_app._invoke_action(args)
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/cli/cli_app.py", line 163, in _invoke_action
    return cli_action(**action_args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/cli/cli_app.py", line 458, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/tools/google_play/actions/get_latest_build_number_action.py", line 33, in get_latest_build_number
    package_tracks = self.list_tracks(package_name, should_print=False)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/cli/cli_app.py", line 458, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/tools/google_play/action_groups/tracks_action_group.py", line 68, in list_tracks
    tracks = self.api_client.list_tracks(package_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/google_play/api_client.py", line 152, in list_tracks
    with self.use_app_edit(package_name) as _edit:
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/contextlib.py", line 137, in __enter__
    return next(self.gen)
           ^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/google_play/api_client.py", line 111, in use_app_edit
    edit = self.create_edit(package_name)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/codemagic/google_play/api_client.py", line 85, in create_edit
    edit_request = self.edits_service.insert(body={}, packageName=package_name)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/priit/.pyenv/versions/3.12.0/lib/python3.12/site-packages/googleapiclient/discovery.py", line 1063, in method
    raise TypeError('Missing required parameter "%s"' % name)
TypeError: Missing required parameter "packageName"

This PR adds a restriction to relevant CLI argument which cannot be used with empty values. Updated usage is

google-play get-latest-build-number get-latest-build-number --package-name "${UNDEFINED_PACKAGE_NAME}" --tracks "${UNDEFINED_TRACK_NAME}"
usage: google-play get-latest-build-number [-h] [--log-stream {stderr,stdout}] [--no-color] [--version] [-s] [-v] --package-name PACKAGE_NAME [--tracks TRACKS [TRACKS ...]]
                                           [--credentials CREDENTIALS]
google-play get-latest-build-number: error: argument --package-name/-p: Empty value is not allowed

Updated actions: