diff --git a/docs/core-concepts/1203-client.md b/docs/core-concepts/1203-client.md index 8386eb42..0655651a 100644 --- a/docs/core-concepts/1203-client.md +++ b/docs/core-concepts/1203-client.md @@ -17,37 +17,12 @@ displayed_sidebar: europa You may need to load a local directory as a `dagger.#FS` type in your plan: -```cue -dagger.#Plan & { - // Path may be absolute, or relative to current working directory - client: filesystem: ".": read: { - // CUE type defines expected content - contents: dagger.#FS - exclude: ["node_modules"] - } - actions: { - ... - copy: docker.Copy & { - contents: client.filesystem.".".read.contents - } - ... - } -} +```cue file=../tests/core-concepts/client/plans/fs.cue ``` It’s also easy to write a file locally: -```cue -dagger.#Plan & { - client: filesystem: "config.yaml": write: { - contents: yaml.Marshal(actions.pull.output.config) - } - actions: { - pull: docker.#Pull & { - source: "alpine" - } - } -} +```cue file=../tests/core-concepts/client/plans/file.cue ``` ## Using a local socket @@ -61,59 +36,14 @@ import TabItem from '@theme/TabItem'; -```cue -dagger.#Plan & { - client: filesystem: "/var/run/docker.sock": read: { - contents: dagger.#Service - } - - actions: { - image: alpine.#Build & { - packages: "docker-cli": {} - } - run: docker.#Run & { - input: image.output - mounts: docker: { - dest: "/var/run/docker.sock" - contents: client.filesystem."/var/run/docker.sock".read.contents - } - command: { - name: "docker" - args: ["info"] - } - } - } -} +```cue file=../tests/core-concepts/client/plans/unix.cue ``` -```cue -dagger.#Plan & { - client: filesystem: "//./pipe/docker_engine": read: { - contents: dagger.#Service - type: "npipe" - } - - actions: { - image: alpine.#Build & { - packages: "docker-cli": {} - } - run: docker.#Run & { - input: image.output - mounts: docker: { - dest: "/var/run/docker.sock" - contents: client.filesystem."//./pipe/docker_engine".read.contents - } - command: { - name: "docker" - args: ["info"] - } - } - } -} +```cue file=../tests/core-concepts/client/plans/windows.cue ``` @@ -123,68 +53,23 @@ dagger.#Plan & { Environment variables can be read from the local machine as strings or secrets, just specify the type: -```cue -dagger.#Plan & { - client: env: { - GITLAB_USER: string - GITLAB_TOKEN: dagger.#Secret - } - actions: { - pull: docker.#Pull & { - source: "registry.gitlab.com/myuser/myrepo" - auth: { - username: client.env.GITLAB_USR - secret: client.env.GITLAB_TOKEN - } - } - } -} +```cue file=../tests/core-concepts/client/plans/env.cue ``` ## Running commands Sometimes you need something more advanced that only a local command can give you: -```cue -dagger.#Plan & { - client: commands: { - os: { - name: "uname" - args: ["-s"] - } - arch: { - name: "uname" - args: ["-m"] - } - } - actions: { - build: docker.#Run & { - env: { - CLIENT_OS: client.commands.os.stdout - CLIENT_ARCH: client.commands.arch.stdout - } - } - } -} +```cue file=../tests/core-concepts/client/plans/cmd.cue ``` +:::tip You can also capture `stderr` for errors and provide `stdin` for input. +::: ## Platform If you need the current platform though, there’s a more portable way than running `uname` like in the previous example: -```cue -dagger.#Plan & { - client: platform: _ - - actions: { - build: docker.#Run & { - env: { - CLIENT_OS: client.platform.os - CLIENT_ARCH: client.platform.arch - } - } - } -} +```cue file=../tests/core-concepts/client/plans/platform.cue ``` diff --git a/docs/core-concepts/1204-secrets.md b/docs/core-concepts/1204-secrets.md index 153270b7..c295e62c 100644 --- a/docs/core-concepts/1204-secrets.md +++ b/docs/core-concepts/1204-secrets.md @@ -27,26 +27,7 @@ dagger.#Plan & { You may need to trim the whitespace, especially when reading from a file: -```cue -dagger.#Plan & { - // Path may be absolute, or relative to current working directory - client: filesystem: ".registry": read: { - // CUE type defines expected content - contents: dagger.#Secret - } - actions: { - registry: dagger.#TrimSecret & { - input: client.filesystem.".registry".read.contents - } - pull: docker.#Pull & { - source: "myprivate/image" - auth: { - username: "_token_" - secret: registry.output - } - } - } -} +```cue file=../tests/core-concepts/secrets/plans/file.cue ``` ## SOPS @@ -59,30 +40,5 @@ sops: ... ``` -```cue title="main.cue" -dagger.#Plan & { - client: commands: sops: { - name: "sops" - args: ["-d", "./secrets.yaml"] - stdout: dagger.#Secret - } - - actions: { - // Makes the yaml keys easily accessible - secrets: dagger.#DecodeSecret & { - input: client.commands.sops.stdout - format: "yaml" - } - - run: docker.#Run & { - mounts: secret: { - dest: "/run/secrets/token" - contents: secrets.output.myToken - } - // Do something with `/run/secrets/token` - ... - } - } -} - +```cue file=../tests/core-concepts/secrets/plans/sops.cue title="main.cue" ``` diff --git a/docs/tests/core-concepts/client/plans/cmd.cue b/docs/tests/core-concepts/client/plans/cmd.cue new file mode 100644 index 00000000..c477f694 --- /dev/null +++ b/docs/tests/core-concepts/client/plans/cmd.cue @@ -0,0 +1,18 @@ +dagger.#Plan & { + client: commands: { + os: { + name: "uname" + args: ["-s"] + } + arch: { + name: "uname" + args: ["-m"] + } + } + + actions: build: go.#Build & { + os: client.commands.os.stdout + arch: client.commands.arch.stdout + // ... + } +} diff --git a/docs/tests/core-concepts/client/plans/env.cue b/docs/tests/core-concepts/client/plans/env.cue new file mode 100644 index 00000000..4f8a084e --- /dev/null +++ b/docs/tests/core-concepts/client/plans/env.cue @@ -0,0 +1,14 @@ +dagger.#Plan & { + client: env: { + REGISTRY_USER: string + REGISTRY_TOKEN: dagger.#Secret + } + + actions: pull: docker.#Pull & { + source: "registry.example.com/image" + auth: { + username: client.env.REGISTRY_USER + secret: client.env.REGISTRY_TOKEN + } + } +} diff --git a/docs/tests/core-concepts/client/plans/file.cue b/docs/tests/core-concepts/client/plans/file.cue new file mode 100644 index 00000000..efa55c16 --- /dev/null +++ b/docs/tests/core-concepts/client/plans/file.cue @@ -0,0 +1,15 @@ +import ( + "encoding/yaml" + // ... +) + +dagger.#Plan & { + client: filesystem: "config.yaml": write: { + // Convert a CUE value into a YAML formatted string + contents: yaml.Marshal(actions.pull.output.config) + } + + actions: pull: docker.#Pull & { + source: "alpine" + } +} diff --git a/docs/tests/core-concepts/client/plans/fs.cue b/docs/tests/core-concepts/client/plans/fs.cue new file mode 100644 index 00000000..669eb2cd --- /dev/null +++ b/docs/tests/core-concepts/client/plans/fs.cue @@ -0,0 +1,15 @@ +dagger.#Plan & { + // Path may be absolute, or relative to current working directory + client: filesystem: ".": read: { + // CUE type defines expected content + contents: dagger.#FS + exclude: ["node_modules"] + } + + actions: { + copy: docker.Copy & { + contents: client.filesystem.".".read.contents + } + // ... + } +} diff --git a/docs/tests/core-concepts/client/plans/platform.cue b/docs/tests/core-concepts/client/plans/platform.cue new file mode 100644 index 00000000..f5b776c1 --- /dev/null +++ b/docs/tests/core-concepts/client/plans/platform.cue @@ -0,0 +1,9 @@ +dagger.#Plan & { + client: _ + + actions: build: go.#Build & { + os: client.platform.os + arch: client.platform.arch + // ... + } +} diff --git a/docs/tests/core-concepts/client/plans/unix.cue b/docs/tests/core-concepts/client/plans/unix.cue new file mode 100644 index 00000000..d82d7cd7 --- /dev/null +++ b/docs/tests/core-concepts/client/plans/unix.cue @@ -0,0 +1,20 @@ +dagger.#Plan & { + client: filesystem: "/var/run/docker.sock": read: contents: dagger.#Service + + actions: { + image: alpine.#Build & { + packages: "docker-cli": {} + } + run: docker.#Run & { + input: image.output + mounts: docker: { + dest: "/var/run/docker.sock" + contents: client.filesystem."/var/run/docker.sock".read.contents + } + command: { + name: "docker" + args: ["info"] + } + } + } +} diff --git a/docs/tests/core-concepts/client/plans/windows.cue b/docs/tests/core-concepts/client/plans/windows.cue new file mode 100644 index 00000000..85ab64e1 --- /dev/null +++ b/docs/tests/core-concepts/client/plans/windows.cue @@ -0,0 +1,23 @@ +dagger.#Plan & { + client: filesystem: "//./pipe/docker_engine": read: { + contents: dagger.#Service + type: "npipe" + } + + actions: { + image: alpine.#Build & { + packages: "docker-cli": {} + } + run: docker.#Run & { + input: image.output + mounts: docker: { + dest: "/var/run/docker.sock" + contents: client.filesystem."//./pipe/docker_engine".read.contents + } + command: { + name: "docker" + args: ["info"] + } + } + } +} diff --git a/docs/tests/core-concepts/container-images/plans/src/app.go b/docs/tests/core-concepts/container-images/plans/src/app.go new file mode 100644 index 00000000..078ddff8 --- /dev/null +++ b/docs/tests/core-concepts/container-images/plans/src/app.go @@ -0,0 +1,7 @@ +package main + +import "fmt" + +func main() { + fmt.Println("Hello, 世界") +} diff --git a/docs/tests/core-concepts/container-images/plans/src/go.mod b/docs/tests/core-concepts/container-images/plans/src/go.mod new file mode 100644 index 00000000..496135e4 --- /dev/null +++ b/docs/tests/core-concepts/container-images/plans/src/go.mod @@ -0,0 +1,3 @@ +module dagger.io/test + +go 1.17 diff --git a/docs/tests/core-concepts/secrets/plans/file.cue b/docs/tests/core-concepts/secrets/plans/file.cue new file mode 100644 index 00000000..6807cce4 --- /dev/null +++ b/docs/tests/core-concepts/secrets/plans/file.cue @@ -0,0 +1,19 @@ +dagger.#Plan & { + // Path may be absolute, or relative to current working directory + client: filesystem: ".registry": read: { + // CUE type defines expected content + contents: dagger.#Secret + } + actions: { + registry: dagger.#TrimSecret & { + input: client.filesystem.".registry".read.contents + } + pull: docker.#Pull & { + source: "registry.example.com/image" + auth: { + username: "_token_" + secret: registry.output + } + } + } +} diff --git a/docs/tests/core-concepts/secrets/plans/sops.cue b/docs/tests/core-concepts/secrets/plans/sops.cue new file mode 100644 index 00000000..7afeee45 --- /dev/null +++ b/docs/tests/core-concepts/secrets/plans/sops.cue @@ -0,0 +1,23 @@ +dagger.#Plan & { + client: commands: sops: { + name: "sops" + args: ["-d", "./secrets.yaml"] + stdout: dagger.#Secret + } + + actions: { + // Makes the yaml keys easily accessible + secrets: dagger.#DecodeSecret & { + input: client.commands.sops.stdout + format: "yaml" + } + + run: docker.#Run & { + mounts: secret: { + dest: "/run/secrets/token" + contents: secrets.output.myToken + } + // Do something with `/run/secrets/token` + } + } +}