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/pkg/universe.dagger.io/examples/changelog.com/lowlevel/main.cue

172 lines
3.6 KiB
CUE
Raw Normal View History

package main
import (
"dagger.io/dagger/engine"
)
runtime_image_ref: string | *"thechangelog/runtime:2021-05-29T10.17.12Z"
engine.#Plan & {
inputs: directories: app: {
path: "."
exclude: [
".circleci",
".dagger",
".git",
".github",
"2021",
"2022",
"_build/dev",
"_build/test",
"assets/node_modules",
"cue.mod",
"dev_docker",
"docker",
"import",
"nginx",
"priv/db",
"priv/uploads",
"script",
"tmp",
".all-contributorsrc",
".autocomplete",
".credo.exs",
".dockerignore",
".formatter.exs",
".envrc",
".env",
".gitattributes",
".gitignore",
"README.md",
"coveralls.json",
"start_dev_stack.sh",
".kube",
"erl_crash.dump",
"deps",
"_build",
"dagger",
"main.cue",
]
}
inputs: directories: docker: {
path: "."
include: [
"docker/Dockerfile.production",
".dockerignore",
]
}
actions: {
runtimeImage: engine.#Pull & {
source: runtime_image_ref
}
depsCache: engine.#CacheDir & {
id: "depsCache"
}
depsCacheMount: "depsCache": {
dest: *"/app/deps/" | string
contents: depsCache
}
buildCacheTest: engine.#CacheDir & {
id: "buildCacheTest"
}
buildCacheTestMount: "buildCacheTest": {
dest: *"/app/_build/test" | string
contents: buildCacheTest
}
buildCacheProd: engine.#CacheDir & {
id: "buildCacheProd"
}
buildCacheProdMount: "buildCacheProd": {
dest: *"/app/_build/prod" | string
contents: buildCacheProd
}
nodeModulesCache: engine.#CacheDir & {
id: "nodeModulesCache"
}
nodeModulesCacheMount: "nodeModulesCache": {
dest: *"/app/assets/node_modules" | string
contents: nodeModulesCache
}
appImage: engine.#Copy & {
input: runtimeImage.output
source: root: inputs.directories.app.contents
dest: "/app"
}
deps: engine.#Exec & {
input: appImage.output
mounts: depsCacheMount
workdir: "/app"
args: ["bash", "-c", " mix deps.get"]
}
assetsCompile: engine.#Exec & {
input: depsCompileProd.output
mounts: depsCacheMount & nodeModulesCacheMount
workdir: "/app/assets"
env: PATH: "/usr/local/lib/nodejs/node-v14.17.0-linux-x64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
args: ["bash", "-c", "yarn install --frozen-lockfile && yarn run compile"]
}
#depsCompile: engine.#Exec & {
input: deps.output
mounts: depsCacheMount
workdir: "/app"
args: ["bash", "-c", "mix do deps.compile, compile"]
}
depsCompileTest: #depsCompile & {
env: MIX_ENV: "test"
mounts: buildCacheTestMount
}
depsCompileProd: #depsCompile & {
env: MIX_ENV: "prod"
mounts: buildCacheProdMount
}
assetsDigest: engine.#Exec & {
input: assetsCompile.output
mounts: depsCacheMount & buildCacheProdMount & nodeModulesCacheMount
env: MIX_ENV: "prod"
workdir: "/app"
args: ["bash", "-c", "mix phx.digest"]
}
imageProdCacheCopy: engine.#Exec & {
input: assetsDigest.output
mounts: (depsCacheMount & {depsCache: dest: "/mnt/app/deps/"} )
mounts: (buildCacheProdMount & {buildCacheProd: dest: "/mnt/app/_build/prod"} )
args: ["bash", "-c", "cp -Rp /mnt/app/deps/* /app/deps/ && cp -Rp /mnt/app/_build/prod/* /app/_build/prod/"]
}
imageProdDockerCopy: engine.#Copy & {
input: imageProdCacheCopy.output
source: root: inputs.directories.docker.contents
dest: "/"
}
imageProd: engine.#Build & {
source: imageProdDockerCopy.output
dockerfile: path: "/docker/Dockerfile.production"
buildArg: {
APP_FROM_PATH: "/app"
GIT_AUTHOR: "joel"
GIT_SHA: "abcdef"
APP_VERSION: "main"
BUILD_URL: "longtine.io/build"
}
}
}
}