Merge pull request #1808 from helderco/run-entrypoint
Add entrypoint field to `docker.#Run`
This commit is contained in:
commit
323f01278a
@ -26,6 +26,9 @@ import (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Entrypoint to prepend to command
|
||||||
|
entrypoint?: [...string]
|
||||||
|
|
||||||
// Command to execute
|
// Command to execute
|
||||||
command?: {
|
command?: {
|
||||||
// Name of the command to execute
|
// Name of the command to execute
|
||||||
@ -65,6 +68,37 @@ import (
|
|||||||
// Examples: "root", "0", "1002"
|
// Examples: "root", "0", "1002"
|
||||||
user: string
|
user: string
|
||||||
|
|
||||||
|
// Add defaults to image config
|
||||||
|
// This ensures these values are present
|
||||||
|
_defaults: dagger.#Set & {
|
||||||
|
"input": {
|
||||||
|
entrypoint: []
|
||||||
|
cmd: []
|
||||||
|
workdir: "/"
|
||||||
|
user: "root"
|
||||||
|
}
|
||||||
|
config: input.config
|
||||||
|
}
|
||||||
|
|
||||||
|
// Override with user config
|
||||||
|
_config: dagger.#Set & {
|
||||||
|
input: _defaults.output
|
||||||
|
config: {
|
||||||
|
if entrypoint != _|_ {
|
||||||
|
"entrypoint": entrypoint
|
||||||
|
}
|
||||||
|
if command != _|_ {
|
||||||
|
cmd: [command.name] + command._flatFlags + command.args
|
||||||
|
}
|
||||||
|
if workdir != _|_ {
|
||||||
|
"workdir": workdir
|
||||||
|
}
|
||||||
|
if user != _|_ {
|
||||||
|
"user": user
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Output fields
|
// Output fields
|
||||||
{
|
{
|
||||||
// Has the command completed?
|
// Has the command completed?
|
||||||
@ -129,21 +163,11 @@ import (
|
|||||||
"input": input.rootfs
|
"input": input.rootfs
|
||||||
"always": always
|
"always": always
|
||||||
"mounts": mounts
|
"mounts": mounts
|
||||||
|
args: _config.output.entrypoint + _config.output.cmd
|
||||||
if command != _|_ {
|
workdir: _config.output.workdir
|
||||||
args: [command.name] + command._flatFlags + command.args
|
user: _config.output.user
|
||||||
}
|
|
||||||
if command == _|_ {
|
|
||||||
args: list.Concat([
|
|
||||||
if input.config.entrypoint != _|_ {
|
|
||||||
input.config.entrypoint
|
|
||||||
},
|
|
||||||
if input.config.cmd != _|_ {
|
|
||||||
input.config.cmd
|
|
||||||
},
|
|
||||||
])
|
|
||||||
}
|
|
||||||
"env": env
|
"env": env
|
||||||
|
// env may contain secrets so we can't use dagger.#Set
|
||||||
if input.config.env != _|_ {
|
if input.config.env != _|_ {
|
||||||
for key, val in input.config.env {
|
for key, val in input.config.env {
|
||||||
if env[key] == _|_ {
|
if env[key] == _|_ {
|
||||||
@ -151,14 +175,6 @@ import (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"workdir": workdir
|
|
||||||
if workdir == _|_ && input.config.workdir != _|_ {
|
|
||||||
workdir: input.config.workdir
|
|
||||||
}
|
|
||||||
"user": user
|
|
||||||
if user == _|_ && input.config.user != _|_ {
|
|
||||||
user: input.config.user
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Command exit code
|
// Command exit code
|
||||||
|
@ -9,13 +9,13 @@ import (
|
|||||||
|
|
||||||
dagger.#Plan & {
|
dagger.#Plan & {
|
||||||
actions: test: run: {
|
actions: test: run: {
|
||||||
_build: alpine.#Build
|
_build: alpine.#Build & {
|
||||||
|
packages: bash: _
|
||||||
|
}
|
||||||
_image: _build.output
|
_image: _build.output
|
||||||
|
|
||||||
// Test: run a simple shell command
|
// Test: run a simple shell command
|
||||||
simpleShell: {
|
simpleShell: {
|
||||||
image: alpine.#Build
|
|
||||||
|
|
||||||
run: docker.#Run & {
|
run: docker.#Run & {
|
||||||
input: _image
|
input: _image
|
||||||
command: {
|
command: {
|
||||||
@ -65,5 +65,43 @@ dagger.#Plan & {
|
|||||||
}
|
}
|
||||||
verify: contents: "hello world"
|
verify: contents: "hello world"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Test: configs overriding image defaults
|
||||||
|
configs: {
|
||||||
|
_base: docker.#Set & {
|
||||||
|
input: _image
|
||||||
|
config: {
|
||||||
|
user: "nobody"
|
||||||
|
workdir: "/sbin"
|
||||||
|
entrypoint: ["sh"]
|
||||||
|
cmd: ["-c", "echo -n $0 $PWD $(whoami) > /tmp/output.txt"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// check defaults not overriden by image config
|
||||||
|
runDefaults: docker.#Run & {
|
||||||
|
input: _image
|
||||||
|
command: {
|
||||||
|
name: "sh"
|
||||||
|
flags: "-c": "echo -n $PWD $(whoami) > /output.txt"
|
||||||
|
}
|
||||||
|
export: files: "/output.txt": "/ root"
|
||||||
|
}
|
||||||
|
|
||||||
|
// check image defaults
|
||||||
|
imageDefaults: docker.#Run & {
|
||||||
|
input: _base.output
|
||||||
|
export: files: "/tmp/output.txt": "sh /sbin nobody"
|
||||||
|
}
|
||||||
|
|
||||||
|
// check overrides by user
|
||||||
|
overrides: docker.#Run & {
|
||||||
|
input: _base.output
|
||||||
|
entrypoint: ["bash"]
|
||||||
|
workdir: "/root"
|
||||||
|
user: "root"
|
||||||
|
export: files: "/tmp/output.txt": "bash /root root"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user