49 lines
1 KiB
Go
49 lines
1 KiB
Go
|
package build
|
||
|
|
||
|
import "github.com/drone/drone/yaml"
|
||
|
|
||
|
// Config defines the configuration for creating the Pipeline.
|
||
|
type Config struct {
|
||
|
Engine Engine
|
||
|
|
||
|
// Buffer defines the size of the buffer for the channel to which the
|
||
|
// console output is streamed.
|
||
|
Buffer uint
|
||
|
}
|
||
|
|
||
|
// Pipeline creates a build Pipeline using the specific configuration for
|
||
|
// the given Yaml specification.
|
||
|
func (c *Config) Pipeline(spec *yaml.Config) *Pipeline {
|
||
|
|
||
|
pipeline := Pipeline{
|
||
|
engine: c.Engine,
|
||
|
pipe: make(chan *Line, c.Buffer),
|
||
|
next: make(chan error),
|
||
|
done: make(chan error),
|
||
|
}
|
||
|
|
||
|
var containers []*yaml.Container
|
||
|
containers = append(containers, spec.Services...)
|
||
|
containers = append(containers, spec.Pipeline...)
|
||
|
|
||
|
for _, c := range containers {
|
||
|
if c.Disabled {
|
||
|
continue
|
||
|
}
|
||
|
next := &element{Container: c}
|
||
|
if pipeline.head == nil {
|
||
|
pipeline.head = next
|
||
|
pipeline.tail = next
|
||
|
} else {
|
||
|
pipeline.tail.next = next
|
||
|
pipeline.tail = next
|
||
|
}
|
||
|
}
|
||
|
|
||
|
go func() {
|
||
|
pipeline.next <- nil
|
||
|
}()
|
||
|
|
||
|
return &pipeline
|
||
|
}
|