Merge pull request #3 from blocklayerhq/pr-various
Bug fix, bug repro, debug message cleanup
This commit is contained in:
commit
8730a7e03e
@ -1,35 +0,0 @@
|
|||||||
package cmd
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"dagger.cloud/go/dagger/ui"
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
|
||||||
|
|
||||||
var createCmd = &cobra.Command{
|
|
||||||
Use: "create ENV BASE",
|
|
||||||
Short: "Create an env",
|
|
||||||
Args: cobra.ExactArgs(2),
|
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
|
||||||
envname := args[0]
|
|
||||||
base := args[1]
|
|
||||||
envdir := ".dagger/env/" + envname
|
|
||||||
if info, err := os.Stat(envdir); err == nil {
|
|
||||||
if info.IsDir() {
|
|
||||||
ui.Fatalf("env already exists: %s", envname)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := os.MkdirAll(envdir, 0755); err != nil {
|
|
||||||
ui.Fatal(err)
|
|
||||||
}
|
|
||||||
baseCue := fmt.Sprintf("package env\nimport base \"%s\"\nbase\n", base)
|
|
||||||
err := ioutil.WriteFile(envdir+"/base.cue", []byte(baseCue), 0644)
|
|
||||||
if err != nil {
|
|
||||||
ui.Fatal(err)
|
|
||||||
}
|
|
||||||
ui.Info("created environment %q with base %q", envname, base)
|
|
||||||
},
|
|
||||||
}
|
|
@ -14,11 +14,9 @@ func init() {
|
|||||||
// --debug
|
// --debug
|
||||||
rootCmd.PersistentFlags().Bool("debug", false, "Enable debug mode")
|
rootCmd.PersistentFlags().Bool("debug", false, "Enable debug mode")
|
||||||
// --workspace
|
// --workspace
|
||||||
rootCmd.PersistentFlags().StringP("workspace", "w", "", "Select workspace")
|
|
||||||
rootCmd.AddCommand(
|
rootCmd.AddCommand(
|
||||||
// Create an env
|
|
||||||
createCmd,
|
|
||||||
computeCmd,
|
computeCmd,
|
||||||
|
// Create an env
|
||||||
// Change settings on an env
|
// Change settings on an env
|
||||||
// View or edit env serti
|
// View or edit env serti
|
||||||
// settingsCmd,
|
// settingsCmd,
|
||||||
|
@ -90,7 +90,6 @@ func (c *Client) LocalDirs() ([]string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) BootScript() (*Script, error) {
|
func (c *Client) BootScript() (*Script, error) {
|
||||||
debugf("compiling boot script: %q\n", c.boot)
|
|
||||||
cc := &Compiler{}
|
cc := &Compiler{}
|
||||||
src, err := cc.Compile("boot.cue", c.boot)
|
src, err := cc.Compile("boot.cue", c.boot)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -147,6 +146,7 @@ func (c *Client) buildfn(ctx context.Context, ch chan *bk.SolveStatus, w io.Writ
|
|||||||
close(ch)
|
close(ch)
|
||||||
return errors.Wrap(err, "serialize boot script")
|
return errors.Wrap(err, "serialize boot script")
|
||||||
}
|
}
|
||||||
|
debugf("client: assembled boot script: %s\n", bootSource)
|
||||||
// Setup solve options
|
// Setup solve options
|
||||||
opts := bk.SolveOpt{
|
opts := bk.SolveOpt{
|
||||||
FrontendAttrs: map[string]string{
|
FrontendAttrs: map[string]string{
|
||||||
@ -193,7 +193,6 @@ func (c *Client) outputfn(_ context.Context, r io.Reader, out *Value) func() err
|
|||||||
defer debugf("outputfn complete")
|
defer debugf("outputfn complete")
|
||||||
tr := tar.NewReader(r)
|
tr := tar.NewReader(r)
|
||||||
for {
|
for {
|
||||||
debugf("outputfn: reading next tar entry")
|
|
||||||
h, err := tr.Next()
|
h, err := tr.Next()
|
||||||
if err == io.EOF {
|
if err == io.EOF {
|
||||||
break
|
break
|
||||||
@ -301,9 +300,12 @@ func (c *Client) printfn(ctx context.Context, ch, ch2 chan *bk.SolveStatus) func
|
|||||||
len(status.Logs),
|
len(status.Logs),
|
||||||
)
|
)
|
||||||
for _, v := range status.Vertexes {
|
for _, v := range status.Vertexes {
|
||||||
|
// FIXME: insert raw buildkit telemetry here (ie for debugging, etc.)
|
||||||
|
|
||||||
|
// IF a buildkit vertex has a valid cue path as name, extract additional info:
|
||||||
p := cue.ParsePath(v.Name)
|
p := cue.ParsePath(v.Name)
|
||||||
if err := p.Err(); err != nil {
|
if err := p.Err(); err != nil {
|
||||||
debugf("ignoring buildkit vertex %q: not a valid cue path", v.Name)
|
// Not a valid cue path: skip.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
n := &Node{
|
n := &Node{
|
||||||
|
@ -19,7 +19,6 @@ func Compute(ctx context.Context, c bkgw.Client) (r *bkgw.Result, err error) {
|
|||||||
debugf("execute returned an error. Wrapping...")
|
debugf("execute returned an error. Wrapping...")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
debugf("initializing env")
|
|
||||||
// Retrieve boot script form client
|
// Retrieve boot script form client
|
||||||
env, err := NewEnv(ctx, NewSolver(c), getBootScript(c), getInput(c))
|
env, err := NewEnv(ctx, NewSolver(c), getBootScript(c), getInput(c))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -28,6 +28,7 @@ type Env struct {
|
|||||||
|
|
||||||
// Initialize a new environment
|
// Initialize a new environment
|
||||||
func NewEnv(ctx context.Context, s Solver, bootsrc, inputsrc string) (*Env, error) {
|
func NewEnv(ctx context.Context, s Solver, bootsrc, inputsrc string) (*Env, error) {
|
||||||
|
debugf("NewEnv(boot=%q input=%q)", bootsrc, inputsrc)
|
||||||
cc := &Compiler{}
|
cc := &Compiler{}
|
||||||
// 1. Compile & execute boot script
|
// 1. Compile & execute boot script
|
||||||
boot, err := cc.CompileScript("boot.cue", bootsrc)
|
boot, err := cc.CompileScript("boot.cue", bootsrc)
|
||||||
@ -55,6 +56,9 @@ func NewEnv(ctx context.Context, s Solver, bootsrc, inputsrc string) (*Env, erro
|
|||||||
if _, err := base.Merge(input); err != nil {
|
if _, err := base.Merge(input); err != nil {
|
||||||
return nil, errors.Wrap(err, "merge base & input")
|
return nil, errors.Wrap(err, "merge base & input")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debugf("ENV: base=%q input=%q", base.JSON(), input.JSON())
|
||||||
|
|
||||||
return &Env{
|
return &Env{
|
||||||
base: base,
|
base: base,
|
||||||
input: input,
|
input: input,
|
||||||
@ -102,7 +106,7 @@ func (env *Env) Walk(ctx context.Context, fn EnvWalkFunc) (*Value, error) {
|
|||||||
defer debugf("COMPLETE: Env.Walk")
|
defer debugf("COMPLETE: Env.Walk")
|
||||||
// Cueflow cue instance
|
// Cueflow cue instance
|
||||||
// FIXME: make this cleaner in *Value by keeping intermediary instances
|
// FIXME: make this cleaner in *Value by keeping intermediary instances
|
||||||
flowInst, err := env.base.CueInst().Fill(env.input.CueInst())
|
flowInst, err := env.base.CueInst().Fill(env.input.CueInst().Value())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,17 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestValidateEmptyValue(t *testing.T) {
|
||||||
|
cc := &Compiler{}
|
||||||
|
v, err := cc.Compile("", "#dagger: compute: _")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if err := v.Get("#dagger.compute").Validate("#Script"); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestLocalScript(t *testing.T) {
|
func TestLocalScript(t *testing.T) {
|
||||||
cc := &Compiler{}
|
cc := &Compiler{}
|
||||||
src := `[{do: "local", dir: "foo"}]`
|
src := `[{do: "local", dir: "foo"}]`
|
||||||
|
@ -18,7 +18,7 @@ func (s Spec) Validate(v *Value, defpath string) (err error) {
|
|||||||
// FIXME: there is probably a cleaner way to do this.
|
// FIXME: there is probably a cleaner way to do this.
|
||||||
defer func() {
|
defer func() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
debugf("ERROR while validating %v against %v err=%q", v, defpath, err)
|
//debugf("ERROR while validating %v against %v err=%q", v, defpath, err)
|
||||||
err = fmt.Errorf("%s", cueerrors.Details(err, nil))
|
err = fmt.Errorf("%s", cueerrors.Details(err, nil))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@ -33,7 +33,6 @@ func (s Spec) Validate(v *Value, defpath string) (err error) {
|
|||||||
if err := merged.Err(); err != nil {
|
if err := merged.Err(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
debugf("Validating %v against %v", v, def)
|
|
||||||
if err := merged.Validate(cue.Final()); err != nil {
|
if err := merged.Validate(cue.Final()); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user