Merge pull request #1289 from aluzzardi/plan-output

engine: Support plan outputs
This commit is contained in:
Sam Alba 2021-12-22 10:47:52 -08:00 committed by GitHub
commit 75711545ef
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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

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

View File

@ -69,3 +69,11 @@ setup() {
assert_failure assert_failure
assert_output --partial 'failed: exec: "rtyet": executable file not found' 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"
}
}