mirror of
https://github.com/hanzoai/pack.git
synced 2026-09-30 23:43:13 +00:00
68 lines
1.6 KiB
Go
68 lines
1.6 KiB
Go
package generate
|
|
|
|
import (
|
|
"github.com/railwayapp/railpack/core/plan"
|
|
"github.com/railwayapp/railpack/core/resolver"
|
|
)
|
|
|
|
type ImageStepBuilder struct {
|
|
DisplayName string
|
|
Resolver *resolver.Resolver
|
|
Packages []*resolver.PackageRef
|
|
ResolveStepImage func(options *BuildStepOptions) string
|
|
AptPackages []string
|
|
}
|
|
|
|
func (c *GenerateContext) NewImageStep(name string, resolveStepImage func(options *BuildStepOptions) string) *ImageStepBuilder {
|
|
step := &ImageStepBuilder{
|
|
DisplayName: c.GetStepName(name),
|
|
Resolver: c.Resolver,
|
|
ResolveStepImage: resolveStepImage,
|
|
}
|
|
|
|
c.Steps = append(c.Steps, step)
|
|
|
|
return step
|
|
}
|
|
|
|
func (b *ImageStepBuilder) Default(name string, defaultVersion string) resolver.PackageRef {
|
|
for _, pkg := range b.Packages {
|
|
if pkg.Name == name {
|
|
return *pkg
|
|
}
|
|
}
|
|
|
|
pkg := b.Resolver.Default(name, defaultVersion)
|
|
b.Packages = append(b.Packages, &pkg)
|
|
return pkg
|
|
}
|
|
|
|
func (b *ImageStepBuilder) Version(name resolver.PackageRef, version string, source string) {
|
|
b.Resolver.Version(name, version, source)
|
|
}
|
|
|
|
func (b *ImageStepBuilder) SetVersionAvailable(ref resolver.PackageRef, isVersionAvailable func(version string) bool) {
|
|
b.Resolver.SetVersionAvailable(ref, isVersionAvailable)
|
|
}
|
|
|
|
func (b *ImageStepBuilder) Name() string {
|
|
return b.DisplayName
|
|
}
|
|
|
|
func (b *ImageStepBuilder) Build(options *BuildStepOptions) (*plan.Step, error) {
|
|
image := b.ResolveStepImage(options)
|
|
|
|
step := plan.NewStep(b.DisplayName)
|
|
step.Inputs = []plan.Input{
|
|
plan.NewImageInput(image),
|
|
}
|
|
|
|
if len(b.AptPackages) > 0 {
|
|
step.Commands = []plan.Command{
|
|
options.NewAptInstallCommand(b.AptPackages),
|
|
}
|
|
}
|
|
|
|
return step, nil
|
|
}
|