engine: Support plan outputs

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
Andrea Luzzardi 2021-12-22 15:03:54 +01:00
parent 3e5ce6df26
commit 2f1f055141
5 changed files with 74 additions and 1 deletions

View File

@ -0,0 +1,43 @@
package task
import (
"context"
bk "github.com/moby/buildkit/client"
"go.dagger.io/dagger/compiler"
"go.dagger.io/dagger/plancontext"
"go.dagger.io/dagger/solver"
)
func init() {
Register("OutputDirectory", func() Task { return &outputDirectoryTask{} })
}
type outputDirectoryTask struct {
}
func (c outputDirectoryTask) Run(ctx context.Context, pctx *plancontext.Context, s solver.Solver, v *compiler.Value) (*compiler.Value, error) {
contents, err := pctx.FS.FromValue(v.Lookup("contents"))
if err != nil {
return nil, err
}
dest, err := v.Lookup("dest").String()
if err != nil {
return nil, err
}
st, err := contents.Result().ToState()
if err != nil {
return nil, err
}
_, err = s.Export(ctx, st, nil, bk.ExportEntry{
Type: bk.ExporterLocal,
OutputDir: dest,
}, pctx.Platform.Get())
if err != nil {
return nil, err
}
return compiler.NewValue(), nil
}

View File

@ -82,7 +82,7 @@ _#inputSecret: {
}
_#outputDirectory: {
@dagger(notimplemented)
$dagger: task: _name: "OutputDirectory"
// Filesystem contents to export
// Reference an #FS field produced by an action

View File

@ -69,3 +69,11 @@ setup() {
assert_failure
assert_output --partial 'failed: exec: "rtyet": executable file not found'
}
@test "plan/outputs" {
cd "$TESTDIR"/plan/outputs
rm -f "./out/test"
"$DAGGER" --europa up ./outputs.cue
assert [ -f "./out/test" ]
}

1
tests/plan/outputs/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
out

View File

@ -0,0 +1,21 @@
package main
import "alpha.dagger.io/europa/dagger/engine"
engine.#Plan & {
actions: {
scratch: engine.#Scratch
data: engine.#WriteFile & {
input: scratch.output
path: "/test"
mode: 0o600
contents: "foobar"
}
}
outputs: directories: test: {
contents: actions.data.output
dest: "./out"
}
}