WIP: Fix Europa yarn

Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
This commit is contained in:
Andrea Luzzardi 2022-01-13 17:43:34 -08:00 committed by Sam Alba
parent ed8bb3f91b
commit c7ffdf788f
11 changed files with 137 additions and 32 deletions

View File

@ -0,0 +1 @@
module: "dagger.io"

View File

@ -7,7 +7,7 @@ package engine
// - A directory containing binary artifacts // - A directory containing binary artifacts
// Rule of thumb: if it fits in a tar archive, it fits in a #FS. // Rule of thumb: if it fits in a tar archive, it fits in a #FS.
#FS: { #FS: {
$dagger: fs: _id: string | null $dagger: fs: _id: !="" | null
} }
// A reference to an external secret, for example: // A reference to an external secret, for example:
@ -17,7 +17,7 @@ package engine
// Secrets are never merged in the Cue tree. They can only be used // Secrets are never merged in the Cue tree. They can only be used
// by a special filesystem mount designed to minimize leak risk. // by a special filesystem mount designed to minimize leak risk.
#Secret: { #Secret: {
$dagger: secret: _id: string $dagger: secret: _id: !=""
} }
// A reference to a network service endpoint, for example: // A reference to a network service endpoint, for example:
@ -25,5 +25,5 @@ package engine
// - A unix or npipe socket // - A unix or npipe socket
// - An HTTPS endpoint // - An HTTPS endpoint
#Service: { #Service: {
$dagger: service: _id: string $dagger: service: _id: !=""
} }

View File

@ -0,0 +1,5 @@
# generated by dagger
dagger.lock
alpha.dagger.io
dagger.io
universe.dagger.io

View File

@ -1 +0,0 @@
../../../stdlib

View File

@ -10,6 +10,7 @@ import (
steps: [#Step, ...#Step] steps: [#Step, ...#Step]
output: #Image output: #Image
// Generate build DAG from linerar steps // Generate build DAG from linerar steps
_dag: { _dag: {
for idx, step in steps { for idx, step in steps {

View File

@ -0,0 +1,82 @@
package yarn
import (
"dagger.io/dagger"
"dagger.io/dagger/engine"
"universe.dagger.io/yarn"
// "universe.dagger.io/alpine"
// "universe.dagger.io/bash"
)
dagger.#Plan & {
inputs: {
directories: {
testdata: path: "./testdata"
testdata2: path: "./testdata2"
}
}
actions: {
TestReact: {
cache: engine.#CacheDir & {
id: "yarn cache"
}
pkg: yarn.#Build & {
source: inputs.directories.testdata.contents
"cache": cache
}
_image: engine.#Pull & {
source: "alpine:3.15.0@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3"
}
// FIXME: use bash.#Script
test: engine.#Exec & {
input: _image.output
mounts: build: {
dest: "/build"
contents: pkg.output
}
args: [
"sh", "-c",
#"""
test "$(cat /build/test)" = "output"
"""#
]
}
}
// FIXME: re-enable?
// TestSecretsAndFile: {
// pkg: #Package & {
// source: inputs.directories.testdata2
// writeEnvFile: "/.env"
// env: {
// one: "one"
// two: "two"
// }
// secrets: {
// secretone: dagger.#Secret @dagger(input)
// secretwo: dagger.#Secret @dagger(input)
// }
// }
// test: os.#Container & {
// image: alpine.#Image & {
// package: bash: true
// }
// shell: path: "/bin/bash"
// mount: "/build": from: pkg.build
// command: """
// content="$(cat /build/env)"
// [[ "${content}" = *"SECRETONE="* ]] && \\
// [[ "${content}" = *"SECRETWO="* ]] && \\
// [[ "${content}" = *"ONE=one"* ]] && \\
// [[ "${content}" = *"TWO=two"* ]]
// """
// }
// }
}
}

View File

@ -1,11 +0,0 @@
package yarn
import (
"dagger.io/dagger/engine"
)
b: #Build & {
source: engine.#Scratch
}
out: b.output

View File

@ -7,7 +7,8 @@ import (
"dagger.io/dagger" "dagger.io/dagger"
"dagger.io/dagger/engine" "dagger.io/dagger/engine"
"universe.dagger.io/alpine" // "universe.dagger.io/alpine"
"universe.dagger.io/docker"
"universe.dagger.io/bash" "universe.dagger.io/bash"
) )
@ -30,28 +31,54 @@ import (
// Run this yarn script // Run this yarn script
script: string | *"build" script: string | *"build"
// Fix for shadowing issues
let yarnScript = script
// FIXME: `CacheDir` must be passed by the caller?
cache: engine.#CacheDir
// Optional arguments for the script // Optional arguments for the script
args: [...string] | *[] args: [...string] | *[]
// Secret variables // Secret variables
// FIXME: not implemented. Are they needed?
secrets: [string]: dagger.#Secret secrets: [string]: dagger.#Secret
// Yarn version // Yarn version
yarnVersion: *"=~1.22" | string yarnVersion: *"=~1.22" | string
// Run yarn in a containerized build environment // FIXME: trouble getting docker.#Build to work (cueflow task dependencies not working)
command: bash.#Run & { alpine: docker.#Pull & {
*{ source: "index.docker.io/alpine:3.13.5@sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f"
image: (alpine.#Build & { }
bash: version: "=~5.1" yarnImage: docker.#Run & {
yarn: version: yarnVersion image: alpine.image
}).image script: """
env: CUSTOM_IMAGE: "0" apk add -U --no-cache bash yarn
} | { """
env: CUSTOM_IMAGE: "1"
} }
script: """ // Run yarn in a containerized build environment
command: bash.#Run & {
// FIXME: not working?
// *{
// _image: alpine.#Build & {
// packages: {
// bash: version: "=~5.1"
// yarn: version: yarnVersion
// }
// }
// image: _image.output
// env: CUSTOM_IMAGE: "0"
// } | {
// env: CUSTOM_IMAGE: "1"
// }
image: docker.#Image & yarnImage.output
script: #"""
# Create $ENVFILE_NAME file if set # Create $ENVFILE_NAME file if set
[ -n "$ENVFILE_NAME" ] && echo "$ENVFILE" > "$ENVFILE_NAME" [ -n "$ENVFILE_NAME" ] && echo "$ENVFILE" > "$ENVFILE_NAME"
@ -60,12 +87,12 @@ import (
opts=( $(echo $YARN_ARGS) ) opts=( $(echo $YARN_ARGS) )
yarn --cwd "$YARN_CWD" run "$YARN_BUILD_SCRIPT" ${opts[@]} yarn --cwd "$YARN_CWD" run "$YARN_BUILD_SCRIPT" ${opts[@]}
mv "$YARN_BUILD_DIRECTORY" /build mv "$YARN_BUILD_DIRECTORY" /build
""" """#
mounts: { mounts: {
"yarn cache": { "yarn cache": {
dest: "/cache/yarn" dest: "/cache/yarn"
contents: engine.#CacheDir contents: cache
} }
"package source": { "package source": {
dest: "/src" dest: "/src"
@ -74,10 +101,11 @@ import (
// FIXME: mount secrets // FIXME: mount secrets
} }
output: directories: "/build": _ // FIXME
directories: "/build": _
env: { env: {
YARN_BUILD_SCRIPT: script YARN_BUILD_SCRIPT: yarnScript
YARN_ARGS: strings.Join(args, "\n") YARN_ARGS: strings.Join(args, "\n")
YARN_CACHE_FOLDER: "/cache/yarn" YARN_CACHE_FOLDER: "/cache/yarn"
YARN_CWD: cwd YARN_CWD: cwd
@ -92,5 +120,5 @@ import (
} }
// The final contents of the package after build // The final contents of the package after build
output: command.output.directories."/build".contents output: command.directories."/build".contents
} }

View File

@ -84,7 +84,7 @@ func (c *fsContext) FromValue(v *compiler.Value) (*FS, error) {
id, err := v.LookupPath(fsIDPath).String() id, err := v.LookupPath(fsIDPath).String()
if err != nil { if err != nil {
return nil, fmt.Errorf("invalid FS %q: %w", v.Path(), err) return nil, fmt.Errorf("invalid FS at path %q: %w", v.Path(), err)
} }
fs, ok := c.store[id] fs, ok := c.store[id]