This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
dagger/europa/universe/docker/build.cue
Solomon Hykes e7f1649fe6 A new CUE standard library for the Europa release
Signed-off-by: Solomon Hykes <solomon@dagger.io>
2021-12-13 13:24:45 -08:00

98 lines
1.6 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 {
// 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
}
}
// 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
}
}