You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
2.9 KiB
Go
127 lines
2.9 KiB
Go
package pb
|
|
|
|
import (
|
|
"github.com/docker/buildx/util/progress"
|
|
control "github.com/moby/buildkit/api/services/control"
|
|
"github.com/moby/buildkit/client"
|
|
"github.com/opencontainers/go-digest"
|
|
)
|
|
|
|
type writer struct {
|
|
ch chan<- *StatusResponse
|
|
}
|
|
|
|
func NewProgressWriter(ch chan<- *StatusResponse) progress.Writer {
|
|
return &writer{ch: ch}
|
|
}
|
|
|
|
func (w *writer) Write(status *client.SolveStatus) {
|
|
w.ch <- ToControlStatus(status)
|
|
}
|
|
|
|
func (w *writer) WriteBuildRef(target string, ref string) {
|
|
return
|
|
}
|
|
|
|
func (w *writer) ValidateLogSource(digest.Digest, interface{}) bool {
|
|
return true
|
|
}
|
|
|
|
func (w *writer) ClearLogSource(interface{}) {}
|
|
|
|
func ToControlStatus(s *client.SolveStatus) *StatusResponse {
|
|
resp := StatusResponse{}
|
|
for _, v := range s.Vertexes {
|
|
resp.Vertexes = append(resp.Vertexes, &control.Vertex{
|
|
Digest: v.Digest,
|
|
Inputs: v.Inputs,
|
|
Name: v.Name,
|
|
Started: v.Started,
|
|
Completed: v.Completed,
|
|
Error: v.Error,
|
|
Cached: v.Cached,
|
|
ProgressGroup: v.ProgressGroup,
|
|
})
|
|
}
|
|
for _, v := range s.Statuses {
|
|
resp.Statuses = append(resp.Statuses, &control.VertexStatus{
|
|
ID: v.ID,
|
|
Vertex: v.Vertex,
|
|
Name: v.Name,
|
|
Total: v.Total,
|
|
Current: v.Current,
|
|
Timestamp: v.Timestamp,
|
|
Started: v.Started,
|
|
Completed: v.Completed,
|
|
})
|
|
}
|
|
for _, v := range s.Logs {
|
|
resp.Logs = append(resp.Logs, &control.VertexLog{
|
|
Vertex: v.Vertex,
|
|
Stream: int64(v.Stream),
|
|
Msg: v.Data,
|
|
Timestamp: v.Timestamp,
|
|
})
|
|
}
|
|
for _, v := range s.Warnings {
|
|
resp.Warnings = append(resp.Warnings, &control.VertexWarning{
|
|
Vertex: v.Vertex,
|
|
Level: int64(v.Level),
|
|
Short: v.Short,
|
|
Detail: v.Detail,
|
|
Url: v.URL,
|
|
Info: v.SourceInfo,
|
|
Ranges: v.Range,
|
|
})
|
|
}
|
|
return &resp
|
|
}
|
|
|
|
func FromControlStatus(resp *StatusResponse) *client.SolveStatus {
|
|
s := client.SolveStatus{}
|
|
for _, v := range resp.Vertexes {
|
|
s.Vertexes = append(s.Vertexes, &client.Vertex{
|
|
Digest: v.Digest,
|
|
Inputs: v.Inputs,
|
|
Name: v.Name,
|
|
Started: v.Started,
|
|
Completed: v.Completed,
|
|
Error: v.Error,
|
|
Cached: v.Cached,
|
|
ProgressGroup: v.ProgressGroup,
|
|
})
|
|
}
|
|
for _, v := range resp.Statuses {
|
|
s.Statuses = append(s.Statuses, &client.VertexStatus{
|
|
ID: v.ID,
|
|
Vertex: v.Vertex,
|
|
Name: v.Name,
|
|
Total: v.Total,
|
|
Current: v.Current,
|
|
Timestamp: v.Timestamp,
|
|
Started: v.Started,
|
|
Completed: v.Completed,
|
|
})
|
|
}
|
|
for _, v := range resp.Logs {
|
|
s.Logs = append(s.Logs, &client.VertexLog{
|
|
Vertex: v.Vertex,
|
|
Stream: int(v.Stream),
|
|
Data: v.Msg,
|
|
Timestamp: v.Timestamp,
|
|
})
|
|
}
|
|
for _, v := range resp.Warnings {
|
|
s.Warnings = append(s.Warnings, &client.VertexWarning{
|
|
Vertex: v.Vertex,
|
|
Level: int(v.Level),
|
|
Short: v.Short,
|
|
Detail: v.Detail,
|
|
URL: v.Url,
|
|
SourceInfo: v.Info,
|
|
Range: v.Ranges,
|
|
})
|
|
}
|
|
return &s
|
|
}
|