Merge pull request #1527 from aluzzardi/source-relpath

engine.#Source: Fix relative path support
This commit is contained in:
Andrea Luzzardi 2022-01-28 15:21:14 -08:00 committed by GitHub
commit a850f54533
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 50 additions and 18 deletions

View File

@ -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)

View File

@ -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

View File

@ -1,5 +1,5 @@
# generated by dagger
dagger.lock
alpha.dagger.io
dagger.io
dagger.lock
universe.dagger.io

View File

@ -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"
}
}
}

View File

@ -11,7 +11,7 @@ engine.#Plan & {
}
source: engine.#Source & {
path: ".."
path: "testdata/../.."
}
}
}

View 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
View File

@ -0,0 +1 @@
world