You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
drone-yaml/yaml/build.go

55 lines
1.6 KiB
Go

// Copyright 2019 Drone IO, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package yaml
type (
// Build configures a Docker build.
Build struct {
Args map[string]string `json:"args,omitempty"`
CacheFrom []string `json:"cache_from,omitempty" yaml:"cache_from"`
Context string `json:"context,omitempty"`
Dockerfile string `json:"dockerfile,omitempty"`
Image string `json:"image,omitempty"`
Labels map[string]string `json:"labels,omitempty"`
}
// build is a tempoary type used to unmarshal
// the Build struct when long format is used.
build struct {
Args map[string]string
CacheFrom []string `yaml:"cache_from"`
Context string
Dockerfile string
Image string
Labels map[string]string
}
)
// UnmarshalYAML implements yaml unmarshalling.
func (b *Build) UnmarshalYAML(unmarshal func(interface{}) error) error {
d := new(build)
err := unmarshal(&d.Image)
if err != nil {
err = unmarshal(d)
}
b.Args = d.Args
b.CacheFrom = d.CacheFrom
b.Context = d.Context
b.Dockerfile = d.Dockerfile
b.Labels = d.Labels
b.Image = d.Image
return err
}