github.com/goreleaser/goreleaser@v1.25.1/pkg/config/load.go (about)

     1  package config
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"os"
     7  
     8  	"github.com/goreleaser/goreleaser/internal/logext"
     9  	"github.com/goreleaser/goreleaser/internal/yaml"
    10  )
    11  
    12  // VersionError will happen if the goreleaser config file version does not
    13  // match the current GoReleaser version.
    14  type VersionError struct {
    15  	current int
    16  }
    17  
    18  func (e VersionError) Error() string {
    19  	return fmt.Sprintf(
    20  		"only configurations files on %s are supported, yours is %s, please update your configuration",
    21  		logext.Keyword("version: 1"),
    22  		logext.Keyword(fmt.Sprintf("version: %d", e.current)),
    23  	)
    24  }
    25  
    26  // Load config file.
    27  func Load(file string) (config Project, err error) {
    28  	f, err := os.Open(file) // #nosec
    29  	if err != nil {
    30  		return
    31  	}
    32  	defer f.Close()
    33  	return LoadReader(f)
    34  }
    35  
    36  // LoadReader config via io.Reader.
    37  func LoadReader(fd io.Reader) (config Project, err error) {
    38  	data, err := io.ReadAll(fd)
    39  	if err != nil {
    40  		return config, err
    41  	}
    42  
    43  	var versioned Versioned
    44  	_ = yaml.Unmarshal(data, &versioned)
    45  	if versioned.Version != 0 && versioned.Version != 1 {
    46  		return config, VersionError{versioned.Version}
    47  	}
    48  
    49  	err = yaml.UnmarshalStrict(data, &config)
    50  	return config, err
    51  }