From dcef2958cf14042799d37bd78d13bae567ab2f68 Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Thu, 27 Jan 2022 12:15:32 -0700 Subject: [PATCH 1/5] Use image.config in `docker.#Run` Signed-off-by: Joel Longtine --- pkg/universe.dagger.io/docker/run.cue | 46 ++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/pkg/universe.dagger.io/docker/run.cue b/pkg/universe.dagger.io/docker/run.cue index 02fd2de9..0eedc34d 100644 --- a/pkg/universe.dagger.io/docker/run.cue +++ b/pkg/universe.dagger.io/docker/run.cue @@ -2,6 +2,7 @@ package docker import ( "list" + "strings" "dagger.io/dagger" "dagger.io/dagger/engine" @@ -36,7 +37,7 @@ import ( } // Command to execute - cmd: { + cmd?: { // Name of the command to execute // Examples: "ls", "/bin/bash" name: string @@ -83,7 +84,7 @@ import ( // Username or UID to ad // User identity for this command // Examples: "root", "0", "1002" - user: string | *"root" + user: string // Output fields { @@ -129,12 +130,41 @@ import ( // Actually execute the command _exec: engine.#Exec & { - args: [cmd.name] + cmd._flatFlags + cmd.args - input: _image.rootfs - "always": always - "mounts": mounts - "env": env + input: _image.rootfs + "always": always + "mounts": mounts + + if cmd != _|_ { + args: [cmd.name] + cmd._flatFlags + cmd.args + } + if cmd == _|_ { + args: list.Concat([ + if _image.config.Entrypoint != _|_ { + _image.config.Entrypoint + }, + if _image.config.Cmd != _|_ { + _image.config.Cmd + }, + ]) + } + "env": env + if _image.config.Env != _|_ { + for _, envvar in _image.config.Env { + let split = strings.SplitN(envvar, "=", 2) + let k = split[0] + let v = split[1] + if env[k] == _|_ { + "env": "\(k)": v + } + } + } "workdir": workdir - "user": user + if workdir == _|_ && _image.config.WorkingDir != _|_ { + "workdir": _image.config.WorkingDir + } + "user": user + if user == _|_ && _image.config.User != _|_ { + "user": _image.config.User + } } } From 6db42168e4c6591f877c89d4e0bcd2918238f50b Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Thu, 27 Jan 2022 13:21:08 -0700 Subject: [PATCH 2/5] Tests! Signed-off-by: Joel Longtine --- pkg/universe.dagger.io/docker/run.cue | 2 +- .../docker/test/docker.bats | 1 + .../docker/test/image-config-test.cue | 80 +++++++++++++++++++ 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 pkg/universe.dagger.io/docker/test/image-config-test.cue diff --git a/pkg/universe.dagger.io/docker/run.cue b/pkg/universe.dagger.io/docker/run.cue index 0eedc34d..57a833b1 100644 --- a/pkg/universe.dagger.io/docker/run.cue +++ b/pkg/universe.dagger.io/docker/run.cue @@ -79,7 +79,7 @@ import ( // Working directory for the command // Example: "/src" - workdir: string | *"/" + workdir: string // Username or UID to ad // User identity for this command diff --git a/pkg/universe.dagger.io/docker/test/docker.bats b/pkg/universe.dagger.io/docker/test/docker.bats index 2ab65b5d..8b7abe8c 100644 --- a/pkg/universe.dagger.io/docker/test/docker.bats +++ b/pkg/universe.dagger.io/docker/test/docker.bats @@ -17,4 +17,5 @@ setup() { dagger up ./run-script-test.cue dagger up ./run-export-file-test.cue dagger up ./run-export-directory-test.cue + dagger up ./image-config-test.cue } diff --git a/pkg/universe.dagger.io/docker/test/image-config-test.cue b/pkg/universe.dagger.io/docker/test/image-config-test.cue new file mode 100644 index 00000000..aa162362 --- /dev/null +++ b/pkg/universe.dagger.io/docker/test/image-config-test.cue @@ -0,0 +1,80 @@ +package docker + +import ( + "dagger.io/dagger" + "dagger.io/dagger/engine" + "universe.dagger.io/docker" +) + +dagger.#Plan & { + actions: { + build: engine.#Dockerfile & { + source: engine.#Scratch + dockerfile: contents: """ + FROM alpine:3.15.0 + RUN echo -n 'not hello from dagger' > /dagger.txt + RUN echo '#!/bin/sh' > /bin/dagger + ENV HELLO_FROM=dagger + RUN echo 'echo -n "hello from $HELLO_FROM" > /dagger.txt' >> /bin/dagger + RUN chmod +x /bin/dagger + WORKDIR /bin + CMD /bin/dagger + """ + } + myimage: docker.#Image & { + rootfs: build.output + config: build.config + } + run: docker.#Run & { + image: myimage + cmd: { + name: "ls" + } + export: files: { + "/dagger.txt": _ & { + contents: "not hello from dagger" + } + "/bin/dagger": _ & { + contents: """ + #!/bin/sh + echo -n "hello from $HELLO_FROM" > /dagger.txt + + """ + } + } + } + verify_cmd_is_run: docker.#Run & { + image: myimage + export: files: "/dagger.txt": _ & { + contents: "hello from dagger" + } + } + verify_env_is_overridden: docker.#Run & { + image: myimage + export: files: "/dagger.txt": _ & { + contents: "hello from europa" + } + env: HELLO_FROM: "europa" + } + + verify_working_directory: docker.#Run & { + image: myimage + script: #""" + pwd > dir.txt + """# + export: files: "/bin/dir.txt": _ & { + contents: "/bin\n" + } + } + verify_working_directory_is_overridden: docker.#Run & { + image: myimage + workdir: "/" + script: #""" + pwd > dir.txt + """# + export: files: "/dir.txt": _ & { + contents: "/\n" + } + } + } +} From 0de625e1c355caa6ff2e13885106170c48cb51c7 Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Thu, 27 Jan 2022 13:27:28 -0700 Subject: [PATCH 3/5] cue fmt Signed-off-by: Joel Longtine --- pkg/universe.dagger.io/docker/run.cue | 6 +++--- pkg/universe.dagger.io/docker/test/image-config-test.cue | 4 +--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pkg/universe.dagger.io/docker/run.cue b/pkg/universe.dagger.io/docker/run.cue index 57a833b1..c7ecf876 100644 --- a/pkg/universe.dagger.io/docker/run.cue +++ b/pkg/universe.dagger.io/docker/run.cue @@ -154,17 +154,17 @@ import ( let k = split[0] let v = split[1] if env[k] == _|_ { - "env": "\(k)": v + env: "\(k)": v } } } "workdir": workdir if workdir == _|_ && _image.config.WorkingDir != _|_ { - "workdir": _image.config.WorkingDir + workdir: _image.config.WorkingDir } "user": user if user == _|_ && _image.config.User != _|_ { - "user": _image.config.User + user: _image.config.User } } } diff --git a/pkg/universe.dagger.io/docker/test/image-config-test.cue b/pkg/universe.dagger.io/docker/test/image-config-test.cue index aa162362..934867f4 100644 --- a/pkg/universe.dagger.io/docker/test/image-config-test.cue +++ b/pkg/universe.dagger.io/docker/test/image-config-test.cue @@ -27,9 +27,7 @@ dagger.#Plan & { } run: docker.#Run & { image: myimage - cmd: { - name: "ls" - } + cmd: name: "ls" export: files: { "/dagger.txt": _ & { contents: "not hello from dagger" From b0b84db5e859f6138c1c3bff3ff540d1f0e3fb93 Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Fri, 28 Jan 2022 10:59:09 -0700 Subject: [PATCH 4/5] Close #ImageConfig Signed-off-by: Joel Longtine --- pkg/dagger.io/dagger/engine/image.cue | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/dagger.io/dagger/engine/image.cue b/pkg/dagger.io/dagger/engine/image.cue index acd0cf30..8bef27ab 100644 --- a/pkg/dagger.io/dagger/engine/image.cue +++ b/pkg/dagger.io/dagger/engine/image.cue @@ -46,7 +46,6 @@ package engine label?: [string]: string healthcheck?: #HealthCheck shell?: [...string] - ... } #HealthCheck: { From cc54aa6795ef4201e9a8e6f549e9a9f006ca4b1c Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Fri, 28 Jan 2022 11:15:44 -0700 Subject: [PATCH 5/5] Clean up changes from #1505 Signed-off-by: Joel Longtine --- pkg/dagger.io/dagger/engine/image.cue | 4 ++++ pkg/universe.dagger.io/docker/run.cue | 28 ++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/pkg/dagger.io/dagger/engine/image.cue b/pkg/dagger.io/dagger/engine/image.cue index 8bef27ab..ae346903 100644 --- a/pkg/dagger.io/dagger/engine/image.cue +++ b/pkg/dagger.io/dagger/engine/image.cue @@ -44,7 +44,11 @@ package engine volume?: [string]: {} workdir?: string label?: [string]: string + stopsignal?: string healthcheck?: #HealthCheck + argsescaped?: bool + onbuild?: [...string] + stoptimeout?: int shell?: [...string] } diff --git a/pkg/universe.dagger.io/docker/run.cue b/pkg/universe.dagger.io/docker/run.cue index c7ecf876..b95640bc 100644 --- a/pkg/universe.dagger.io/docker/run.cue +++ b/pkg/universe.dagger.io/docker/run.cue @@ -2,7 +2,6 @@ package docker import ( "list" - "strings" "dagger.io/dagger" "dagger.io/dagger/engine" @@ -139,32 +138,29 @@ import ( } if cmd == _|_ { args: list.Concat([ - if _image.config.Entrypoint != _|_ { - _image.config.Entrypoint + if _image.config.entrypoint != _|_ { + _image.config.entrypoint }, - if _image.config.Cmd != _|_ { - _image.config.Cmd + if _image.config.cmd != _|_ { + _image.config.cmd }, ]) } "env": env - if _image.config.Env != _|_ { - for _, envvar in _image.config.Env { - let split = strings.SplitN(envvar, "=", 2) - let k = split[0] - let v = split[1] - if env[k] == _|_ { - env: "\(k)": v + if _image.config.env != _|_ { + for key, val in _image.config.env { + if env[key] == _|_ { + env: "\(key)": val } } } "workdir": workdir - if workdir == _|_ && _image.config.WorkingDir != _|_ { - workdir: _image.config.WorkingDir + if workdir == _|_ && _image.config.workdir != _|_ { + workdir: _image.config.workdir } "user": user - if user == _|_ && _image.config.User != _|_ { - user: _image.config.User + if user == _|_ && _image.config.user != _|_ { + user: _image.config.user } } }