mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 01:53:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 | 
						|
}
 |