This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
dagger/dagger/script.go
Solomon Hykes c5842f894a clean up & bugfix
Signed-off-by: Solomon Hykes <sh.github.6811@hykes.org>
2021-01-07 16:54:52 -08:00

72 lines
1.5 KiB
Go

package dagger
import (
"context"
"github.com/pkg/errors"
)
type Script struct {
v *Value
}
func (s Script) Validate() error {
// FIXME this crashes when a script is incomplete or empty
return s.Value().Validate("#Script")
}
func (s *Script) Value() *Value {
return s.v
}
// Run a dagger script
func (s *Script) Execute(ctx context.Context, fs FS, out Fillable) (FS, error) {
err := s.v.RangeList(func(idx int, v *Value) error {
// If op not concrete, interrupt without error.
// This allows gradual resolution:
// compute what you can compute.. leave the rest incomplete.
if !v.IsConcreteR() {
return nil
}
op, err := v.Op()
if err != nil {
return errors.Wrapf(err, "validate op %d/%d", idx+1, s.v.Len())
}
fs, err = op.Execute(ctx, fs, out)
if err != nil {
return errors.Wrapf(err, "execute op %d/%d", idx+1, s.v.Len())
}
return nil
})
return fs, err
}
func (s *Script) Walk(fn func(op *Op) error) error {
return s.v.RangeList(func(idx int, v *Value) error {
op, err := v.Op()
if err != nil {
return errors.Wrapf(err, "validate op %d/%d", idx+1, s.v.Len())
}
if err := op.Walk(fn); err != nil {
return err
}
return nil
})
}
func (s *Script) LocalDirs() ([]string, error) {
var dirs []string
err := s.Walk(func(op *Op) error {
if err := op.Validate("#Local"); err != nil {
return nil
}
dir, err := op.Get("dir").String()
if err != nil {
return err
}
dirs = append(dirs, dir)
return nil
})
return dirs, err
}