Simplify "dev dagger with dagger" example
Signed-off-by: Solomon Hykes <sh.github.6811@hykes.org>
This commit is contained in:
parent
6673ae69b3
commit
299a38c6b1
67
dev.cue
67
dev.cue
@ -1,8 +1,6 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strings"
|
|
||||||
|
|
||||||
"dagger.io/dagger"
|
"dagger.io/dagger"
|
||||||
"dagger.io/alpine"
|
"dagger.io/alpine"
|
||||||
)
|
)
|
||||||
@ -10,13 +8,12 @@ import (
|
|||||||
// Dagger source code
|
// Dagger source code
|
||||||
source: dagger.#Artifact
|
source: dagger.#Artifact
|
||||||
|
|
||||||
// Go environment
|
build: #Container & {
|
||||||
goenv: #Container & {
|
image: #ImageFromRef & {ref: "docker.io/golang:1.16-alpine"}
|
||||||
image: #ImageFromRef & {
|
|
||||||
ref: "docker.io/golang:1.16-alpine"
|
|
||||||
}
|
|
||||||
|
|
||||||
setup: "apk add --no-cache file"
|
setup: [
|
||||||
|
"apk add --no-cache file",
|
||||||
|
]
|
||||||
|
|
||||||
volume: {
|
volume: {
|
||||||
daggerSource: {
|
daggerSource: {
|
||||||
@ -28,53 +25,31 @@ goenv: #Container & {
|
|||||||
dest: "/root/.cache/gocache"
|
dest: "/root/.cache/gocache"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add go to search path (FIXME: should be inherited from image metadata)
|
||||||
|
shell: search: "/usr/local/go/bin": true
|
||||||
|
|
||||||
env: {
|
env: {
|
||||||
GOMODCACHE: volume.goCache.dest
|
GOMODCACHE: volume.goCache.dest
|
||||||
CGO_ENABLED: "0"
|
CGO_ENABLED: "0"
|
||||||
|
}
|
||||||
|
|
||||||
let pathPrefixes = ["/", "/usr/", "/usr/local/", "/usr/local/go/"]
|
|
||||||
PATH: strings.Join([
|
|
||||||
for prefix in pathPrefixes {prefix + "sbin"},
|
|
||||||
for prefix in pathPrefixes {prefix + "bin"},
|
|
||||||
], ":")
|
|
||||||
}
|
|
||||||
command: {
|
|
||||||
debug: {
|
|
||||||
args: ["env"]
|
|
||||||
always: true
|
|
||||||
}
|
|
||||||
test: {
|
|
||||||
dir: "/src"
|
dir: "/src"
|
||||||
args: ["go", "test", "-v", "/src/..."]
|
|
||||||
}
|
|
||||||
build: {
|
|
||||||
dir: "/src"
|
|
||||||
args: ["go", "build", "-o", "/binaries/", "/src/cmd/..."]
|
|
||||||
outputDir: "/binaries"
|
outputDir: "/binaries"
|
||||||
}
|
command: """
|
||||||
}
|
go test -v ./...
|
||||||
|
go build -o /binaries/ ./cmd/...
|
||||||
|
"""
|
||||||
}
|
}
|
||||||
|
|
||||||
runner: #Container & {
|
usage: #Container & {
|
||||||
image: alpine.#Image & {
|
image: alpine.#Image
|
||||||
package: make: true
|
|
||||||
}
|
|
||||||
|
|
||||||
volume: daggerBinaries: {
|
volume: binaries: {
|
||||||
from: goenv.command.build
|
from: build
|
||||||
dest: "/usr/local/dagger/bin"
|
dest: "/usr/local/dagger/bin/"
|
||||||
}
|
}
|
||||||
env: PATH: "/bin:/usr/bin:/usr/local/bin:/usr/local/dagger/bin"
|
shell: search: "/usr/local/dagger/bin": true
|
||||||
|
|
||||||
command: {
|
command: "dagger help"
|
||||||
// Run `dagger help`
|
|
||||||
usage: args: ["dagger", "help"]
|
|
||||||
// FIXME: run integration tests
|
|
||||||
|
|
||||||
// Just a debug command to check that this config works
|
|
||||||
debug: {
|
|
||||||
args: ["env"]
|
|
||||||
env: FOO: "BAR"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
47
docker.cue
47
docker.cue
@ -1,6 +1,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
"dagger.io/dagger"
|
"dagger.io/dagger"
|
||||||
"dagger.io/dagger/op"
|
"dagger.io/dagger/op"
|
||||||
)
|
)
|
||||||
@ -41,8 +43,8 @@ import (
|
|||||||
|
|
||||||
image: dagger.#Artifact
|
image: dagger.#Artifact
|
||||||
|
|
||||||
// Optional setup script
|
// Optional setup scripts
|
||||||
setup: string | *null
|
setup: [...string]
|
||||||
|
|
||||||
// Environment variables shared by all commands
|
// Environment variables shared by all commands
|
||||||
env: [string]: string
|
env: [string]: string
|
||||||
@ -62,17 +64,30 @@ import (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
command: [name=string]: {
|
shell: {
|
||||||
args: [...string]
|
path: string | *"/bin/sh"
|
||||||
dir: string | *"/"
|
args: [...string] | *["-c"]
|
||||||
"env": env & {
|
search: [string]: bool
|
||||||
[string]: string
|
search: {
|
||||||
|
"/sbin": true
|
||||||
|
"/bin": true
|
||||||
|
"/usr/sbin": true
|
||||||
|
"/usr/bin": true
|
||||||
|
"/usr/local/sbin": true
|
||||||
|
"/usr/local/bin": true
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
env: PATH: string | *strings.Join([ for p, v in shell.search if v {p}], ":")
|
||||||
|
|
||||||
|
command: string
|
||||||
|
|
||||||
|
dir: string | *"/"
|
||||||
|
|
||||||
|
env: [string]: string
|
||||||
|
|
||||||
outputDir: string | *"/"
|
outputDir: string | *"/"
|
||||||
always: true | *false
|
always: true | *false
|
||||||
|
|
||||||
// Execute each command in a pristine filesystem state
|
|
||||||
// (commands do not interfere with each other's changes)
|
|
||||||
#up: [
|
#up: [
|
||||||
op.#Load & {from: image},
|
op.#Load & {from: image},
|
||||||
// Copy volumes with type=copy
|
// Copy volumes with type=copy
|
||||||
@ -83,15 +98,10 @@ import (
|
|||||||
src: v.source
|
src: v.source
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// Execute setup script
|
// Execute setup commands, then main command
|
||||||
if setup != null {
|
for cmd in setup + [command] {
|
||||||
op.#Exec & {
|
op.#Exec & {
|
||||||
"env": env
|
args: [shell.path] + shell.args + [cmd]
|
||||||
args: ["/bin/sh", "-c", setup]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
op.#Exec & {
|
|
||||||
"args": args
|
|
||||||
"env": env
|
"env": env
|
||||||
"dir": dir
|
"dir": dir
|
||||||
"always": always
|
"always": always
|
||||||
@ -109,11 +119,10 @@ import (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
op.#Subdir & {
|
op.#Subdir & {
|
||||||
dir: outputDir
|
dir: outputDir
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -5,6 +5,8 @@ import (
|
|||||||
"dagger.io/dagger/op"
|
"dagger.io/dagger/op"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#Image: dagger.#Artifact
|
||||||
|
|
||||||
#Ref: string
|
#Ref: string
|
||||||
|
|
||||||
// Build a docker container image
|
// Build a docker container image
|
||||||
|
Reference in New Issue
Block a user