Merge pull request #1068 from aluzzardi/fix-localdirs
Fix local directory error handling
This commit is contained in:
commit
bc3e8658ae
@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
@ -116,14 +115,10 @@ func (c *Client) buildfn(ctx context.Context, st *state.State, env *environment.
|
||||
lg := log.Ctx(ctx)
|
||||
|
||||
// Scan local dirs to grant access
|
||||
localdirs := env.LocalDirs()
|
||||
for label, dir := range localdirs {
|
||||
abs, err := filepath.Abs(dir)
|
||||
localdirs, err := env.LocalDirs()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
localdirs[label] = abs
|
||||
}
|
||||
|
||||
// buildkit auth provider (registry)
|
||||
auth := solver.NewRegistryAuthProvider()
|
||||
|
@ -3,6 +3,7 @@ package environment
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"path/filepath"
|
||||
|
||||
"cuelang.org/go/cue"
|
||||
cueflow "cuelang.org/go/tools/flow"
|
||||
@ -75,10 +76,11 @@ func (e *Environment) Computed() *compiler.Value {
|
||||
// and return all referenced directory names.
|
||||
// This is used by clients to grant access to local directories when they are referenced
|
||||
// by user-specified scripts.
|
||||
func (e *Environment) LocalDirs() map[string]string {
|
||||
func (e *Environment) LocalDirs() (map[string]string, error) {
|
||||
dirs := map[string]string{}
|
||||
localdirs := func(code *compiler.Value) {
|
||||
Analyze(
|
||||
|
||||
localdirs := func(code *compiler.Value) error {
|
||||
return Analyze(
|
||||
func(op *compiler.Value) error {
|
||||
do, err := op.Lookup("do").String()
|
||||
if err != nil {
|
||||
@ -91,7 +93,12 @@ func (e *Environment) LocalDirs() map[string]string {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dirs[dir] = dir
|
||||
abs, err := filepath.Abs(dir)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
dirs[dir] = abs
|
||||
return nil
|
||||
},
|
||||
code,
|
||||
@ -101,10 +108,10 @@ func (e *Environment) LocalDirs() map[string]string {
|
||||
// FIXME: use a common `flow` instance to avoid rescanning the tree.
|
||||
src := compiler.NewValue()
|
||||
if err := src.FillPath(cue.MakePath(), e.plan); err != nil {
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
if err := src.FillPath(cue.MakePath(), e.input); err != nil {
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
flow := cueflow.New(
|
||||
&cueflow.Config{},
|
||||
@ -112,11 +119,12 @@ func (e *Environment) LocalDirs() map[string]string {
|
||||
newTaskFunc(noOpRunner),
|
||||
)
|
||||
for _, t := range flow.Tasks() {
|
||||
v := compiler.Wrap(t.Value())
|
||||
localdirs(v.Lookup("#up"))
|
||||
if err := localdirs(compiler.Wrap(t.Value())); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return dirs
|
||||
return dirs, nil
|
||||
}
|
||||
|
||||
// Up missing values in environment configuration, and write them to state.
|
||||
|
@ -113,7 +113,7 @@ func ops(code *compiler.Value) ([]*compiler.Value, error) {
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return nil, fmt.Errorf("not executable: %s", source)
|
||||
return nil, fmt.Errorf("not executable: %s (%s)", source, code.Path().String())
|
||||
}
|
||||
return ops, nil
|
||||
}
|
||||
@ -121,7 +121,9 @@ func ops(code *compiler.Value) ([]*compiler.Value, error) {
|
||||
func Analyze(fn func(*compiler.Value) error, code *compiler.Value) error {
|
||||
ops, err := ops(code)
|
||||
if err != nil {
|
||||
return err
|
||||
// Ignore CUE errors when analyzing. This might be because the value is
|
||||
// not concrete since static analysis runs before pipelines are executed.
|
||||
return nil
|
||||
}
|
||||
for _, op := range ops {
|
||||
if err := analyzeOp(fn, op); err != nil {
|
||||
|
@ -205,9 +205,6 @@ import (
|
||||
}
|
||||
}
|
||||
"mount": {
|
||||
if ssh == _|_ {
|
||||
"/var/run/docker.sock": from: "docker.sock"
|
||||
}
|
||||
if ssh != _|_ {
|
||||
if ssh.key != _|_ {
|
||||
"/key": secret: ssh.key
|
||||
|
@ -144,6 +144,9 @@ setup() {
|
||||
# Copy deployment to sandbox
|
||||
copy_to_sandbox kubernetes-deployment kubernetes
|
||||
|
||||
# Query
|
||||
dagger --project "$DAGGER_SANDBOX" -e kubernetes-deployment query
|
||||
|
||||
# Set kubeconfig
|
||||
dagger --project "$DAGGER_SANDBOX" -e kubernetes-deployment input text TestKubeconfig -f "$HOME"/.kube/config
|
||||
|
||||
|
@ -1,23 +1,22 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
A: {
|
||||
result: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo '{"result": "from A"}' > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
@ -29,20 +28,17 @@ B: {
|
||||
result: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo "{\\"result\\": \\"dependency \(A.result)\\"}" > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
|
@ -1,23 +1,21 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
A: {
|
||||
result: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo '{"result": "from A"}' > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
@ -29,12 +27,10 @@ B: {
|
||||
result: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
env: DATA: A.result
|
||||
args: ["sh", "-c", """
|
||||
echo "{\\"result\\": \\"dependency $DATA\\"}" > /tmp/out
|
||||
@ -42,8 +38,7 @@ B: {
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
|
@ -1,25 +1,25 @@
|
||||
package testing
|
||||
|
||||
import "encoding/json"
|
||||
import (
|
||||
"encoding/json"
|
||||
"alpha.dagger.io/dagger/op"
|
||||
)
|
||||
|
||||
A: {
|
||||
string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo '{"hello": "world"}' > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "string"
|
||||
@ -33,20 +33,17 @@ B: {
|
||||
result: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo "{\\"result\\": \\"unmarshalled.hello=\(unmarshalled.hello)\\"}" > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
|
@ -1,25 +1,24 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
X1=in: string | *"default input"
|
||||
|
||||
test: {
|
||||
string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo -n "received: \(X1)" > /out
|
||||
"""]
|
||||
// XXX Blocked by https://github.com/blocklayerhq/dagger/issues/19
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
source: "/out"
|
||||
format: "string"
|
||||
},
|
||||
|
@ -1,25 +1,24 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
X1=in: string
|
||||
|
||||
test: {
|
||||
string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo -n "received: \(X1)" > /out
|
||||
"""]
|
||||
// XXX Blocked by https://github.com/blocklayerhq/dagger/issues/19
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
source: "/out"
|
||||
format: "string"
|
||||
},
|
||||
|
@ -1,17 +1,19 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
new_prop: "lala"
|
||||
#new_def: "lala"
|
||||
|
||||
new_prop_too: string
|
||||
#new_def_too: string
|
||||
|
||||
#up: [{
|
||||
do: "fetch-container"
|
||||
#up: [
|
||||
op.#FetchContainer & {
|
||||
ref: "busybox"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
},
|
||||
op.#Exec & {
|
||||
args: ["true"]
|
||||
dir: "/"
|
||||
}]
|
||||
},
|
||||
]
|
||||
|
@ -1,5 +1,7 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
foo: {
|
||||
new_prop: "lala"
|
||||
#new_def: "lala"
|
||||
@ -7,13 +9,13 @@ foo: {
|
||||
new_prop_too: string
|
||||
#new_def_too: string
|
||||
|
||||
#up: [{
|
||||
do: "fetch-container"
|
||||
#up: [
|
||||
op.#FetchContainer & {
|
||||
ref: "busybox"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["true"]
|
||||
dir: "/"
|
||||
}]
|
||||
},
|
||||
]
|
||||
}
|
||||
|
@ -1,12 +1,12 @@
|
||||
package testing
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "busybox"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["true"]
|
||||
dir: "/"
|
||||
},
|
||||
|
@ -1,15 +1,14 @@
|
||||
package def
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
#dang: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
dir: "/"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo success
|
||||
"""]
|
||||
|
@ -1,15 +1,14 @@
|
||||
package nonoptional
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
dang: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
dir: "/"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo "This test SHOULD fail, because this SHOULD be executed"
|
||||
exit 1
|
||||
|
@ -1,15 +1,14 @@
|
||||
package optional
|
||||
|
||||
import "alpha.dagger.io/dagger/op"
|
||||
|
||||
dang?: string
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
dir: "/"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo success
|
||||
"""]
|
||||
|
@ -44,20 +44,16 @@ TestExportList: {
|
||||
[...string]
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo '["milk", "pumpkin pie", "eggs", "juice"]' > /tmp/out
|
||||
""",
|
||||
]
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "json"
|
||||
|
@ -27,22 +27,17 @@ TestExportList: {
|
||||
[...string]
|
||||
|
||||
#up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo "--- # Shopping list
|
||||
[milk, pumpkin pie, eggs, juice]" > /tmp/out
|
||||
""",
|
||||
]
|
||||
// XXX Blocked by https://github.com/blocklayerhq/dagger/issues/19
|
||||
dir: "/"
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "yaml"
|
||||
@ -51,19 +46,16 @@ TestExportList: {
|
||||
}
|
||||
|
||||
TestExportMap: #up: [
|
||||
{
|
||||
do: "fetch-container"
|
||||
op.#FetchContainer & {
|
||||
ref: "alpine"
|
||||
},
|
||||
{
|
||||
do: "exec"
|
||||
op.#Exec & {
|
||||
args: ["sh", "-c", """
|
||||
echo something: something > /tmp/out
|
||||
""",
|
||||
]
|
||||
},
|
||||
{
|
||||
do: "export"
|
||||
op.#Export & {
|
||||
// Source path in the container
|
||||
source: "/tmp/out"
|
||||
format: "yaml"
|
||||
|
Reference in New Issue
Block a user