Files
pack/core/generate/install_bin_builder.go
T
2025-02-26 03:11:36 -05:00

75 lines
1.8 KiB
Go

package generate
import (
"fmt"
"github.com/railwayapp/railpack/core/plan"
"github.com/railwayapp/railpack/core/resolver"
)
const (
BinDir = "/bin"
)
type InstallBinStepBuilder struct {
DisplayName string
Resolver *resolver.Resolver
SupportingAptPackages []string
Package resolver.PackageRef
}
func (c *GenerateContext) NewInstallBinStepBuilder(name string) *InstallBinStepBuilder {
step := &InstallBinStepBuilder{
DisplayName: c.GetStepName(name),
Resolver: c.Resolver,
Package: resolver.PackageRef{},
}
c.Steps = append(c.Steps, step)
return step
}
func (b *InstallBinStepBuilder) Name() string {
return b.DisplayName
}
func (b *InstallBinStepBuilder) Default(name string, defaultVersion string) resolver.PackageRef {
b.Package = b.Resolver.Default(name, defaultVersion)
return b.Package
}
func (b *InstallBinStepBuilder) GetOutputPaths() []string {
return []string{b.getBinPath()}
}
func (b *InstallBinStepBuilder) Version(name resolver.PackageRef, version string, source string) {
b.Resolver.Version(name, version, source)
}
func (b *InstallBinStepBuilder) Build(options *BuildStepOptions) (*plan.Step, error) {
packageVersion := options.ResolvedPackages[b.Package.Name].ResolvedVersion
if packageVersion == nil {
return nil, fmt.Errorf("package %s not found", b.Package.Name)
}
step := plan.NewStep(b.DisplayName)
step.Inputs = []plan.Input{
plan.NewImageInput(plan.RAILPACK_BUILDER_IMAGE),
}
step.AddCommands([]plan.Command{
plan.NewExecCommand(fmt.Sprintf("mise install-into %s@%s %s", b.Package.Name, *packageVersion, BinDir)),
plan.NewPathCommand(b.getBinPath()),
})
step.Secrets = []string{}
return step, nil
}
func (b *InstallBinStepBuilder) getBinPath() string {
return fmt.Sprintf("%s/%s", BinDir, b.Package.Name)
}