e8a62cb3aa
Signed-off-by: Solomon Hykes <solomon@dagger.io>
89 lines
1.6 KiB
CUE
89 lines
1.6 KiB
CUE
package mix
|
|
|
|
import (
|
|
"dagger.io/dagger"
|
|
"dagger.io/dagger/engine"
|
|
|
|
"universe.dagger.io/docker"
|
|
)
|
|
|
|
#Get: #Run & {
|
|
// Applies to all environments
|
|
env: null
|
|
cache: {
|
|
build: null
|
|
deps: "locked"
|
|
}
|
|
container: command: {
|
|
name: "sh"
|
|
flags: "-c": "mix do deps.get"
|
|
}
|
|
}
|
|
|
|
// Compile Elixir dependencies, including the app
|
|
#Compile: #Run & {
|
|
cache: {
|
|
build: "locked"
|
|
deps: "locked"
|
|
}
|
|
container: command: {
|
|
name: "sh"
|
|
flags: "-c": "mix do deps.compile, compile"
|
|
}
|
|
}
|
|
|
|
// Run mix task with all necessary mounts so compiled artefacts get cached
|
|
// FIXME: add default image to hexpm/elixir:1.13.2-erlang-23.3.4.11-debian-bullseye-20210902
|
|
#Run: {
|
|
app: {
|
|
// Application name
|
|
name: string
|
|
|
|
// Application source code
|
|
source: dagger.#FS
|
|
}
|
|
|
|
// Mix environment
|
|
env: string | null
|
|
|
|
// Configure mix caching
|
|
// FIXME: simpler interface, eg. "ro" | "rw"
|
|
cache: {
|
|
// Dependencies cache
|
|
deps: null | "locked"
|
|
|
|
// Build cache
|
|
build: null | "locked"
|
|
}
|
|
|
|
// Run mix in a docker container
|
|
container: docker.#Run & {
|
|
if env != null {
|
|
"env": MIX_ENV: env
|
|
}
|
|
workdir: mounts.app.dest
|
|
mounts: "app": {
|
|
contents: app.source
|
|
dest: "/mix/app"
|
|
}
|
|
if cache.deps != null {
|
|
mounts: deps: {
|
|
contents: engine.#CacheDir & {
|
|
id: "\(app.name)_deps"
|
|
concurrency: cache.deps
|
|
}
|
|
dest: "\(mounts.app.dest)/deps"
|
|
}
|
|
}
|
|
if cache.build != null {
|
|
mounts: buildCache: {
|
|
contents: engine.#CacheDir & {
|
|
id: "\(app.name)_build_\(env)"
|
|
concurrency: cache.build
|
|
}
|
|
dest: "\(mounts.app.dest)/_build/\(env)"
|
|
}
|
|
}
|
|
}
|
|
}
|