def execute_pipe(*commands, label: nil)
      stdout, waiters = Open3.pipeline_r(*commands)
      output = stdout.read
      
      waiters.each_with_index do |waiter, i|
        status = waiter.value
        unless status.success?
          log_error output
          raise SubprocessError.new(label, commands[i].join(' '), status)
        end
      end
      
      output.chomp
    end
def execute_pipe(*commands, label: nil)
      stdout, waiters = Open3.pipeline_r(*commands)
      output = stdout.read
      
      waiters.each_with_index do |waiter, i|
        status = waiter.value
        unless status.success?
          log_error output
          raise SubprocessError.new(label, commands[i].join(' '), status)
        end
      end
      
      output.chomp
    end
Synchronously execute a chain multiple commands piped into each other as a
 subprocess and return the output.

 @param [Array<Array<String>>] commands The command lines
 @param [String] label A label for debug and logging purposes

 @return [String] The output of the command
 @raise [SubprocessError] if the subprocess returns status > 0