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 `UnicodeDecodeError` when looking for failures from Xcode build logs #365

Closed priitlatt closed 10 months ago

priitlatt commented 10 months ago

Backwards file reader codemagic.utilities.backwards_file_reader.iter_backwards can fail with UnicodeDecodeError if the file contains some invalid byte sequence. One case when this can happen is during reading Xcode build logs:

File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 206, in invoke_cli
  CliApp._running_app._invoke_action(args)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 163, in _invoke_action
  return cli_action(**action_args)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/cli/cli_app.py", line 458, in wrapper
  return func(self, *args, **kwargs)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/tools/xcode_project.py", line 270, in build_ipa
  xcarchive = xcodebuild.archive(
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 249, in archive
  errors = _XcodebuildLogErrorFinder(self.logs_path).find_failure_logs()
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 440, in find_failure_logs
  failed_commands = self._get_failed_commands()
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/models/xcodebuild.py", line 390, in _get_failed_commands
  for line in self._backwards_log_iterator:
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/utilities/backwards_file_reader.py", line 49, in iter_backwards
  yield from _iter_backwards(fd, buffer_size, file_size=file_path.stat().st_size)
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/site-packages/codemagic/utilities/backwards_file_reader.py", line 19, in _iter_backwards
  buffer = file_descriptor.read(min(unprocessed_size, buffer_size))
File "/Users/builder/.pyenv/versions/3.8.13/lib/python3.8/codecs.py", line 322, in decode
  (result, consumed) = self._buffer_decode(data, self.errors, final)

UnicodeDecodeError('utf-8', ..., '1', 'invalid start byte')

Applied changes:

Updated actions: