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)
}
}
}