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  }