mirror of
https://github.com/hanzoai/pack.git
synced 2026-09-30 23:43:13 +00:00
75 lines
1.8 KiB
Go
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)
|
|
}
|