package main

import (
	"dagger.io/dagger"
	"dagger.io/dagger/core"
)

dagger.#Plan & {
	actions: {
		image: core.#Pull & {
			source: "alpine:3.15.0@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3"
		}

		exec: core.#Exec & {
			input: image.output
			args: [
				"sh", "-c",
				#"""
					echo -n hello world > /output.txt
					"""#,
			]
		}

		test: {
			verify: core.#Exec & {
				input: image.output
				mounts: fs: {
					dest:     "/target"
					contents: exec.output
				}
				args: [
					"sh", "-c",
					#"""
						test "$(cat /target/output.txt)" = "hello world"
						touch /target/rw
						"""#,
				]
			}

			verifyRO: core.#Exec & {
				input: image.output
				mounts: fs: {
					dest:     "/target"
					contents: exec.output
					ro:       true
				}
				args: [
					"sh", "-c",
					#"""
						test "$(cat /target/output.txt)" = "hello world"

						touch /target/ro && exit 1
						true
						"""#,
				]
			}

			verifySource: core.#Exec & {
				input: image.output
				mounts: fs: {
					dest:     "/target.txt"
					contents: exec.output
					source:   "/output.txt"
				}
				args: [
					"sh", "-c",
					#"""
						test "$(cat /target.txt)" = "hello world"
						"""#,
				]
			}
		}
	}
}