67 lines
1.3 KiB
Go
67 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
|
|
}
|