Skip to content

Commit

Permalink
engine.#Source: Fix relative path support
Browse files Browse the repository at this point in the history
Fixes #1492

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
  • Loading branch information
aluzzardi committed Jan 28, 2022
1 parent 49e7f28 commit 3a90542
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 14 deletions.
19 changes: 12 additions & 7 deletions plan/task/source.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"context"
"errors"
"fmt"
"io/fs"
"os"
"strings"

"github.com/moby/buildkit/client/llb"
"github.com/rs/zerolog/log"
Expand All @@ -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
}

absPath, err := v.Lookup("path").AbsPath()
location, err := v.Lookup("path").Dirname()
if err != nil {
return err
}

if _, err := os.Stat(path); errors.Is(err, os.ErrNotExist) {
return fmt.Errorf("path %q does not exist", path)
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)
Expand Down
1 change: 1 addition & 0 deletions tests/tasks.bats
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion tests/tasks/dockerfile/cue.mod/pkg/.gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# generated by dagger
dagger.lock
alpha.dagger.io
dagger.io
dagger.lock
universe.dagger.io
10 changes: 5 additions & 5 deletions tests/tasks/source/source.cue
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,18 @@ engine.#Plan & {

verifyHello: engine.#ReadFile & {
input: source.output
path: "/hello.txt"
path: "/world.txt"
} & {
// assert result
contents: "hello\n"
contents: "world\n"
}

verifyWorld: engine.#ReadFile & {
input: source.output
path: "/world.txt"
input: exec.output
path: "/test.txt"
} & {
// assert result
contents: "world\n"
contents: "hello world"
}
}
}
2 changes: 1 addition & 1 deletion tests/tasks/source/source_invalid_path.cue
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ engine.#Plan & {
}

source: engine.#Source & {
path: ".."
path: "testdata/../.."
}
}
}
25 changes: 25 additions & 0 deletions tests/tasks/source/source_relative.cue
Original file line number Diff line number Diff line change
@@ -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 change: 1 addition & 0 deletions tests/tasks/source/testdata/world.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
world

0 comments on commit 3a90542

Please sign in to comment.