68 lines
1.3 KiB
Go
68 lines
1.3 KiB
Go
|
package yaml
|
||
|
|
||
|
import "gopkg.in/yaml.v2"
|
||
|
|
||
|
// Workspace represents the build workspace.
|
||
|
type Workspace struct {
|
||
|
Base string
|
||
|
Path string
|
||
|
}
|
||
|
|
||
|
// Config represents the build configuration Yaml document.
|
||
|
type Config struct {
|
||
|
Image string
|
||
|
Build *Build
|
||
|
Workspace *Workspace
|
||
|
Pipeline []*Container
|
||
|
Services []*Container
|
||
|
Volumes []*Volume
|
||
|
Networks []*Network
|
||
|
}
|
||
|
|
||
|
// ParseString parses the Yaml configuration document.
|
||
|
func ParseString(data string) (*Config, error) {
|
||
|
return Parse([]byte(data))
|
||
|
}
|
||
|
|
||
|
// Parse parses Yaml configuration document.
|
||
|
func Parse(data []byte) (*Config, error) {
|
||
|
v := struct {
|
||
|
Image string
|
||
|
Build *Build
|
||
|
Workspace *Workspace
|
||
|
Services containerList
|
||
|
Pipeline containerList
|
||
|
Networks networkList
|
||
|
Volumes volumeList
|
||
|
}{}
|
||
|
|
||
|
err := yaml.Unmarshal(data, &v)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
for _, c := range v.Services.containers {
|
||
|
c.Detached = true
|
||
|
}
|
||
|
|
||
|
return &Config{
|
||
|
Image: v.Image,
|
||
|
Build: v.Build,
|
||
|
Workspace: v.Workspace,
|
||
|
Services: v.Services.containers,
|
||
|
Pipeline: v.Pipeline.containers,
|
||
|
Networks: v.Networks.networks,
|
||
|
Volumes: v.Volumes.volumes,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
type config struct {
|
||
|
Image string
|
||
|
Build *Build
|
||
|
Workspace *Workspace
|
||
|
Services containerList
|
||
|
Pipeline containerList
|
||
|
Networks networkList
|
||
|
Volumes volumeList
|
||
|
}
|