8b5a801380
Signed-off-by: Solomon Hykes <solomon@dagger.io>
111 lines
2.1 KiB
CUE
111 lines
2.1 KiB
CUE
package docker
|
|
|
|
import (
|
|
"dagger.io/dagger"
|
|
"dagger.io/dagger/engine"
|
|
)
|
|
|
|
// Modular build API for Docker containers
|
|
#Build: {
|
|
steps: [#Step, ...#Step]
|
|
output: #Image
|
|
|
|
// Generate build DAG from linerar steps
|
|
dag: {
|
|
for idx, step in steps {
|
|
///// FIXME: this section is broken and in the middle of debug + rewrite
|
|
//// // 1. image -> input
|
|
//// if (step.input == _|_) && ((step.image & #Image) != _|_) {
|
|
//// input: image
|
|
//// }
|
|
|
|
//// // 2.
|
|
//// if ((step.output & docker.#Image) == _|_) && ((step.output.rootfs & dagger.#FS) != _|_) {
|
|
////
|
|
//// }
|
|
|
|
//// // As a special case, wrap #Run into a valid step
|
|
//// if step.run != _|_ {
|
|
//// "\(idx)": {
|
|
//// input: _
|
|
//// run: step & {
|
|
//// image: input
|
|
//// output: rootfs: _
|
|
//// }
|
|
//// output: {
|
|
//// config: input.config
|
|
//// rootfs: run.output.rootfs
|
|
//// }
|
|
//// }
|
|
//// }
|
|
|
|
//// // Otherwise, just use the step as is
|
|
//// if step.run == _|_ {
|
|
//// "\(idx)": {
|
|
//// run: false
|
|
//// step
|
|
//// }
|
|
//// }
|
|
|
|
"\(idx)": step
|
|
|
|
// Either way, connect input to previous output
|
|
if idx > 0 {
|
|
"\(idx)": input: dag["\(idx-1)"].output
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(dag) > 0 {
|
|
output: dag["\(len(dag)-1)"].output
|
|
}
|
|
}
|
|
|
|
// A build step is anything that produces a docker image
|
|
#Step: {
|
|
input?: #Image
|
|
output: #Image
|
|
...
|
|
} | #Run
|
|
|
|
// Build step that copies files into the container image
|
|
#Copy: {
|
|
input: #Image
|
|
contents: dagger.#FS
|
|
source: string | *"/"
|
|
dest: string | *"/"
|
|
|
|
// Execute copy operation
|
|
copy: engine.#Copy & {
|
|
"input": input.rootfs
|
|
"source": {
|
|
root: contents
|
|
path: source
|
|
}
|
|
dest: copy.dest
|
|
}
|
|
|
|
output: #Image & {
|
|
config: input.config
|
|
rootfs: copy.output
|
|
}
|
|
}
|
|
|
|
// Build step that executes a Dockerfile
|
|
#Dockerfile: {
|
|
// Source directory
|
|
source: dagger.#FS
|
|
|
|
// FIXME: not yet implemented
|
|
*{
|
|
// Look for Dockerfile in source at default path
|
|
path: "Dockerfile"
|
|
} | {
|
|
// Look for Dockerfile in source at a custom path
|
|
path: string
|
|
} | {
|
|
// Custom dockerfile contents
|
|
contents: string
|
|
}
|
|
}
|