Есть ли в настоящее время способ извлечь результат действия fastlane в рамках действий fastlane? - PullRequest
0 голосов
/ 06 февраля 2019

Я использую сторонний плагин fastlane, и он содержит действие, которое отображает жизненно важную информацию, которую мне нужно захватить, например, ссылку.

Я пытаюсь найти элегантный способ захвата этих журналов вдействия fastlane, я пытаюсь избежать использования команды оболочки, но если это единственный способ, то я полагаю, у меня нет выбора.

Мне нужна эта ссылка, так как это уникальная и случайная ссылка, которая содержит ресурсы, которые яхотел бы скачать.

Я попытался перенаправить stdout безрезультатно, так как fastlane использует свой собственный регистратор (обычно UI.message) и собирался отправить запрос функции в fastlane, но подумал, что кто-то еще столкнулся с этим и ему удалось пройтиэто.

Есть ли способ перенаправить этот тип журнала и перехватить его?

Вот исходный код fastlane для пользовательского интерфейса: https://github.com/fastlane/fastlane/tree/master/fastlane_core/lib/fastlane_core/ui

И вот один из способов, которыми я пытался перенаправить вывод: Захват вывода регистратора внутри метода

Буду признателен за любую помощь / совет / ресурсы!

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я не знаю, поможет ли это вам, но мне удалось записать стандартный вывод fastlane в переменную, чтобы получить то, что я хотел (в моем случае, получить общее имя сертификата разработки iPhone), используя этот простой метод

def with_captured_stdout
  original_stdout = $stdout
  $stdout = StringIO.new
  yield
  $stdout.string
ensure
  $stdout = original_stdout
end

lane :test do |options|
  match_dev = with_captured_stdout { match(type: 'development') }
  puts match_dev
  @dev_index = match_dev.index('iPhone Developer')
  ENV['DEV_CODE_SIGN_ID'] = match_dev[@dev_index..match_dev.index(')', @dev_index)]
  # ENV['DEV_CODE_SIGN_ID'] = "iPhone Developer: Test Name (XXXXXXXX)"
end

От https://stackoverflow.com/a/22777806/1034194

0 голосов
/ 06 февраля 2019

Способ fastlane позволяет вам заменить слой пользовательского интерфейса своим собственным.Вы можете найти пример реализации в репозитории fastlane.ci GitHub https://github.com/fastlane/ci/blob/master/app/features/build_runner/fastlane_build_runner_helpers/fastlane_ci_output.rb

. Как вы могли бы это настроить, это следующее:

      ci_output = FastlaneCI::FastlaneCIOutput.new(
        each_line_block: proc do |raw_row|
          puts "new line here, access raw_row"
        end
      )

      FastlaneCore::UI.ui_object = ci_output
...