From dc8d6b74ddaf1c83c0e40a6151290da9833b6d2b Mon Sep 17 00:00:00 2001 From: Joel Longtine Date: Thu, 6 Jan 2022 11:12:43 -0700 Subject: [PATCH] First pass through changelog.com Europa port Uses the low-level engine API. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ⚠️ Is _not_ complete! Signed-off-by: Joel Longtine --- .../examples/changelog.com/lowlevel/main.cue | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 europa-universe/examples/changelog.com/lowlevel/main.cue diff --git a/europa-universe/examples/changelog.com/lowlevel/main.cue b/europa-universe/examples/changelog.com/lowlevel/main.cue new file mode 100644 index 00000000..d67abec8 --- /dev/null +++ b/europa-universe/examples/changelog.com/lowlevel/main.cue @@ -0,0 +1,175 @@ +package main + +import ( + "alpha.dagger.io/europa/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" + } + } + } +}