diff --git a/stdlib/io/io.cue b/stdlib/io/io.cue index 3fb71d4b..3c142ab0 100644 --- a/stdlib/io/io.cue +++ b/stdlib/io/io.cue @@ -1,59 +1,37 @@ package io -import ( - "dagger.io/dagger" - "dagger.io/dagger/op" -) - +// Standard interface for directory operations in cue #Dir: { - from: dagger.#Artifact - path: string - - // Read the tree structure (not file contents) - read: tree: { - string// FIXME: only raw 'find' output for now - #up: [ - op.#FetchContainer & { - ref: "alpine" // FIXME: use alpine or docker package - }, - op.#Exec & { - mount: "/data": "from": from - args: [ - "sh", "-c", - #"find /data | sed 's/^\/data//' > /export.txt"#, - ] - }, - op.#Export & { - source: "/export.txt" - format: "string" - }, - ] - } + read: tree: string + ... } +// Standard interface for file operations in cue #File: { - from: dagger.#Artifact - path: string + #Reader + #Writer + ... +} + +#ReadWriter: #Reader & #Writer + +#Reader: { read: { + // FIXME: support different data schemas for different formats format: "string" | "json" | "yaml" | "lines" data: { string - #up: [ - op.#Load & {"from": from}, - op.#Export & {source: path, "format": format}, - ] + ... } } + ... +} + +#Writer: { write: *null | { // FIXME: support writing in multiple formats // FIXME: append data: _ - #up: [ - op.#Load & {"from": from}, - op.#WriteFile & { - dest: path - contents: data - }, - ] } + ... } diff --git a/stdlib/os/os.cue b/stdlib/os/os.cue new file mode 100644 index 00000000..09360ee0 --- /dev/null +++ b/stdlib/os/os.cue @@ -0,0 +1,65 @@ +package os + +import ( + "dagger.io/io" + + "dagger.io/dagger" + "dagger.io/dagger/op" +) + +#Dir: io.#Dir & { + from: dagger.#Artifact + path: string + + // Read the tree structure (not file contents) + read: tree: { + string// FIXME: only raw 'find' output for now + #up: [ + op.#FetchContainer & { + ref: "alpine" // FIXME: use alpine or docker package + }, + op.#Exec & { + mount: "/data": "from": from + args: [ + "sh", "-c", + #"find /data | sed 's/^\/data//' > /export.txt"#, + ] + }, + op.#Export & { + source: "/export.txt" + format: "string" + }, + ] + } +} + +#File: { + from: dagger.#Artifact + path: string + + io.#Reader & { + read: { + format: _ + data: { + _ + #up: [ + op.#Load & {"from": from}, + op.#Export & {source: path, "format": format}, + ] + } + } + } + + io.#Writer & { + write: *null | { + data: _ + #up: [ + op.#Load & {"from": from}, + op.#WriteFile & { + dest: path + contents: data + }, + ] + } + } +}