diff --git a/pkg/dagger.io/cue.mod/module.cue b/pkg/dagger.io/cue.mod/module.cue new file mode 100644 index 00000000..b2757079 --- /dev/null +++ b/pkg/dagger.io/cue.mod/module.cue @@ -0,0 +1 @@ +module: "dagger.io" diff --git a/pkg/dagger.io/dagger/engine/types.cue b/pkg/dagger.io/dagger/engine/types.cue index 4c13245c..15670df0 100644 --- a/pkg/dagger.io/dagger/engine/types.cue +++ b/pkg/dagger.io/dagger/engine/types.cue @@ -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: !="" } diff --git a/pkg/universe.dagger.io/cue.mod/pkg/.gitignore b/pkg/universe.dagger.io/cue.mod/pkg/.gitignore new file mode 100644 index 00000000..331f139d --- /dev/null +++ b/pkg/universe.dagger.io/cue.mod/pkg/.gitignore @@ -0,0 +1,5 @@ +# generated by dagger +dagger.lock +alpha.dagger.io +dagger.io +universe.dagger.io \ No newline at end of file diff --git a/pkg/universe.dagger.io/cue.mod/pkg/alpha.dagger.io b/pkg/universe.dagger.io/cue.mod/pkg/alpha.dagger.io deleted file mode 120000 index 961afc64..00000000 --- a/pkg/universe.dagger.io/cue.mod/pkg/alpha.dagger.io +++ /dev/null @@ -1 +0,0 @@ -../../../stdlib \ No newline at end of file diff --git a/pkg/universe.dagger.io/docker/build.cue b/pkg/universe.dagger.io/docker/build.cue index 16e0724b..7ff5c8a8 100644 --- a/pkg/universe.dagger.io/docker/build.cue +++ b/pkg/universe.dagger.io/docker/build.cue @@ -10,6 +10,7 @@ import ( steps: [#Step, ...#Step] output: #Image + // Generate build DAG from linerar steps _dag: { for idx, step in steps { diff --git a/pkg/universe.dagger.io/yarn/tests/testdata/package.json b/pkg/universe.dagger.io/yarn/test/testdata/package.json similarity index 100% rename from pkg/universe.dagger.io/yarn/tests/testdata/package.json rename to pkg/universe.dagger.io/yarn/test/testdata/package.json diff --git a/pkg/universe.dagger.io/yarn/tests/testdata2/package.json b/pkg/universe.dagger.io/yarn/test/testdata2/package.json similarity index 100% rename from pkg/universe.dagger.io/yarn/tests/testdata2/package.json rename to pkg/universe.dagger.io/yarn/test/testdata2/package.json diff --git a/pkg/universe.dagger.io/yarn/test/yarn-test.cue b/pkg/universe.dagger.io/yarn/test/yarn-test.cue new file mode 100644 index 00000000..014f238a --- /dev/null +++ b/pkg/universe.dagger.io/yarn/test/yarn-test.cue @@ -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"* ]] + // """ + // } + // } + } +} \ No newline at end of file diff --git a/pkg/universe.dagger.io/yarn/tests/simple/simple.cue b/pkg/universe.dagger.io/yarn/tests/simple/simple.cue deleted file mode 100644 index 19d771b1..00000000 --- a/pkg/universe.dagger.io/yarn/tests/simple/simple.cue +++ /dev/null @@ -1,11 +0,0 @@ -package yarn - -import ( - "dagger.io/dagger/engine" -) - -b: #Build & { - source: engine.#Scratch -} - -out: b.output diff --git a/pkg/universe.dagger.io/yarn/yarn.cue b/pkg/universe.dagger.io/yarn/yarn.cue index 6f0d839c..4cac4723 100644 --- a/pkg/universe.dagger.io/yarn/yarn.cue +++ b/pkg/universe.dagger.io/yarn/yarn.cue @@ -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 } diff --git a/plancontext/fs.go b/plancontext/fs.go index ab6f09c6..f1213ce3 100644 --- a/plancontext/fs.go +++ b/plancontext/fs.go @@ -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]