diff --git a/agent/agent.go b/agent/agent.go index e441608be..853a62be2 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -138,6 +138,7 @@ func (a *Agent) prep(w *queue.Work) (*yaml.Config, error) { } transform.Clone(conf, w.Repo.Kind) + transform.Labels(conf) transform.Environ(conf, envs) transform.DefaultFilter(conf) if w.BuildLast != nil { diff --git a/build/docker/util.go b/build/docker/util.go index c4b9d3e4d..f7ede3f92 100644 --- a/build/docker/util.go +++ b/build/docker/util.go @@ -14,6 +14,7 @@ func toContainerConfig(c *yaml.Container) *dockerclient.ContainerConfig { config := &dockerclient.ContainerConfig{ Image: c.Image, Env: toEnvironmentSlice(c.Environment), + Labels: c.Labels, Cmd: c.Command, Entrypoint: c.Entrypoint, WorkingDir: c.WorkingDir, diff --git a/yaml/container.go b/yaml/container.go index 012be8a0f..77e41c1f6 100644 --- a/yaml/container.go +++ b/yaml/container.go @@ -27,6 +27,7 @@ type Container struct { Privileged bool WorkingDir string Environment map[string]string + Labels map[string]string Entrypoint []string Command []string Commands []string @@ -61,6 +62,7 @@ type container struct { Pull bool `yaml:"pull"` Privileged bool `yaml:"privileged"` Environment types.MapEqualSlice `yaml:"environment"` + Labels types.MapEqualSlice `yaml:"labels"` Entrypoint types.StringOrSlice `yaml:"entrypoint"` Command types.StringOrSlice `yaml:"command"` Commands types.StringOrSlice `yaml:"commands"` @@ -129,6 +131,7 @@ func (c *containerList) UnmarshalYAML(unmarshal func(interface{}) error) error { Pull: cc.Pull, Privileged: cc.Privileged, Environment: cc.Environment.Map(), + Labels: cc.Labels.Map(), Entrypoint: cc.Entrypoint.Slice(), Command: cc.Command.Slice(), Commands: cc.Commands.Slice(), diff --git a/yaml/transform/labels.go b/yaml/transform/labels.go new file mode 100644 index 000000000..ba85e979e --- /dev/null +++ b/yaml/transform/labels.go @@ -0,0 +1,19 @@ +package transform + +import ( + "github.com/drone/drone/yaml" +) + +// Labels transforms the steps in the Yaml pipeline to include a Labels if it doens't exist +func Labels(c *yaml.Config) error { + var images []*yaml.Container + images = append(images, c.Pipeline...) + images = append(images, c.Services...) + + for _, p := range images { + if p.Labels == nil { + p.Labels = map[string]string{} + } + } + return nil +}