1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-17 20:47:50 +02:00
goreleaser/pkg/build/build.go
Carlos Alexandro Becker 003e41cb77
feat(build): rust support
2024-12-01 15:06:42 -03:00

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
}