mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-03-17 20:47:50 +02:00
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
// Package build provides the API for external builders
|
|
package build
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/goreleaser/goreleaser/v2/pkg/config"
|
|
"github.com/goreleaser/goreleaser/v2/pkg/context"
|
|
)
|
|
|
|
//nolint:gochecknoglobals
|
|
var (
|
|
builders = map[string]Builder{}
|
|
lock sync.Mutex
|
|
)
|
|
|
|
// Register registers a builder to a given name.
|
|
func Register(name string, builder Builder) {
|
|
lock.Lock()
|
|
builders[name] = builder
|
|
lock.Unlock()
|
|
}
|
|
|
|
// For gets the previously registered builder for the given name.
|
|
func For(name string) Builder {
|
|
return builders[name]
|
|
}
|
|
|
|
// Options to be passed down to a builder.
|
|
type Options struct {
|
|
Name string
|
|
Path string
|
|
Ext string // with the leading `.`.
|
|
Target Target
|
|
}
|
|
|
|
// Target represents a build target.
|
|
//
|
|
// Each Builder implementation can implement its own.
|
|
type Target interface {
|
|
// String returns the original target.
|
|
String() string
|
|
|
|
// Fields returns the template fields that will be available for this
|
|
// target (e.g. Os, Arch, etc).
|
|
Fields() map[string]string
|
|
}
|
|
|
|
// Builder defines a builder.
|
|
type Builder interface {
|
|
WithDefaults(build config.Build) (config.Build, error)
|
|
Build(ctx *context.Context, build config.Build, options Options) error
|
|
Parse(target string) (Target, error)
|
|
}
|
|
|
|
// PreparedBuilder can be implemented to run something before all the actual
|
|
// builds happen.
|
|
type PreparedBuilder interface {
|
|
Prepare(ctx *context.Context, build config.Build) error
|
|
}
|