func()

in pkg/api/client/basic/client.go [115:145]


func (c *StepRunnerClient) FollowLogs(ctx context.Context, jobID string, offset int64, writer io.Writer) (int64, error) {
	if writer == nil {
		return -1, errors.New("nil io.Writer")
	}

	ioStream, err := c.client.FollowLogs(ctx, &proto.FollowLogsRequest{Id: jobID, Offset: offset})
	if err != nil {
		return -1, fmt.Errorf("following logs for job %q: %w", jobID, err)
	}

	written := offset
	for {
		if ctx.Err() != nil {
			return -1, ctx.Err()
		}
		res, err := ioStream.Recv()
		if err == io.EOF {
			log.Println("logs stream done")
			return written, nil
		}
		if err != nil {
			return written, fmt.Errorf("following logs: %w", err)
		}

		n, err := writer.Write(res.Data)
		written += int64(n)
		if err != nil {
			return written, fmt.Errorf("writing to log sink: %w", err)
		}
	}
}