engine.#Source: Fix relative path support
Fixes #1492 Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
parent
49e7f2860f
commit
3a90542446
@ -4,8 +4,8 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/moby/buildkit/client/llb"
|
||||
"github.com/rs/zerolog/log"
|
||||
@ -22,22 +22,27 @@ type sourceTask struct {
|
||||
}
|
||||
|
||||
func (c *sourceTask) PreRun(ctx context.Context, pctx *plancontext.Context, v *compiler.Value) error {
|
||||
path, err := v.Lookup("path").String()
|
||||
origPath, err := v.Lookup("path").String()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !fs.ValidPath(path) {
|
||||
return fmt.Errorf("invalid path %q", path)
|
||||
}
|
||||
|
||||
absPath, err := v.Lookup("path").AbsPath()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := os.Stat(path); errors.Is(err, os.ErrNotExist) {
|
||||
return fmt.Errorf("path %q does not exist", path)
|
||||
location, err := v.Lookup("path").Dirname()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if !strings.HasPrefix(absPath, location) {
|
||||
return fmt.Errorf("path %q is not relative", origPath)
|
||||
}
|
||||
|
||||
if _, err := os.Stat(absPath); errors.Is(err, os.ErrNotExist) {
|
||||
return fmt.Errorf("path %q does not exist", origPath)
|
||||
}
|
||||
|
||||
pctx.LocalDirs.Add(absPath)
|
||||
|
@ -137,6 +137,7 @@ setup() {
|
||||
cd "$TESTDIR"/tasks/source
|
||||
"$DAGGER" --europa up ./source.cue
|
||||
"$DAGGER" --europa up ./source_include_exclude.cue
|
||||
"$DAGGER" --europa up ./source_relative.cue
|
||||
|
||||
run "$DAGGER" --europa up ./source_invalid_path.cue
|
||||
assert_failure
|
||||
|
@ -1,5 +1,5 @@
|
||||
# generated by dagger
|
||||
dagger.lock
|
||||
alpha.dagger.io
|
||||
dagger.io
|
||||
dagger.lock
|
||||
universe.dagger.io
|
@ -24,19 +24,19 @@ engine.#Plan & {
|
||||
}
|
||||
|
||||
verifyHello: engine.#ReadFile & {
|
||||
input: source.output
|
||||
path: "/hello.txt"
|
||||
} & {
|
||||
// assert result
|
||||
contents: "hello\n"
|
||||
}
|
||||
|
||||
verifyWorld: engine.#ReadFile & {
|
||||
input: source.output
|
||||
path: "/world.txt"
|
||||
} & {
|
||||
// assert result
|
||||
contents: "world\n"
|
||||
}
|
||||
|
||||
verifyWorld: engine.#ReadFile & {
|
||||
input: exec.output
|
||||
path: "/test.txt"
|
||||
} & {
|
||||
// assert result
|
||||
contents: "hello world"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ engine.#Plan & {
|
||||
}
|
||||
|
||||
source: engine.#Source & {
|
||||
path: ".."
|
||||
path: "testdata/../.."
|
||||
}
|
||||
}
|
||||
}
|
||||
|
25
tests/tasks/source/source_relative.cue
Normal file
25
tests/tasks/source/source_relative.cue
Normal file
@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"dagger.io/dagger/engine"
|
||||
)
|
||||
|
||||
engine.#Plan & {
|
||||
actions: {
|
||||
image: engine.#Pull & {
|
||||
source: "alpine:3.15.0@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3"
|
||||
}
|
||||
|
||||
source: engine.#Source & {
|
||||
path: "./testdata"
|
||||
}
|
||||
|
||||
verifyHello: engine.#ReadFile & {
|
||||
input: source.output
|
||||
path: "/world.txt"
|
||||
} & {
|
||||
// assert result
|
||||
contents: "world\n"
|
||||
}
|
||||
}
|
||||
}
|
1
tests/tasks/source/testdata/world.txt
vendored
Normal file
1
tests/tasks/source/testdata/world.txt
vendored
Normal file
@ -0,0 +1 @@
|
||||
world
|
Reference in New Issue
Block a user