stdlib: dagger.io/js/react

Signed-off-by: Solomon Hykes <sh.github.6811@hykes.org>
This commit is contained in:
Solomon Hykes 2021-04-07 16:57:39 +00:00
parent cfde22b69d
commit ee621590ff
9 changed files with 112 additions and 110 deletions

View File

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

View File

@ -2,7 +2,7 @@ package main
import ( import (
"dagger.io/netlify" "dagger.io/netlify"
"dagger.io/yarn" "dagger.io/js/react"
"dagger.io/git" "dagger.io/git"
) )
@ -19,14 +19,9 @@ www: netlify.#Site & {
// Deploy the output of yarn build // Deploy the output of yarn build
// (Netlify build feature is not used, to avoid extra cost). // (Netlify build feature is not used, to avoid extra cost).
contents: build contents: app.build
} }
// Build the application with Yarn app: react.#App & {
build: yarn.#Script & {
// What to build
source: repo source: repo
// How to build it (name of yarn script)
run: "build"
} }

View File

@ -38,7 +38,7 @@ package op
#Subdir: { #Subdir: {
do: "subdir" do: "subdir"
dir: string | *"/" dir: string
} }
#Exec: { #Exec: {

66
stdlib/js/react/react.cue Normal file
View File

@ -0,0 +1,66 @@
package react
import (
"dagger.io/dagger"
"dagger.io/alpine"
"dagger.io/docker"
)
// A ReactJS application
#App: {
// Application source code
source: dagger.#Artifact
// Yarn-specific settings
yarn: {
// Read build output from this directory
// (path must be relative to working directory).
buildDir: string | *"build"
// Run this yarn script
script: string | *"build"
}
setup: [
"mkdir -p /cache/yarn",
]
// Build the application in a container, using yarn
build: docker.#Container & {
image: alpine.#Image & {
package: bash: "=~5.1"
package: yarn: "=~1.22"
}
dir: "/src"
command: """
yarn install --production false
yarn run "$YARN_BUILD_SCRIPT"
mv "$YARN_BUILD_DIRECTORY" \(outputDir)
"""
volume: {
src: {
from: source
dest: "/src"
}
// yarnCache: {
// type: "cache"
// dest: "/cache/yarn"
// }
}
outputDir: "/build"
shell: {
path: "/bin/bash"
args: [
"--noprofile",
"--norc",
"-eo", "pipefail",
"-c",
]
}
env: {
YARN_BUILD_SCRIPT: yarn.script
YARN_CACHE_FOLDER: "/cache/yarn"
YARN_BUILD_DIRECTORY: yarn.buildDir
}
}
}

View File

@ -1,63 +0,0 @@
package yarn
import (
"dagger.io/dagger"
"dagger.io/alpine"
"dagger.io/dagger/op"
)
// Yarn Script
#Script: {
// Source code of the javascript application
source: dagger.#Artifact
// Run this yarn script
run: string | *"build"
// Read build output from this directory
// (path must be relative to working directory).
buildDirectory: string | *"build"
// Set these environment variables during the build
env?: [string]: string
#up: [
op.#Load & {
from: alpine.#Image & {
package: bash: "=~5.1"
package: yarn: "=~1.22"
}
},
op.#Exec & {
args: [
"/bin/bash",
"--noprofile",
"--norc",
"-eo",
"pipefail",
"-c",
"""
yarn install --production false
yarn run "$YARN_BUILD_SCRIPT"
mv "$YARN_BUILD_DIRECTORY" /build
""",
]
if env != _|_ {
"env": env
}
"env": {
YARN_BUILD_SCRIPT: run
YARN_CACHE_FOLDER: "/cache/yarn"
YARN_BUILD_DIRECTORY: buildDirectory
}
dir: "/src"
mount: {
"/src": from: source
"/cache/yarn": "cache"
}
},
op.#Subdir & {
dir: "/build"
},
]
}

View File

@ -0,0 +1,39 @@
package react
import (
"dagger.io/dagger"
"dagger.io/js/react"
"dagger.io/alpine"
"dagger.io/docker"
)
TestData: dagger.#Artifact
TestReact: {
app: react.#App & {
source: TestData
}
test: docker.#Container & {
image: alpine.#Image & {
package: bash: "=5.1.0-r0"
}
volume: build: {
from: app.build
dest: "/build"
}
command: """
test "$(cat /build/test)" = "output"
"""
shell: {
path: "/bin/bash"
args: [
"--noprofile",
"--norc",
"-eo",
"pipefail",
"-c",
]
}
}
}

View File

@ -1,36 +0,0 @@
package yarn
import (
"dagger.io/dagger"
"dagger.io/yarn"
"dagger.io/alpine"
"dagger.io/dagger/op"
)
TestData: dagger.#Artifact
TestYarn: {
run: yarn.#Script & {
source: TestData
}
test: #up: [
op.#Load & {from: alpine.#Image & {
package: bash: "=5.1.0-r0"
}},
op.#Exec & {
mount: "/build": from: run
args: [
"/bin/bash",
"--noprofile",
"--norc",
"-eo",
"pipefail",
"-c",
"""
test "$(cat /build/test)" = "output"
""",
]
},
]
}

View File

@ -9,8 +9,8 @@ test::stdlib(){
test::one "stdlib: alpine" \ test::one "stdlib: alpine" \
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/alpine "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/alpine
test::one "stdlib: yarn" \ test::one "stdlib: react" \
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/yarn --input-dir TestData="$d"/stdlib/yarn/testdata "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/js/react --input-dir TestData="$d"/stdlib/js/react/testdata
test::one "stdlib: go" \ test::one "stdlib: go" \
"$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/go --input-dir TestData="$d"/stdlib/go/testdata "$dagger" "${DAGGER_BINARY_ARGS[@]}" compute "$d"/stdlib/go --input-dir TestData="$d"/stdlib/go/testdata
test::one "stdlib: file" \ test::one "stdlib: file" \