github.com/goreleaser/goreleaser@v1.25.1/pkg/build/build.go (about) 1 // Package build provides the API for external builders 2 package build 3 4 import ( 5 "sync" 6 7 "github.com/goreleaser/goreleaser/pkg/config" 8 "github.com/goreleaser/goreleaser/pkg/context" 9 ) 10 11 // nolint: gochecknoglobals 12 var ( 13 builders = map[string]Builder{} 14 lock sync.Mutex 15 ) 16 17 // Register registers a builder to a given name. 18 func Register(name string, builder Builder) { 19 lock.Lock() 20 builders[name] = builder 21 lock.Unlock() 22 } 23 24 // For gets the previously registered builder for the given name. 25 func For(name string) Builder { 26 return builders[name] 27 } 28 29 // Options to be passed down to a builder. 30 type Options struct { 31 Name string 32 Path string 33 Ext string 34 Target string 35 Goos string 36 Goarch string 37 Goamd64 string 38 Goarm string 39 Gomips string 40 } 41 42 // Builder defines a builder. 43 type Builder interface { 44 WithDefaults(build config.Build) (config.Build, error) 45 Build(ctx *context.Context, build config.Build, options Options) error 46 }