github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/release/dependencies.go (about) 1 package release 2 3 import ( 4 "github.com/helmwave/helmwave/pkg/release/uniqname" 5 "gopkg.in/yaml.v3" 6 ) 7 8 type DependencyType int 9 10 const ( 11 DependencyRelease DependencyType = iota 12 DependencyTag 13 DependencyInvalid 14 ) 15 16 // DependsOnReference is used to store release dependencies. 17 // 18 //nolint:lll 19 type DependsOnReference struct { 20 Name string `yaml:"name" json:"name" jsonschema:"description=Uniqname (or just name if in same namespace) of dependency release,oneof_required=name"` 21 Tag string `yaml:"tag,omitempty" json:"tag,omitempty" jsonschema:"description=All available releases with the tag will be applied as dependencies,oneof_required=tag"` 22 Optional bool `yaml:"optional" json:"optional" jsonschema:"description=Whether the dependency is required to be present in plan,default=false"` 23 } 24 25 // UnmarshalYAML is used to implement InterfaceUnmarshaler interface of gopkg.in/yaml.v3. 26 func (d *DependsOnReference) UnmarshalYAML(node *yaml.Node) error { 27 type raw DependsOnReference 28 var err error 29 switch node.Kind { 30 // single value or reference to another value 31 case yaml.ScalarNode, yaml.AliasNode: 32 err = node.Decode(&d.Name) 33 case yaml.MappingNode: 34 err = node.Decode((*raw)(d)) 35 default: 36 err = ErrUnknownFormat 37 } 38 39 if err != nil { 40 return NewYAMLDecodeDependsOnError(node.Value, err) 41 } 42 43 return nil 44 } 45 46 func (d *DependsOnReference) Uniq() uniqname.UniqName { 47 return uniqname.UniqName(d.Name) 48 } 49 50 func (d *DependsOnReference) Type() DependencyType { 51 if d.Name != "" { 52 return DependencyRelease 53 } 54 55 if d.Tag != "" { 56 return DependencyTag 57 } 58 59 return DependencyInvalid 60 }