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: {
|
||||
@dagger(notimplemented)
|
||||
$dagger: task: _name: "OutputDirectory"
|
||||
|
||||
// Filesystem contents to export
|
||||
// Reference an #FS field produced by an action
|
||||
|
@ -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
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