diff --git a/pkg/dagger.io/dagger/engine/image.cue b/pkg/dagger.io/dagger/engine/image.cue index 536e19b1..39e2fbb0 100644 --- a/pkg/dagger.io/dagger/engine/image.cue +++ b/pkg/dagger.io/dagger/engine/image.cue @@ -68,39 +68,35 @@ package engine config: #ImageConfig } -// Build a container image using buildkit -// FIXME: rename to #Dockerfile to clarify scope -#Build: { - $dagger: task: _name: "Build" +// Build a container image using a Dockerfile +#Dockerfile: { + $dagger: task: _name: "Dockerfile" // Source directory to build source: #FS - { - frontend: "dockerfile" - dockerfile: { - path: string | *"Dockerfile" - } | { - contents: string - } - // Authentication - auth: [...{ - target: string - username: string - secret: string | #Secret - }] - - // FIXME: options ported from op.#DockerBuild - platforms?: [...string] - target?: string - buildArg?: [string]: string - label?: [string]: string - hosts?: [string]: string + dockerfile: *{ + path: string | *"Dockerfile" + } | { + contents: string } - // Root filesystem produced by build + // Authentication + auth: [...{ + target: string + username: string + secret: string | #Secret + }] + + platforms?: [...string] + target?: string + buildArg?: [string]: string + label?: [string]: string + hosts?: [string]: string + + // Root filesystem produced output: #FS - // Container image config produced by build + // Container image config produced config: #ImageConfig } diff --git a/plan/task/build.go b/plan/task/dockerfile.go similarity index 86% rename from plan/task/build.go rename to plan/task/dockerfile.go index a7fe22f3..c9c4e5d0 100644 --- a/plan/task/build.go +++ b/plan/task/dockerfile.go @@ -22,27 +22,13 @@ import ( ) func init() { - Register("Build", func() Task { return &buildTask{} }) + Register("Dockerfile", func() Task { return &dockerfileTask{} }) } -type buildTask struct { +type dockerfileTask struct { } -func (t *buildTask) Run(ctx context.Context, pctx *plancontext.Context, s solver.Solver, v *compiler.Value) (*compiler.Value, error) { - frontend, err := v.Lookup("frontend").String() - if err != nil { - return nil, err - } - - switch frontend { - case "dockerfile": - return t.dockerfile(ctx, pctx, s, v) - default: - return nil, fmt.Errorf("unsupported frontend %q", frontend) - } -} - -func (t *buildTask) dockerfile(ctx context.Context, pctx *plancontext.Context, s solver.Solver, v *compiler.Value) (*compiler.Value, error) { +func (t *dockerfileTask) Run(ctx context.Context, pctx *plancontext.Context, s solver.Solver, v *compiler.Value) (*compiler.Value, error) { lg := log.Ctx(ctx) // Read auth info @@ -144,7 +130,7 @@ func (t *buildTask) dockerfile(ctx context.Context, pctx *plancontext.Context, s }) } -func (t *buildTask) dockerBuildOpts(v *compiler.Value, pctx *plancontext.Context) (map[string]string, error) { +func (t *dockerfileTask) dockerBuildOpts(v *compiler.Value, pctx *plancontext.Context) (map[string]string, error) { opts := map[string]string{} if dockerfilePath := v.Lookup("dockerfile.path"); dockerfilePath.Exists() { diff --git a/tests/tasks.bats b/tests/tasks.bats index b7d942e9..31b02f38 100644 --- a/tests/tasks.bats +++ b/tests/tasks.bats @@ -75,19 +75,18 @@ setup() { assert_failure } -@test "task: #Build" { - cd "$TESTDIR"/tasks/build +@test "task: #Dockerfile" { + cd "$TESTDIR"/tasks/dockerfile "$DAGGER" --europa up ./dockerfile.cue "$DAGGER" --europa up ./inlined_dockerfile.cue + "$DAGGER" --europa up ./inlined_dockerfile_heredoc.cue "$DAGGER" --europa up ./dockerfile_path.cue "$DAGGER" --europa up ./build_args.cue "$DAGGER" --europa up ./image_config.cue "$DAGGER" --europa up ./labels.cue "$DAGGER" --europa up ./platform.cue - - cd "$TESTDIR" - "$DAGGER" --europa up ./tasks/build/build_auth.cue + "$DAGGER" --europa up ./build_auth.cue } @test "task: #Scratch" { cd "$TESTDIR"/tasks/scratch diff --git a/tests/tasks/copy/cue.mod/pkg/.gitignore b/tests/tasks/copy/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/copy/cue.mod/pkg/.gitignore +++ b/tests/tasks/copy/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/build/build_args.cue b/tests/tasks/dockerfile/build_args.cue similarity index 90% rename from tests/tasks/build/build_args.cue rename to tests/tasks/dockerfile/build_args.cue index 952ff96c..7a0fa1df 100644 --- a/tests/tasks/build/build_args.cue +++ b/tests/tasks/dockerfile/build_args.cue @@ -7,7 +7,7 @@ import ( engine.#Plan & { inputs: directories: testdata: path: "./testdata" - actions: build: engine.#Build & { + actions: build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: contents: """ FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d diff --git a/tests/tasks/build/build_auth.cue b/tests/tasks/dockerfile/build_auth.cue similarity index 100% rename from tests/tasks/build/build_auth.cue rename to tests/tasks/dockerfile/build_auth.cue diff --git a/tests/tasks/build/cue.mod/module.cue b/tests/tasks/dockerfile/cue.mod/module.cue similarity index 100% rename from tests/tasks/build/cue.mod/module.cue rename to tests/tasks/dockerfile/cue.mod/module.cue diff --git a/tests/tasks/build/cue.mod/pkg/.gitignore b/tests/tasks/dockerfile/cue.mod/pkg/.gitignore similarity index 64% rename from tests/tasks/build/cue.mod/pkg/.gitignore rename to tests/tasks/dockerfile/cue.mod/pkg/.gitignore index 2d4dc1ae..c88aae2e 100644 --- a/tests/tasks/build/cue.mod/pkg/.gitignore +++ b/tests/tasks/dockerfile/cue.mod/pkg/.gitignore @@ -1,3 +1,5 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock +universe.dagger.io \ No newline at end of file diff --git a/tests/tasks/build/dockerfile.cue b/tests/tasks/dockerfile/dockerfile.cue similarity index 90% rename from tests/tasks/build/dockerfile.cue rename to tests/tasks/dockerfile/dockerfile.cue index 43d47457..cdaa6cf9 100644 --- a/tests/tasks/build/dockerfile.cue +++ b/tests/tasks/dockerfile/dockerfile.cue @@ -8,7 +8,7 @@ engine.#Plan & { inputs: directories: testdata: path: "./testdata" actions: { - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents } diff --git a/tests/tasks/build/dockerfile_path.cue b/tests/tasks/dockerfile/dockerfile_path.cue similarity index 91% rename from tests/tasks/build/dockerfile_path.cue rename to tests/tasks/dockerfile/dockerfile_path.cue index dcd5add4..c15a12fc 100644 --- a/tests/tasks/build/dockerfile_path.cue +++ b/tests/tasks/dockerfile/dockerfile_path.cue @@ -8,7 +8,7 @@ engine.#Plan & { inputs: directories: testdata: path: "./testdata" actions: { - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: path: "./dockerfilepath/Dockerfile.custom" } diff --git a/tests/tasks/build/image_config.cue b/tests/tasks/dockerfile/image_config.cue similarity index 94% rename from tests/tasks/build/image_config.cue rename to tests/tasks/dockerfile/image_config.cue index b163d44e..a9d399ad 100644 --- a/tests/tasks/build/image_config.cue +++ b/tests/tasks/dockerfile/image_config.cue @@ -9,7 +9,7 @@ engine.#Plan & { actions: { // FIXME: this doesn't test anything beside not crashing - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: contents: """ FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d diff --git a/tests/tasks/build/inlined_dockerfile.cue b/tests/tasks/dockerfile/inlined_dockerfile.cue similarity index 98% rename from tests/tasks/build/inlined_dockerfile.cue rename to tests/tasks/dockerfile/inlined_dockerfile.cue index 5d3a5370..c14771fc 100644 --- a/tests/tasks/build/inlined_dockerfile.cue +++ b/tests/tasks/dockerfile/inlined_dockerfile.cue @@ -8,7 +8,7 @@ engine.#Plan & { inputs: directories: testdata: path: "./testdata" actions: { - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: contents: """ FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d diff --git a/tests/tasks/dockerfile/inlined_dockerfile_heredoc.cue b/tests/tasks/dockerfile/inlined_dockerfile_heredoc.cue new file mode 100644 index 00000000..b3e5ba06 --- /dev/null +++ b/tests/tasks/dockerfile/inlined_dockerfile_heredoc.cue @@ -0,0 +1,95 @@ +package testing + +import ( + "dagger.io/dagger/engine" +) + +engine.#Plan & { + inputs: directories: testdata: path: "./testdata" + + actions: { + build: engine.#Dockerfile & { + source: inputs.directories.testdata.contents + dockerfile: contents: """ + # syntax = docker/dockerfile:1.3 + FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d + RUN echo foobar > /output + """ + } + + verify: engine.#Exec & { + input: build.output + args: ["sh", "-c", "test $(cat /output) = foobar"] + } + } +} + +// TestDockerfilePath: #up: [ +// op.#DockerBuild & { +// context: TestData +// dockerfilePath: "./dockerfilepath/Dockerfile.custom" +// }, +// op.#Exec & { +// args: ["sh", "-c", "test $(cat /test) = dockerfilePath"] +// }, +// ] + +// TestBuildArgs: #up: [ +// op.#DockerBuild & { +// dockerfile: """ +// FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d +// ARG TEST=foo +// RUN test "${TEST}" = "bar" +// """ +// buildArg: TEST: "bar" +// }, +// ] + +// // FIXME: this doesn't test anything beside not crashing +// TestBuildLabels: #up: [ +// op.#DockerBuild & { +// dockerfile: """ +// FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d +// """ +// label: FOO: "bar" +// }, +// ] + +// // FIXME: this doesn't test anything beside not crashing +// TestBuildPlatform: #up: [ +// op.#DockerBuild & { +// dockerfile: """ +// FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d +// """ +// platforms: ["linux/amd64"] +// }, +// ] + +// TestImageMetadata: #up: [ +// op.#DockerBuild & { +// dockerfile: """ +// FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d +// ENV CHECK foobar +// ENV DOUBLECHECK test +// """ +// }, +// op.#Exec & { +// args: ["sh", "-c", #""" +// env +// test "$CHECK" = "foobar" +// """#] +// }, +// ] + +// // Make sure the metadata is carried over with a `Load` +// TestImageMetadataIndirect: #up: [ +// op.#Load & { +// from: TestImageMetadata +// }, +// op.#Exec & { +// args: ["sh", "-c", #""" +// env +// test "$DOUBLECHECK" = "test" +// """#] +// }, +// ] diff --git a/tests/tasks/build/labels.cue b/tests/tasks/dockerfile/labels.cue similarity index 92% rename from tests/tasks/build/labels.cue rename to tests/tasks/dockerfile/labels.cue index 9e74cb57..403314f9 100644 --- a/tests/tasks/build/labels.cue +++ b/tests/tasks/dockerfile/labels.cue @@ -9,7 +9,7 @@ engine.#Plan & { actions: { // FIXME: this doesn't test anything beside not crashing - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: contents: """ FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d diff --git a/tests/tasks/build/platform.cue b/tests/tasks/dockerfile/platform.cue similarity index 92% rename from tests/tasks/build/platform.cue rename to tests/tasks/dockerfile/platform.cue index 8b28c174..eeddcb38 100644 --- a/tests/tasks/build/platform.cue +++ b/tests/tasks/dockerfile/platform.cue @@ -9,7 +9,7 @@ engine.#Plan & { actions: { // FIXME: this doesn't test anything beside not crashing - build: engine.#Build & { + build: engine.#Dockerfile & { source: inputs.directories.testdata.contents dockerfile: contents: """ FROM alpine:latest@sha256:ab00606a42621fb68f2ed6ad3c88be54397f981a7b70a79db3d1172b11c4367d diff --git a/tests/tasks/build/testdata/Dockerfile b/tests/tasks/dockerfile/testdata/Dockerfile similarity index 100% rename from tests/tasks/build/testdata/Dockerfile rename to tests/tasks/dockerfile/testdata/Dockerfile diff --git a/tests/tasks/build/testdata/dockerfilepath/Dockerfile.custom b/tests/tasks/dockerfile/testdata/dockerfilepath/Dockerfile.custom similarity index 100% rename from tests/tasks/build/testdata/dockerfilepath/Dockerfile.custom rename to tests/tasks/dockerfile/testdata/dockerfilepath/Dockerfile.custom diff --git a/tests/tasks/build/testdata/foo b/tests/tasks/dockerfile/testdata/foo similarity index 100% rename from tests/tasks/build/testdata/foo rename to tests/tasks/dockerfile/testdata/foo diff --git a/tests/tasks/exec/cue.mod/pkg/.gitignore b/tests/tasks/exec/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/exec/cue.mod/pkg/.gitignore +++ b/tests/tasks/exec/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/mkdir/cue.mod/pkg/.gitignore b/tests/tasks/mkdir/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/mkdir/cue.mod/pkg/.gitignore +++ b/tests/tasks/mkdir/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/pull/cue.mod/pkg/.gitignore b/tests/tasks/pull/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/pull/cue.mod/pkg/.gitignore +++ b/tests/tasks/pull/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/readfile/cue.mod/pkg/.gitignore b/tests/tasks/readfile/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/readfile/cue.mod/pkg/.gitignore +++ b/tests/tasks/readfile/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/scratch/cue.mod/pkg/.gitignore b/tests/tasks/scratch/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/scratch/cue.mod/pkg/.gitignore +++ b/tests/tasks/scratch/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock diff --git a/tests/tasks/writefile/cue.mod/pkg/.gitignore b/tests/tasks/writefile/cue.mod/pkg/.gitignore index 2d4dc1ae..4e3cac04 100644 --- a/tests/tasks/writefile/cue.mod/pkg/.gitignore +++ b/tests/tasks/writefile/cue.mod/pkg/.gitignore @@ -1,3 +1,4 @@ # generated by dagger alpha.dagger.io +dagger.io dagger.lock