mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-09-28 14:31:59 +00:00
0bb62be303
since github.com/docker/libcompose is deprecated, unmaintained and archived. and license is the same as woodpecker's, we can just copy stuff into woodpecker directly. (we only use types of that project anyway)
88 lines
3.3 KiB
Go
88 lines
3.3 KiB
Go
package yaml
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
|
|
"github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml/types"
|
|
)
|
|
|
|
type (
|
|
// AuthConfig defines registry authentication credentials.
|
|
AuthConfig struct {
|
|
Username string
|
|
Password string
|
|
Email string
|
|
}
|
|
|
|
// Containers denotes an ordered collection of containers.
|
|
Containers struct {
|
|
Containers []*Container
|
|
}
|
|
|
|
// Container defines a container.
|
|
Container struct {
|
|
AuthConfig AuthConfig `yaml:"auth_config,omitempty"`
|
|
CapAdd []string `yaml:"cap_add,omitempty"`
|
|
CapDrop []string `yaml:"cap_drop,omitempty"`
|
|
Command types.Command `yaml:"command,omitempty"`
|
|
Commands types.Stringorslice `yaml:"commands,omitempty"`
|
|
CPUQuota types.StringorInt `yaml:"cpu_quota,omitempty"`
|
|
CPUSet string `yaml:"cpuset,omitempty"`
|
|
CPUShares types.StringorInt `yaml:"cpu_shares,omitempty"`
|
|
Detached bool `yaml:"detach,omitempty"`
|
|
Devices []string `yaml:"devices,omitempty"`
|
|
Tmpfs []string `yaml:"tmpfs,omitempty"`
|
|
DNS types.Stringorslice `yaml:"dns,omitempty"`
|
|
DNSSearch types.Stringorslice `yaml:"dns_search,omitempty"`
|
|
Entrypoint types.Command `yaml:"entrypoint,omitempty"`
|
|
Environment types.SliceorMap `yaml:"environment,omitempty"`
|
|
ExtraHosts []string `yaml:"extra_hosts,omitempty"`
|
|
Group string `yaml:"group,omitempty"`
|
|
Image string `yaml:"image,omitempty"`
|
|
Isolation string `yaml:"isolation,omitempty"`
|
|
Labels types.SliceorMap `yaml:"labels,omitempty"`
|
|
MemLimit types.MemStringorInt `yaml:"mem_limit,omitempty"`
|
|
MemSwapLimit types.MemStringorInt `yaml:"memswap_limit,omitempty"`
|
|
MemSwappiness types.MemStringorInt `yaml:"mem_swappiness,omitempty"`
|
|
Name string `yaml:"name,omitempty"`
|
|
NetworkMode string `yaml:"network_mode,omitempty"`
|
|
IpcMode string `yaml:"ipc_mode,omitempty"`
|
|
Networks types.Networks `yaml:"networks,omitempty"`
|
|
Privileged bool `yaml:"privileged,omitempty"`
|
|
Pull bool `yaml:"pull,omitempty"`
|
|
ShmSize types.MemStringorInt `yaml:"shm_size,omitempty"`
|
|
Ulimits types.Ulimits `yaml:"ulimits,omitempty"`
|
|
Volumes types.Volumes `yaml:"volumes,omitempty"`
|
|
Secrets Secrets `yaml:"secrets,omitempty"`
|
|
Sysctls types.SliceorMap `yaml:"sysctls,omitempty"`
|
|
Constraints Constraints `yaml:"when,omitempty"`
|
|
Vargs map[string]interface{} `yaml:",inline"`
|
|
}
|
|
)
|
|
|
|
// UnmarshalYAML implements the Unmarshaller interface.
|
|
func (c *Containers) UnmarshalYAML(value *yaml.Node) error {
|
|
containers := map[string]Container{}
|
|
err := value.Decode(&containers)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for i, n := range value.Content {
|
|
if i%2 == 1 {
|
|
container := Container{}
|
|
err := n.Decode(&container)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if container.Name == "" {
|
|
container.Name = fmt.Sprintf("%v", value.Content[i-1].Value)
|
|
}
|
|
c.Containers = append(c.Containers, &container)
|
|
}
|
|
}
|
|
return nil
|
|
}
|