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
// Rule of thumb: if it fits in a tar archive, it fits in a #FS.
#FS: {
$dagger: fs: _id: string | null
$dagger: fs: _id: !="" | null
}
// 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
// by a special filesystem mount designed to minimize leak risk.
#Secret: {
$dagger: secret: _id: string
$dagger: secret: _id: !=""
}
// A reference to a network service endpoint, for example:
@ -25,5 +25,5 @@ package engine
// - A unix or npipe socket
// - An HTTPS endpoint
#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]
output: #Image
// Generate build DAG from linerar steps
_dag: {
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/engine"
"universe.dagger.io/alpine"
// "universe.dagger.io/alpine"
"universe.dagger.io/docker"
"universe.dagger.io/bash"
)
@ -30,28 +31,54 @@ import (
// Run this yarn script
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
args: [...string] | *[]
// Secret variables
// FIXME: not implemented. Are they needed?
secrets: [string]: dagger.#Secret
// Yarn version
yarnVersion: *"=~1.22" | string
// FIXME: trouble getting docker.#Build to work (cueflow task dependencies not working)
alpine: docker.#Pull & {
source: "index.docker.io/alpine:3.13.5@sha256:69e70a79f2d41ab5d637de98c1e0b055206ba40a8145e7bddb55ccc04e13cf8f"
}
yarnImage: docker.#Run & {
image: alpine.image
script: """
apk add -U --no-cache bash yarn
"""
}
// Run yarn in a containerized build environment
command: bash.#Run & {
*{
image: (alpine.#Build & {
bash: version: "=~5.1"
yarn: version: yarnVersion
}).image
env: CUSTOM_IMAGE: "0"
} | {
env: CUSTOM_IMAGE: "1"
}
// FIXME: not working?
// *{
// _image: alpine.#Build & {
// packages: {
// bash: version: "=~5.1"
// yarn: version: yarnVersion
// }
// }
script: """
// image: _image.output
// env: CUSTOM_IMAGE: "0"
// } | {
// env: CUSTOM_IMAGE: "1"
// }
image: docker.#Image & yarnImage.output
script: #"""
# Create $ENVFILE_NAME file if set
[ -n "$ENVFILE_NAME" ] && echo "$ENVFILE" > "$ENVFILE_NAME"
@ -60,12 +87,12 @@ import (
opts=( $(echo $YARN_ARGS) )
yarn --cwd "$YARN_CWD" run "$YARN_BUILD_SCRIPT" ${opts[@]}
mv "$YARN_BUILD_DIRECTORY" /build
"""
"""#
mounts: {
"yarn cache": {
dest: "/cache/yarn"
contents: engine.#CacheDir
contents: cache
}
"package source": {
dest: "/src"
@ -74,10 +101,11 @@ import (
// FIXME: mount secrets
}
output: directories: "/build": _
// FIXME
directories: "/build": _
env: {
YARN_BUILD_SCRIPT: script
YARN_BUILD_SCRIPT: yarnScript
YARN_ARGS: strings.Join(args, "\n")
YARN_CACHE_FOLDER: "/cache/yarn"
YARN_CWD: cwd
@ -92,5 +120,5 @@ import (
}
// 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()
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]