Merge pull request #1517 from jlongtine/docker-run-image-config

Use image.config in `docker.#Run`
This commit is contained in:
Joel Longtine 2022-01-28 11:31:16 -07:00 committed by GitHub
commit afb64e926f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 118 additions and 10 deletions

View File

@ -44,9 +44,12 @@ package engine
volume?: [string]: {} volume?: [string]: {}
workdir?: string workdir?: string
label?: [string]: string label?: [string]: string
stopsignal?: string
healthcheck?: #HealthCheck healthcheck?: #HealthCheck
argsescaped?: bool
onbuild?: [...string]
stoptimeout?: int
shell?: [...string] shell?: [...string]
...
} }
#HealthCheck: { #HealthCheck: {

View File

@ -36,7 +36,7 @@ import (
} }
// Command to execute // Command to execute
cmd: { cmd?: {
// Name of the command to execute // Name of the command to execute
// Examples: "ls", "/bin/bash" // Examples: "ls", "/bin/bash"
name: string name: string
@ -78,12 +78,12 @@ import (
// Working directory for the command // Working directory for the command
// Example: "/src" // Example: "/src"
workdir: string | *"/" workdir: string
// Username or UID to ad // Username or UID to ad
// User identity for this command // User identity for this command
// Examples: "root", "0", "1002" // Examples: "root", "0", "1002"
user: string | *"root" user: string
// Output fields // Output fields
{ {
@ -129,12 +129,38 @@ import (
// Actually execute the command // Actually execute the command
_exec: engine.#Exec & { _exec: engine.#Exec & {
args: [cmd.name] + cmd._flatFlags + cmd.args input: _image.rootfs
input: _image.rootfs "always": always
"always": always "mounts": mounts
"mounts": mounts
"env": env 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 key, val in _image.config.env {
if env[key] == _|_ {
env: "\(key)": val
}
}
}
"workdir": workdir "workdir": workdir
"user": user if workdir == _|_ && _image.config.workdir != _|_ {
workdir: _image.config.workdir
}
"user": user
if user == _|_ && _image.config.user != _|_ {
user: _image.config.user
}
} }
} }

View File

@ -17,4 +17,5 @@ setup() {
dagger up ./run-script-test.cue dagger up ./run-script-test.cue
dagger up ./run-export-file-test.cue dagger up ./run-export-file-test.cue
dagger up ./run-export-directory-test.cue dagger up ./run-export-directory-test.cue
dagger up ./image-config-test.cue
} }

View File

@ -0,0 +1,78 @@
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"
}
}
}
}