engine: Support plan outputs
Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
parent
3e5ce6df26
commit
2f1f055141
43
plan/task/outputdirectory.go
Normal file
43
plan/task/outputdirectory.go
Normal 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
|
||||||
|
}
|
@ -82,7 +82,7 @@ _#inputSecret: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_#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
|
||||||
|
@ -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
1
tests/plan/outputs/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
out
|
21
tests/plan/outputs/outputs.cue
Normal file
21
tests/plan/outputs/outputs.cue
Normal 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"
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user