package main

import (
	"strings"
	"dagger.io/dagger/engine"
)

engine.#Plan & {
	inputs: secrets: dockerHubToken: command: {
		name: "sops"
		args: ["exec-env", "../../secrets_sops.yaml", "echo $DOCKERHUB_TOKEN"]
	}

	#auth: [{
		target:   "daggerio/ci-test:private-pull"
		username: "daggertest"
		secret:   inputs.secrets.dockerHubToken.contents
	}]

	actions: {
		randomString: {
			baseImage: engine.#Pull & {
				source: "alpine:3.15.0@sha256:e7d88de73db3d3fd9b2d63aa7f447a10fd0220b7cbf39803c803f2af9ba256b3"
			}

			image: engine.#Exec & {
				input: baseImage.output
				args: [
					"sh", "-c", "echo -n $RANDOM > /output.txt",
				]
			}

			outputFile: engine.#ReadFile & {
				input: image.output
				path:  "/output.txt"
			}

			output: outputFile.contents
		}

		// Push image with random content
		push: engine.#Push & {
			dest:  "daggerio/ci-test:\(randomString.output)"
			input: randomString.image.output
			config: Env: ["FOO=\(randomString.output)"]
			auth: #auth
		}

		// Pull same image and check the content
		pull: engine.#Pull & {
			source: "daggerio/ci-test:\(randomString.output)"
			auth:   #auth
		} & {
			// check digest
			digest: strings.Split(push.result, "@")[1]
			// check image config
			config: {
				Env: ["FOO=\(randomString.output)"]
			}
		}

		pullOutputFile: engine.#ReadFile & {
			input: pull.output
			path:  "/output.txt"
		}

		// Check output file in the pulled image
		pullContent: string & pullOutputFile.contents & randomString.contents
	}
}