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 }